Hlavní navigace

Bash na flash

29. 10. 2009 22:04 (aktualizováno) Peťo Greškovič

..alebo ďalší neskutočne prekombinovaný spôsob ako pozerať flash videá vo firefoxe bez flash pluginu.

Predvčerom som na svojom PC rozchodil FreeBSD 8 CURRENT ako jediný operačný systém. Jedným z mála nedostatkov, na ktoré som narazil, bola absencia natívnych verzií niektorých proprietárnych programov. Vačšinou to nie je problém, nakoľko tu idú spúšťať aj linuxové aplikácie, na ktoré som bol zvyknutý doteraz. I keď napr. Opera s linuxovým flashom (zdá sa) beží, rozhodol som sa preskúmať možnosti natívnych aplikácii. A keďže som predovšetkým dlhoročným používateľom firefoxu, začal som s ním.

Bohužiaľ, príprava nainštalovaného webového browsera na surfovanie dnes väčšinou začína inštaláciou flash pluginu. A jeho inštalácia a prevádzka je na väčšine normálnych operačných systémov problémová. Okrem toho, že Adobe trvalo dobrých pár rôčkov, než vôbec vydala 64-bitovú verziu, o verziach pre širšiu paletu OS ani nehovoriac, je s ním spojená aj pekná kôpka bezpečnostných problémov, ktoré neobchádzajú ani Windows. Jednoducho a stručne: flash je hrozné zlo! Toť (hádam nie len) môj skromný názor. Avšak vývojari webových stránok sú, zdá sa, inej mienky. Navyše flash so sebou priniesol v správnom čase aj niekoľko dobrých technológií, ku ktorým patrí aj jednoduchý streaming videa. Práve na to ho ja, ako aj veľa ďalších ľudí, takmer výlučne používam (potrebujem?).

O tom, ako streamovať či prehrávať flashové video bez flashu už toho bolo popísaného celkom dosť. Azda najjednoduhšou variantou sú jeho alternatívy ako gnash či swfdec. Nanešťastie sa im flash nahradiť zatiaľ príliš nedarí. Len čo do nich vývojari zakomponujú posledné verzie aktualizácií zistené zložitým a nespoľahlivým reverzným inžinierstvom, Adobe už aj vydá verziu novú a pisatelia webstránok začnú používať najnovšie doplnky ako diví… Čo dnes funguje, zajtra už nemusí.

Ďalšou cestou je použitie externých nástrojov ako napr. dl-youtube na streaming či download videa a prehrávanie v externom prehrávači. V lepšom prípade vie prehrávač video rovno stiahnuť alebo streamovať. Človek ale príde o komfort z prehrávania pri browsovaní…

Najlepšie sa mi v tomto ohľade javili doplnky do firefoxu. Veľmi sľubne vyzeral napríklad spôsob, ktorý používal rozšírenie GreaseMonkey a rovno integroval prehrávanie flashových videí do browsera za pomoci mplayer-pluginu.  Ale keďže aj na YouTube sa činia, HQtube script, ktorý bol jadrom popísaného postupu, na mňa pri návšteve najväčšej internetovej video databázy vyblafol len upozornenie, že „potrebuje update lebo už nie je kompatibilný.“ Na oficiálnych stránkach firefoxu som tiež našiel celkom dosť doplnkov na sťahovanie flashových videí. Bohužiľ som ale našiel len jediný, ktorý tvrdil, že vie videá rovno aj prehrávať (Ant.com Video Downloader + Video Player). Okrem drobného nedostatku, že poriadne nefungoval, mi tiež pridal do browsera nepekný velikánsky toolbar s reklamou a v domovskom priečinku vytváral pochybné adresáre…

Ideálne by bolo napísať si add-on podľa vlastných predstáv. Ale pretože to (zatiaľ) neviem, rozhodol som sa situáciu vyriešiť po svojom: videá sťahujem pomocou osvedčeného Video DownloadHelpera a stiahnuté videá automaticky prehrávam bashovým skriptom. Ako pre nie veľmi skúseného pisateľa shellových skriptov bolo pre mňa najväčším problémom zistiť, ako zisťovať prítomnosť nových videí bez toho, aby som prehľadával každú sekundu adreasár. Po necelej hodinke googlenia a testovania som však objavil nástroj sysutils/ftrace a podarilo sa mi prísť s týmto skriptom, ktorým teraz spúšťam mozillu:

#!/bin/sh

#firefox-video-wrapper

FTRACE_BIN=/usr/local/bin/ftrace
FIREFOX_BIN=/usr/local/bin/firefox3
VIDEO_PLAYER=/usr/local/bin/mplayer
PLAYER_FLAGS="-loop 0"
HOME=/cesta/ku/domovskemu/priecinku/
VIDS=${HOME}cesta/ku/stiahnutym/videam/
MODIFIED_FILES=${HOME}.mozilla/modified-files

trap "echo \"fnish\" > ${MODIFIED_FILES} && rm -f ${MODIFIED_FILES}" EXIT

if [ -e ${MODIFIED_FILES} ]; then
        rm -f ${MODIFIED_FILES}
fi

${FTRACE_BIN} ${MODIFIED_FILES} ${FIREFOX_BIN} && echo "finish" > ${MODIFIED_FILES} && \
rm -f ${MODIFIED_FILES} &

tail -F ${MODIFIED_FILES} | (
TAIL_PID=`ps -A | grep "tail -F ${MODIFIED_FILES}" | head -n 1 | sed 's/ *\([0-9]*\).*/\1/'`
NEXT_VIDEO="none"
while read OUTPUT; do
        if [ ${OUTPUT} = "finish" ]; then
                kill ${TAIL_PID}
        fi
        VIDEO_FILE=`echo ${OUTPUT} | grep ^${VIDS}`
        if [ ! -z ${VIDEO_FILE} ]; then
                if [ ${VIDEO_FILE} = ${NEXT_VIDEO} ]; then
                        NEXT_VIDEO="none"
                        ${VIDEO_PLAYER} ${PLAYER_FLAGS} ${VIDEO_FILE}
                else
                        NEXT_VIDEO=${VIDEO_FILE}
                fi
        fi
done
)

Uznávam, že asi existuje mnoho lepších riešení, ako na streamované video bez flasha, ale reku: keď to používam ja, hádam by sa to na niečo mohlo hodiť aj niekomu inému :-). Výsledku vďačím za to, že flash v podstate nemusím ani vidieť. Inak mám nainštalovanú kombináciu gnash+flashblock a pri kliknutí na video v menu Video DownloadHelpera sa video zobrazí v externom okne MPlayera a bude prehrávať dookola až kým ho nevypnem. Zhliadnuté videá ostávajú zároveň uložené v nastavenom adresári a možno by sa to hodilo doplniť o nejaký ten cron job, ktorý by ich po týždni mazal.