Recherche avancée

Médias (3)

Mot : - Tags -/spip

Autres articles (61)

  • Personnaliser les catégories

    21 juin 2013, par

    Formulaire de création d’une catégorie
    Pour ceux qui connaissent bien SPIP, une catégorie peut être assimilée à une rubrique.
    Dans le cas d’un document de type catégorie, les champs proposés par défaut sont : Texte
    On peut modifier ce formulaire dans la partie :
    Administration > Configuration des masques de formulaire.
    Dans le cas d’un document de type média, les champs non affichés par défaut sont : Descriptif rapide
    Par ailleurs, c’est dans cette partie configuration qu’on peut indiquer le (...)

  • Les statuts des instances de mutualisation

    13 mars 2010, par

    Pour des raisons de compatibilité générale du plugin de gestion de mutualisations avec les fonctions originales de SPIP, les statuts des instances sont les mêmes que pour tout autre objets (articles...), seuls leurs noms dans l’interface change quelque peu.
    Les différents statuts possibles sont : prepa (demandé) qui correspond à une instance demandée par un utilisateur. Si le site a déjà été créé par le passé, il est passé en mode désactivé. publie (validé) qui correspond à une instance validée par un (...)

  • Configuration spécifique d’Apache

    4 février 2011, par

    Modules spécifiques
    Pour la configuration d’Apache, il est conseillé d’activer certains modules non spécifiques à MediaSPIP, mais permettant d’améliorer les performances : mod_deflate et mod_headers pour compresser automatiquement via Apache les pages. Cf ce tutoriel ; mode_expires pour gérer correctement l’expiration des hits. Cf ce tutoriel ;
    Il est également conseillé d’ajouter la prise en charge par apache du mime-type pour les fichiers WebM comme indiqué dans ce tutoriel.
    Création d’un (...)

Sur d’autres sites (9680)

  • Long Overdue MediaWiki Upgrade

    5 février 2014, par Multimedia Mike — General

    What do I do ? What I do ? This library book is 42 years overdue !
    I admit that it’s mine, yet I can’t pay the fine,
    Should I turn it in or should I hide it again ?
    What do I do ? What do I do ?

    I internalized the forgoing paean to the perils of procrastination by Shel Silverstein in my formative years. It’s probably why I’ve never paid a single cent in late fees in my entire life.

    However, I have been woefully negligent as the steward of the MediaWiki software that drives the world famous MultimediaWiki, the internet’s central repository of obscure technical knowledge related to multimedia. It is currently running of version 1.6 software. The latest version is 1.22.

    The Story So Far
    According to my records, I first set up the wiki late in 2005. I don’t know which MediaWiki release I was using at the time. I probably conducted a few upgrades in the early days, but that went by the wayside perhaps in 2007. My web host stopped allowing shell access and the MediaWiki upgrade process pretty much requires running a PHP script from a command line. Upgrade time came around and I put off the project. Weeks turned into months turned into years until, according to some notes, the wiki abruptly stopped working in July, 2011. Suddenly, there were PHP errors about “Namespace” being a reserved word.

    While I finally laid out a plan to upgrade the wiki after all these years, I eventually found that the problem had been caused when my webhost upgraded from PHP 5.2 -> 5.3. I also learned of a small number of code changes that caused the problem to go away, thus kicking the can down the road once more.

    Then a new problem showed up last week. I think it might be related to a new version of PHP again. This time, a few other things on my site broke, and I learned that my webhost now allows me to select a PHP version to use (with the version then set to “auto”, which didn’t yield much information). Rolling back to an earlier version of PHP might have solved the problem easily.

    But NO ! I made the determination that this goes no further. I want this wiki upgraded.

    The Arduous Upgrade Path
    There are 2 general upgrade paths I can think of :

    1. Upgrade in place on the server
    2. Upgrade offline and put the site back on the server

    Approach #1 is problematic since I don’t have direct shell access, though I considered using something like PHP Shell. Approach #2 involves getting the entire set of wiki files and a backup of the MySQL tables. This is workable since I keep automated backups of these items anyway.

    In fairly short order, I was able to set up a working copy of the MultimediaWiki hosted on a local Linux machine. Now what’s the move ? The MediaWiki software I’m running is 1.6.10. The very latest, as of this upgrade project is 1.22.2. I suppose it’s way too much to hope that the software will upgrade cleanly from 1.6.x straight to 1.22.x, but I guess it’s worth a shot…

    HA ! No chance. Okay, next idea is to march through the various versions and upgrade each in turn. MediaWiki has all their historic releases online, all the way back to the 1.3 lineage. I decided that the latest of each lineage should upgrade cleanly from anything in the previous version of lineage. E.g., 1.6.10 should upgrade cleanly to 1.7.3 (last in the 1.7 series). This seemed to be a workable strategy. So I downloaded the latest of each series, unpacked, and copied all the wiki files over the working installation and ran ‘php update.php’ in the maintenance/ directory.

    The process is tedious and not without its obstacles. I consider this penance for my years of wiki neglect. First, I run into the “PHP Parse error : syntax error, unexpected T_NAMESPACE, expecting T_STRING” issue, the same that I saw years ago after the webhost transitioned from PHP 5.2 -> 5.3. I could solve this by editing assorted files and changing “Namespace” -> “MWNamespace” (which is what MediaWiki did by version 1.13). But I would prefer not to.

    Instead, I downloaded the source for PHP 5.2 and compiled it in a separate directory, then called ‘/path/to/php/5.2/bin/php update.php’. Problem solved.

    The next problem is that a bunch of the database update scripts are specifying “Type=InnoDB”. This isn’t supported by modern MySQL databases. Now, it’s “Engine=InnoDB”. A quick search & replace at the command line fixes this for 1.6.x… and 1.7.x… and 1.8 through 1.12. Finally, at 1.13, it was no longer necessary. As a bonus, at 1.13, I was able to test the installation since Namespace had been renamed to MWNamespace. I would later learn that the table type modifications probably could have been simplified in by changing “$wgDBmysql4 = true ;” to “$wgDBmysql5 = true ;” somewhere in LocalSettings.php.

    Command line upgrading worked smoothly up through 1.18 series when I got a new syntax error :

    <br />
    PHP Fatal error:  Call to a member function addMessages() on a non-object in /mnt/sdb1/archive/wiki/extensions/Cite.php on line 68<br />

    Best I could do was comment out that line. I hope that doesn’t break anything important.

    In the home stretch, the very last transition (1.21 -> 1.22) failed :

    PHP Fatal error :  Cannot redeclare wfProfileIn() (previously declared in 
    /mnt/sdb1/archive/wiki/includes/profiler/Profiler.php:33) in 
    /mnt/sdb1/archive/wiki/includes/ProfilerStub.php on line 25
    

    Apparently, this problem arises occasionally since 1.18. I found a way around it thanks to this page : Deleted the file StartProfiler.php. Who am I to argue ?

    Upon completing the transition to 1.22, the wiki doesn’t look correct– the pictures aren’t showing up. The solution was to fix the temporary directory via LocalSettings.php.

    Back To Production
    Okay, it all works again ! Locally, that is. How to get it back to the server ? My first idea was that, knowing that this upgrade process can succeed, try stepping through the upgrade process again, but tell the update.php scripts to access the database tables on multimedia.cx. This seemed to be working for awhile, even though the database update phase often took 4-5 minutes. However, the transition from 1.8.5 -> 1.9.6 took 75 minutes and then timed out. According to my notes, “This isn’t going to work.”

    The new process :

    1. Dump the database tables from the local database.
    2. Create a new database remotely (melanson_wiki_ng).
    3. Dump the database table into melanson_wiki_ng.
    4. Move the index.php file out of the wiki files directory temporarily (or rename).
    5. Modify the LocalSettings.php to talk to the new database.
    6. Perform a lftp mirror operation in order to send all the files up to the server.
    7. Send the index.php file and hope beyond hope that everything magically works.

    And that’s the story of how the updated MultimediaWiki came back online. Despite the database dump file being over 110 MB, it only tool MySQL 1m45s to transmit it all to the remote server (let’s hear it for the ‘–compress’ option). For comparison, inserting the tables back into a fresh local database took 1m07s.

    When the MultimediaWiki was first live again, it loaded, but ever so slowly. This is when I finally looked into optimization and found that I was lacking any caching. So as a bonus, the MultimediaWiki should be much faster now.

    Going Forward
    For all I know, I did everything described here in the hardest way possible. But at least I got it done. Unless I learn of a better process, future upgrades will probably look similar to this.

    Additionally, I should probably take some time to figure out what new features are part of the standard MediaWiki distribution nowadays.

  • Static Compilation of FFmpeg with x264 support

    17 février 2014, par b1izzard

    Based on the Tutorial, I tried to build the latest FFmpeg binary with x264 support for Command line execution using Android-ndk-r9c.

    I had built the x264 using the below script :

    #!/bin/bash        


    PREBUILT=/home/blizzard/bin/android-ndk-r9c/toolchains/arm-linux-androideabi-4.6/prebuilt
                   PLATFORM=/home/blizzard/bin/android-ndk-r9c/platforms/android-9/arch-arm
                   PREFIX=/home/blizzard/bin/android-ndk-r9c/sources/ffmpeg


               ./configure --prefix=$PREFIX \
               --enable-static \
               --enable-pic \
               --disable-asm \
               --disable-cli \            
               --host=arm-linux \
               --cross-prefix=$PREBUILT/linux-x86_64/bin/arm-linux-androideabi- \
               --sysroot=$PLATFORM

               make
               sudo make install
               sudo ldconfig

    For building FFmpeg I had used the below script :

    #!/bin/bash                    
                 PLATFORM=/home/blizzard/bin/android-ndk-r9c/platforms/android-9/arch-arm
                 PREBUILT=/home/blizzard/bin/android-ndk-r9c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64
                 PREFIX=/home/blizzard/bin/android-ndk-r9c/sources/ffmpeg

                   function build_one
                   {
                   ./configure --target-os=linux --prefix=$PREFIX \
                   --arch=arm \
                   --cpu=cortex-a8 \
                   --enable-cross-compile \
                   --enable-runtime-cpudetect \
                   --disable-asm \
                   --enable-static \
                   --disable-shared \
                   --arch=arm \
                   --cc=$PREBUILT/bin/arm-linux-androideabi-gcc \
                   --cross-prefix=$PREBUILT/bin/arm-linux-androideabi- \
                   --disable-stripping \
                   --nm=$PREBUILT/bin/arm-linux-androideabi-nm \
                   --sysroot=$PLATFORM \
                   --enable-nonfree \
                   --enable-version3 \
                   --disable-everything \
                   --enable-gpl \
                   --disable-doc \
                   --enable-avresample \
                   --enable-demuxer=rtsp \
                   --enable-muxer=rtsp \
                   --disable-ffplay \
                   --disable-ffserver \
                   --enable-ffmpeg \
                   --disable-ffprobe \
                   --enable-libx264 \
                   --enable-encoder=libx264 \
                   --enable-decoder=h264 \
                   --enable-protocol=rtp \
                   --enable-hwaccels \
                   --enable-zlib \
                   --disable-devices \
                   --disable-avdevice \
                   --extra-cflags="-I/home/blizzard/bin/android-ndk-r9c/sources/ffmpeg/include -fPIC -DANDROID -D__thumb__ -mthumb -Wfatal-errors -Wno-deprecated -mfloat-abi=softfp -marm -march=armv7-a" \
                   --extra-ldflags="-L/home/blizzard/bin/android-ndk-r9c/sources/ffmpeg/lib"
                   make -j4 install

                   $PREBUILT/bin/arm-linux-androideabi-ar d libavcodec/libavcodec.a inverse.o
                   $PREBUILT/bin/arm-linux-androideabi-ld -rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -L$PREFIX/lib  -soname libffmpeg.so -shared -nostdlib  -z noexecstack -Bsymbolic --whole-archive --no-undefined -o $PREFIX/libffmpeg.so libavcodec/libavcodec.a libavfilter/libavfilter.a libavresample/libavresample.a libavformat/libavformat.a libavutil/libavutil.a libswscale/libswscale.a -lc -lm -lz -ldl -llog -lx264  --dynamic-linker=/system/bin/linker $PREBUILT/lib/gcc/arm-linux-androideabi/4.6/libgcc.a
                   }

                   build_one

    The output of the script is

    install prefix            /home/blizzard/bin/android-ndk-r9c/sources/ffmpeg
    source path               .
    C compiler                /home/blizzard/bin/android-ndk-r9c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc
    C library                 bionic
    host C compiler           gcc
    host C library            glibc
    ARCH                      c (cortex-a8)
    big-endian                no
    runtime cpu detection     yes
    debug symbols             yes
    strip symbols             no
    optimize for size         no
    optimizations             yes
    static                    yes
    shared                    no
    postprocessing support    yes
    new filter support        yes
    network support           yes
    threading support         pthreads
    safe bitstream reader     yes
    SDL support               no
    opencl enabled            no
    libzvbi enabled           no
    texi2html enabled         yes
    perl enabled              yes
    pod2man enabled           yes
    makeinfo enabled          no

    External libraries:
    libx264         zlib

    Enabled decoders:
    h264

    Enabled encoders:
    libx264

    Enabled hwaccels:

    Enabled parsers:

    Enabled demuxers:
    asf         mpegts          rtsp
    mov         rm

    Enabled muxers:
    rtp         rtsp

    Enabled protocols:
    http            tcp         udp
    rtp

    Enabled filters:
    aformat         format          setpts
    anull           null            trim
    atrim

    Enabled bsfs:

    Enabled indevs:

    Enabled outdevs:

    License: nonfree and unredistributable
    Creating config.mak, config.h, and doc/config.texi...
    config.h is unchanged
    libavutil/avconfig.h is unchanged

    WARNING: /home/blizzard/bin/android-ndk-r9c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/arm-linux-androideabi-pkg-config not found, library detection may fail.
    INSTALL install-progs-yes
    INSTALL ffmpeg
    INSTALL presets/libvpx-1080p50_60.ffpreset
    INSTALL presets/libvpx-1080p.ffpreset
    INSTALL presets/libvpx-360p.ffpreset
    INSTALL presets/libvpx-720p50_60.ffpreset
    INSTALL presets/libvpx-720p.ffpreset
    INSTALL presets/libx264-ipod320.ffpreset
    INSTALL presets/libx264-ipod640.ffpreset
    INSTALL doc/ffprobe.xsd
    INSTALL doc/examples/decoding_encoding.c
    INSTALL doc/examples/demuxing_decoding.c
    INSTALL doc/examples/filtering_audio.c
    INSTALL doc/examples/filtering_video.c
    INSTALL doc/examples/metadata.c
    INSTALL doc/examples/muxing.c
    INSTALL doc/examples/remuxing.c
    INSTALL doc/examples/resampling_audio.c
    INSTALL doc/examples/scaling_video.c
    INSTALL doc/examples/transcode_aac.c
    INSTALL doc/examples/Makefile
    INSTALL doc/examples/README
    INSTALL libavfilter/libavfilter.a
    INSTALL libavformat/libavformat.a
    INSTALL presets/libvpx-1080p50_60.ffpreset
    INSTALL presets/libvpx-1080p.ffpreset
    INSTALL presets/libvpx-360p.ffpreset
    INSTALL presets/libvpx-720p50_60.ffpreset
    INSTALL presets/libvpx-720p.ffpreset
    INSTALL presets/libx264-ipod320.ffpreset
    INSTALL presets/libx264-ipod640.ffpreset
    INSTALL doc/ffprobe.xsd
    INSTALL doc/examples/decoding_encoding.c
    INSTALL doc/examples/demuxing_decoding.c
    INSTALL doc/examples/filtering_audio.c
    INSTALL doc/examples/filtering_video.c
    INSTALL doc/examples/metadata.c
    INSTALL doc/examples/muxing.c
    INSTALL doc/examples/remuxing.c
    INSTALL doc/examples/resampling_audio.c
    INSTALL doc/examples/scaling_video.c
    INSTALL doc/examples/transcode_aac.c
    INSTALL doc/examples/Makefile
    INSTALL doc/examples/README
    INSTALL libavresample/libavresample.a
    INSTALL libavcodec/libavcodec.a
    INSTALL libpostproc/libpostproc.a
    INSTALL libswresample/libswresample.a
    INSTALL libavutil/libavutil.a
    a
    INSTALL libavfilter/asrc_abuffer.h
    INSTALL libavfilter/avcodec.h
    INSTALL libavfilter/avfilter.h
    INSTALL libavfilter/avfiltergraph.h
    INSTALL libavfilter/buffersink.h
    INSTALL libavfilter/buffersrc.h
    INSTALL libavfilter/version.h
    INSTALL libavformat/avformat.h
    INSTALL libavformat/avio.h
    INSTALL libavformat/version.h
    INSTALL libavfilter/libavfilter.pc
    INSTALL libavformat/libavformat.pc
    INSTALL libavresample/avresample.h
    INSTALL libavresample/version.h
    INSTALL libavresample/libavresample.pc
    INSTALL libavcodec/avcodec.h
    INSTALL libavcodec/avfft.h
    INSTALL libavcodec/dxva2.h
    INSTALL libavcodec/old_codec_ids.h
    INSTALL libavcodec/vaapi.h
    INSTALL libavcodec/vda.h
    INSTALL libavcodec/vdpau.h
    INSTALL libavcodec/version.h
    INSTALL libavcodec/xvmc.h
    INSTALL libavcodec/libavcodec.pc
    INSTALL libpostproc/postprocess.h
    INSTALL libpostproc/version.h
    INSTALL libpostproc/libpostproc.pc
    INSTALL libswresample/swresample.h
    INSTALL libswresample/version.h
    INSTALL libswscale/swscale.h
    INSTALL libswscale/version.h
    INSTALL libavutil/adler32.h
    INSTALL libavutil/aes.h
    INSTALL libavutil/attributes.h
    INSTALL libavutil/audio_fifo.h
    INSTALL libavutil/audioconvert.h
    INSTALL libavutil/avassert.h
    INSTALL libavutil/avstring.h
    INSTALL libavutil/avutil.h
    INSTALL libavutil/base64.h
    INSTALL libavutil/blowfish.h
    INSTALL libavutil/bprint.h
    INSTALL libavutil/bswap.h
    INSTALL libavutil/buffer.h
    INSTALL libavutil/channel_layout.h
    INSTALL libavutil/common.h
    INSTALL libavutil/cpu.h
    INSTALL libavutil/crc.h
    INSTALL libavutil/error.h
    INSTALL libavutil/eval.h
    INSTALL libavutil/fifo.h
    INSTALL libavutil/file.h
    INSTALL libavutil/frame.h
    INSTALL libavutil/hmac.h
    INSTALL libavutil/imgutils.h
    INSTALL libavutil/intfloat.h
    INSTALL libavutil/intfloat_readwrite.h
    INSTALL libavutil/intreadwrite.h
    INSTALL libavutil/lfg.h
    INSTALL libavutil/log.h
    INSTALL libavutil/macros.h
    INSTALL libavutil/mathematics.h
    INSTALL libavutil/md5.h
    INSTALL libavutil/mem.h
    INSTALL libavutil/murmur3.h
    INSTALL libavutil/dict.h
    INSTALL libavutil/old_pix_fmts.h
    INSTALL libavutil/opt.h
    INSTALL libavutil/parseutils.h
    INSTALL libavutil/pixdesc.h
    INSTALL libavutil/pixfmt.h
    INSTALL libavutil/random_seed.h
    INSTALL libavutil/rational.h
    INSTALL libavutil/ripemd.h
    INSTALL libavutil/samplefmt.h
    INSTALL libavutil/sha.h
    INSTALL libavutil/sha512.h
    INSTALL libavutil/stereo3d.h
    INSTALL libavutil/time.h
    INSTALL libavutil/timecode.h
    INSTALL libavutil/timestamp.h
    INSTALL libavutil/version.h
    INSTALL libavutil/xtea.h
    INSTALL libavutil/avconfig.h
    INSTALL libavutil/ffversion.h
    INSTALL libswresample/libswresample.pc
    INSTALL libswscale/libswscale.pc
    INSTALL libavutil/libavutil.pc

    When I tried to execute the following command using the resulting FFmpeg binary in Android Application

    ffmpeg -y -loop 1 -r 30 -i  myImage.jpg -b:v "4096k" -vf "scale=640:480" -t 3 result.mp4

    LogCat displays the following message

    02-17 15:42:45.683: D/(14511): *******Starting FFMPEG
    02-17 15:42:45.683: D/(14511): ***ffmpeg version N-60108-gda25a65 Copyright (c) 2000-2014 the FFmpeg developers***
    02-17 15:42:45.693: D/(14511): ***  built on Feb 17 2014 15:35:20 with gcc 4.6 (GCC) 20120106 (prerelease)***
    02-17 15:42:45.693: D/(14511): ***  configuration: --target-os=linux --prefix=/home/blizzard/bin/android-ndk-r9c/sources/ffmpeg --arch=arm --cpu=cortex-a8 --enable-cross-compile --enable-runtime-cpudetect --disable-asm --enable-static --disable-shared --arch=arm --cc=/home/blizzard/bin/android-ndk-r9c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc --cross-prefix=/home/blizzard/bin/android-ndk-r9c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/arm-linux-androideabi- --disable-stripping --nm=/home/blizzard/bin/android-ndk-r9c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/arm-linux-androideabi-nm --sysroot=/home/blizzard/bin/android-ndk-r9c/platforms/android-9/arch-arm --enable-nonfree --enable-version3 --disable-everything --enable-gpl --disable-doc --enable-avresample --enable-demuxer=rtsp --enable-muxer=rtsp --disable-ffplay --disable-ffserver --enable-ffmpeg --disable-ffprobe --enable-libx264 --enable-encoder=libx264 --enable-decoder=h264 --enable-protocol=rtp --enable-hwaccels --enable-zlib --disable-devices --disable-avdevice --extra-cflags=&#39;-I/home/blizzard/bin/android-ndk-r9c/sources/ffmpeg/include -fPIC -DANDROID -D__thumb__ -mthumb -Wfatal-errors -Wno-deprecated -mfloat-abi=softfp -mfpu=vfpv3-d16 -marm -march=armv7-a&#39; --extra-ldflags=-L/home/blizzard/bin/android-ndk-r9c/sources/ffmpeg/lib***
    02-17 15:42:45.693: D/(14511): ***  libavutil      52. 63.100 / 52. 63.100***
    02-17 15:42:45.693: D/(14511): ***  libavcodec     55. 49.100 / 55. 49.100***
    02-17 15:42:45.693: D/(14511): ***  libavformat    55. 25.101 / 55. 25.101***
    02-17 15:42:45.693: D/(14511): ***  libavfilter     4.  1.100 /  4.  1.100***
    02-17 15:42:45.693: D/(14511): ***  libavresample   1.  1.  0 /  1.  1.  0***
    02-17 15:42:45.693: D/(14511): ***  libswscale      2.  5.101 /  2.  5.101***
    02-17 15:42:45.693: D/(14511): ***  libswresample   0. 17.104 /  0. 17.104***
    02-17 15:42:45.693: D/(14511): ***  libpostproc    52.  3.100 / 52.  3.100***
    02-17 15:42:45.693: D/(14511): ***Unrecognized option &#39;loop&#39;.***
    02-17 15:42:45.693: D/(14511): ***Error splitting the argument list: Option not found***
    02-17 15:42:45.693: D/(14511): ****ending FFMPEG****

    Can anybody help me in building the latest version of FFmpeg or Can you share the latest FFMpeg binary for Android ?

  • Launch Leech and the History of WMV

    14 septembre 2010, par Multimedia Mike — General

    I was combing through my programming archives again and came across an old Perl script called launch-leech.pl. This was a private script I used to maintain for the benefit of myself and a few friends. See, there was this site called Launch.com (URL doesn’t seem to do anything as of this writing but here’s the Wikipedia page). Purchased by Yahoo ! in 2001, Launch still maintained their independent branding. They also carried a lot of music videos, of which I am a huge junkie. launch-leech.pl was the tool I used to download the videos. This was particularly useful since I stubbornly clung to dialup internet access until mid-2004 and it would have been impossible to stream video at any decent quality (though there were 56k streams, so like I said– not possible at any decent quality).



    Technically
    I followed Launch.com for many years. To be honest, I only “followed” in that I figured out where their “latest videos” URL lived and regularly polled it. Each video had either a 6-, 7-, or 8-digit unique ID that could be plugged into the launch-leech.pl script which would then have a conversation with the relevant servers, determine the correct streaming URL with the highest quality, then download and save the URL by handing it off to an external program (first ASFRecorder, though I later switched to mmsclient).

    At one point, I even wrote a crawler that compiled an offline database of all the videos, their IDs and their metadata. I never thought of anything interesting to do with it, though.



    Windows Media Legacy
    During these glory days of leeching, Launch.com streamed using Windows Media. I admit, it’s a bit of a blur now — the site might have used Real or QuickTime, but I was obviously most in tune with the WM side. I remember when I first found the site circa 2000-2001, the videos were in MS MPEG-4v3, and the high quality bitrate was 300 kbits/sec. Eventually, Launch.com would stream WMV7, WMV8, and finally WMV9, with bitrates up to 700 kbits/sec. However, they never broke free of the 320×240 encoding resolution, which was frustrating. When I wasn’t able to notice any substantial difference between 300 and 700 kbits/sec, I felt it might be time to put those extra bits to work on a resolution upgrade.

    At least they were nice enough to re-encode a number of old videos using better codecs and bitrates with each revision, thus prompting me to scan through the site collecting updated video IDs for download.



    Epilogue
    I don’t clearly remember when I stopped visiting Launch.com. Video-wise, the web has been a blur of Flash video ever since about 2006. Meanwhile, I spent a lot of time collecting a bunch of music videos in the first half of the decade only to find that pretty much every version of every music video made since the dawn of time is available on demand thanks to YouTube. I have found that this phenomenon manifests in many areas as internet technology marches on.

    The Real Entertainment
    The launch-leech.pl tool represents a recurring pattern for me. I derive as much — if not more — entertainment from creating programs like launch-leech.pl (and implicitly reverse engineering something in the process ; in this case, a website) as I do from the intended entertainment media itself. I seem to have this issue a lot with games, too.

    Is this an issue for anyone else ? Am I the only one who would rather play with the box that a shiny toy comes packaged in ?