Friday, February 3, 2012

Creare unei liste executabile pentru streamuri TV

Astazi va propun realizarea unei liste (fisier .bat, auto-executabil) de canale TV live, lista din care sa puteti schimba canalele dupa dorinta si sa activati diverite playere si programe auxiliare pentru reproducerea unora dintre aceste canale TV. Aceste liste deja sint la moda pe internet in ceea ce priveste unele canale transmise in format flash prin conexiune rtmp/rtmpe, folosind programul Rtmpdump si VLC pentru reproducere.

Lista noastra are in vedere asocierea in aceeasi lista a unor programe care se adreseaza unor playere diferite. De pilda programele Sopcast (adresele de tipul sop://broker, reproductibile cu Sopcast Player), programele RTMP (adresele de tipul rtmp/rtmpe/rtmpt://server) si programele transmise prin conexiunea la servere HTTP/MMS/RTSP (adrese reproductibile atit cu Windows Media Player cit si cu VLC Player).

Din punct de vedere al fiabilitatii, VLC este cel mai bun program pe care se pot reproduce streamurile emise pe Internet. Este free, customizabil, vine cu codecuri proprii, accepta majoritatea formatelor video, are posibilitatea de-a creste/scadea buffer-ul, poate schimba dimensiunea ecranului la orice forma (aspect ratio) se doreste, poate de asemenea inregistra programele care se vizioneaza in acelasi timp si, ceea ce ne intereseaza mai presus de toate, are o paleta larga de linii de comanda pe care la accepta. Din nefericire nu este compatibil cu link-urile destinate playerului Sopcast. Singurul program in afara Sopcast Player-ului care accepta link-uri de tipul sop://broker.sopcast.com este Windows Media Playerul. Ca atare, pentru a realiza lista care urmeaza si pentru a o face functionala, aveti nevoie de patru programe instalate in sistem: Windows Media Player, VLC Player, SOP Filter (un program facut de cei de la Sopcast care adapteaza link-urile "sop" pentru WM Player) si Rtmpdump (un program realizat in Linux, compatibil cu VLC Player care decodeaza transmisia prin serverele securizate rtmp).

In prima faza va trebui sa dezinstalati Sopcast-ul, daca il aveti cumva instalat in sistem, dupa care sa instalati programul SopFilter. Din testele facute de mine pe Win 7 (probabil ca pe XP nu exista problema asta), se pare ca exista citeva neconcordante intre SopFilter si programul Sopcast, de aceea s-ar putea sa experimentati freeze-uri si crash-uri ale unuia sau altuia. Odata instalat, Sopfilterul va prelua toate functiile playerului Sopcast, compatibilizind WM Playerul cu linkurile "sop".

RTMPDump nu necesita instalare. Tot ce trebuie sa faceti e sa descarcati ultima versiune, si sa amplasati programelul principal (rtmpdump.exe) in acelasi director cu lista pe care urmeaza sa o creati. La baza, aceasta va fi un fisier text, care va fi ulterior redenumiti .bat pentru a putea deveni activa.

In primul rind, trebuie sa cunoastem adresele canalelor TV pe care dorim sa le adaugam in lista. Sa presupunem ca se doreste crearea unei liste de canale de muzica. Structura (template) pe care o veti imita va fi urmatoarea:

COLOR 0 (defineste culoarea screen-ului)
@echo off (de aici textul devine vizibil)
:TOP (marcheaza inceputul paginii)
title Music TV (aici puteti scrie orice text)
cls
echo ==================================================================
echo  Alegeti numarul corespunzator canalului dorit (orice text)
echo ==================================================================
echo.
echo.
echo (1) = Program TV 1
echo (2) = Program TV 2
echo (3) = Program TV 3

echo (4) = EXIT
echo. (de aici textul nu mai e vizibil, incepe lista de comenzi)
set "vlc=C:\Player" (locatia initiala a playerului)
:set "vlc=c:\Player" (locatie alternativa a playerului)
set /p "Choice=>" (se defineste felul de raspuns al programului la scrierea unui numar)
IF "%Choice%"=="1" GOTO 1
IF "%Choice%"=="2" GOTO 2
IF "%Choice%"=="3" GOTO 3

IF "%Choice%"=="4" GOTO exit
echo.
echo.
echo Alegeti programul... (orice text)
echo.
ping localhost -n 3 >nul
goto TOP


:1
cls
echo.
echo Deschidere program (orice text)
call "PLAYER" (adresa /comenzi suplimentare)
goto TOP


:2
cls
echo.
echo Deschidere program (orice text)
call "PLAYER" (adresa /comenzi suplimentare)
goto TOP


:3
cls
echo.
echo Deschidere program (orice text)
call "PLAYER" (adresa /comenzi suplimentare)
goto TOP


:exit
cls
echo Good bye (orice text)
ping localhost -n 3 >nul

exit /b


Textul scris de mine in paranteza este orientativ. Pentru a vedea cum stau lucrurile in realitate, am scris o lista a 9 posturi TV muzicale, lista al carui text, odata copiat intr-un "Notepad" si redenumit ca fisier .bat se va lansa si, in functie de cerinta, va lansa si canalul TV in playerul corespunzator.

COLOR 0
@echo off
:TOP
title Music TV
cls
echo ==================================================================
echo  Alegeti numarul corespunzator canalului dorit :
echo ==================================================================
echo.
echo.
echo (1) = 1 Music Channel (Sopcast)
echo (2) = Kiss TV (RTMP)
echo (3) = Kiss TV (Sopcast)
echo (4) = RMC TV 1 (RTMP)
echo (5) = RMC Legend (RTMP)
echo (6) = RMC Top 40 (RTMP)
echo (7) = The Country Network (RTMP)
echo (8) = UTV (RTMP)
echo (9) = Balkanika (WMP)
echo (10) = EXIT
echo.
set "vlc=C:\Program Files\VideoLAN\VLC\vlc.exe"
:set "vlc=c:\Program Files (x86)\VideoLAN\VLC\vlc.exe"
set /p "Choice=>"
IF "%Choice%"=="1" GOTO 1
IF "%Choice%"=="2" GOTO 2
IF "%Choice%"=="3" GOTO 3
IF "%Choice%"=="4" GOTO 4
IF "%Choice%"=="5" GOTO 5
IF "%Choice%"=="6" GOTO 6
IF "%Choice%"=="7" GOTO 7
IF "%Choice%"=="8" GOTO 8
IF "%Choice%"=="9" GOTO 9
IF "%Choice%"=="10" GOTO exit
echo.
echo.
echo Alege intre 1 si 10...
echo.
ping localhost -n 3 >nul
goto TOP

:1
cls
echo.
echo Deschidere program.... Inchideti playerul pentru reintoarcere la meniu.
call "C:\program files\windows media player\wmplayer.exe" sop://218.106.52.252:3912/116007 /fullscreen
goto TOP

:2
cls
echo.
echo Deschidere program.... Inchideti playerul pentru reintoarcere la meniu.
call rtmpdump -r "rtmpe://fms15.mediadirect.ro:80/live/kiss" -a "live/kiss?id=37492257" -f "WIN 10,3,183,7" -W "http://static1.mediadirect.ro/player-preload/swf/kisstv_1034/player.swf" -p "http://www.kissfm.ro/kisstv/live/" -C O:1 -C O:0 -y "kiss" --quiet | %vlc% --fullscreen -
goto TOP

:3
cls
echo.
echo Deschidere program.... Inchideti playerul pentru reintoarcere la meniu.
call "C:\program files\windows media player\wmplayer.exe" sop://218.106.52.252:3912/116005 /fullscreen
goto TOP

:4
cls
echo.
echo Deschidere program.... Inchideti playerul pentru reintoarcere la meniu.
call rtmpdump -v -r rtmp://fms.105.net:80/live/ -W http://www.highermedia.com/assets/flash/jw_player.swf  -p http://www.highermedia.com/ -y rmc1 --quiet | %vlc% --fullscreen -
goto TOP

:5
cls
echo.
echo Deschidere program.... Inchideti playerul pentru reintoarcere la meniu.
call rtmpdump -v -r rtmp://fms.105.net:80/live/ -W http://www.highermedia.com/assets/flash/jw_player.swf  -p http://www.highermedia.com/ -y legend1 --quiet | %vlc%  --fullscreen -
goto TOP

:6
cls
echo.
echo Deschidere program.... Inchideti playerul pentru reintoarcere la meniu.
call rtmpdump -v -r rtmp://fms.105.net:80/live/ -W http://www.highermedia.com/assets/flash/jw_player.swf  -p http://www.highermedia.com/ -y charts1 --quiet | %vlc%  --aspect=4:3 --fullscreen -
goto TOP

:7
cls
echo.
echo Deschidere program.... Inchideti playerul pentru reintoarcere la meniu.
call rtmpdump -v -r rtmp://82.166.201.223:1935/live?_fcs_vhost=cp76676.live.edgefcs.net/5uMjNmMjqqV2tI5_ZzsUtHcPRTSQiUli_640_480_600@54976  -W http://player.ooyala.com/static/cacheable/4da23032782e072c77aa3f26ab6dbbbb/player_v2.swf -p http://tcncountry.com/videos/livestream.htm --quiet | %vlc% --fullscreen -
goto TOP

:8
cls
echo.
echo Deschidere program.... Inchideti playerul pentru reintoarcere la meniu.
call rtmpdump -r "rtmpe://fms15.mediadirect.ro:80/live/utv" -a "live/utv?id=37492257" -f "WIN 10,3,183,7" -W "http://static1.mediadirect.ro/player-preload/swf/utv_1033/player.swf" -p "http://www.utv.ro/live/" -C O:1 -C O:0 -y "utv_low" --quiet | %vlc% --fullscreen -
goto TOP

:9
cls
echo.
echo Deschidere program.... Inchideti playerul pentru reintoarcere la meniu.
call %vlc% mms://85.17.147.231/96853317/ --fullscreen
goto TOP

:exit
cls
echo Realizat de hgfdgfui
ping localhost -n 3 >nul
exit /b


Dupa cum vedeti, in aceeasi lista am inclus si programe flash, si programe Sopcast, si programe transmise prin protocolul http obisnuit. De asemenea am desemnat ca player-ul sa porneasca pe tot ecranul. Programele http si flash (rtmp) vor fi lansate cu VLC Player (este necesar, pentru aceasta, sa editati corect linia care indica locatia playerului) in timp ce programele Sopcast vor fi lansate in Windows Media Player (din nou, este necesar sa indicati corect locatia playerului). Cind inchideti playerul, veti reveni automat la lista si veti putea selecta un nou program, scriind cifra (cifrele) corespunzatoare si apasind tasta "Enter".

Daca in cazul VLC Player-ului, se poate folosi o versiune portabila a playerului, care poate fi copiata in chiar directorul unde exista lista, pentru definirea mai simpla a traseutlui catre player (care devine, din C:\program files\nume_player... - %nume_player%), WM Player-ul portabil nu functioneaza cu SopFilter, ca atare va trebui sa-l aveti instalat in locatia default (program files sau program files (x86)).

Din cite stiu, utilizatorii de Linux au deja un player universal (celebrul TV Maxe) care functioneaza, simultan, cu link-uri Sopcast, RTMP si MMC/HTTP. Din pacate utilizatorii de Windows nu au asa ceva (imi amintesc de mult-vehiculatul Simple Player, bazat pe VLC, dar acesta nu se descurca cu link-urile Sopcast). Pina acum, metoda asta este singura functionala.

Dezavantaje: nu prea multe. Instalarea sopfilter-ului nu da bataie de cap, iar cei mai multi utilizatori de Windows au deja WMPlayer in sistem. Marele inconvenient vine din partea lui WMPlayer: suporta o cantitate foarte limitata de comenzi, iar una din marile sale lipsuri este incapacitatea de a putea stabili un aspect ratio (formatul imaginii, widescreen sau fullscreen). Din pacate multe programe transmise prin Sopcast au probleme cu formatul imaginii care nu e definit corect in server (nici n-ai cum sa-l definesti, decit in sursa - DVB sau TV Tuner, pentru ca serverul Sopcast nu suporta decit un minimum de parametri configurabili). Asa se face ca o emisie 4:3 care ajunge din greseala la utilizator in formatul 16:9 nu e modificabila din WM Player (si n-ar fi modificabila nici daca am folosi playerul Sopcast, ca tot veni vorba, fiindca si astuia ii lipsesc destule comenzi).

Pentru cei care doresc sa urmareasca, si poate chiar sa inregistreze, un canal TV in VLC Player in loc de WMPlayer, se poate scrie un fisier .bat cu o comanda simpla:
[code]start " " "C:\locatie_player\vlc.exe" -vvv http://127.0.0.1:8902/tv.mpeg --http-caching=1500 --fullscreen[/code]
Aceasta comanda va lansa VLC Player-ul. Nu uitati, trebuie sa dati "Mute" la sonorul WMPlayer-ului si sa-l lasati sa ruleze in background. El a preluat rolul playerului Sopcast, si trebuie sa functioneze pentru ca fluxul video sa fie continuu in VLC Player.

Nota: Exista o alternativa mai complicata, pentru cei care vor sa ruleze toate programele (http, mms, rtmp, sop) in VLC Player, caz in care trebuie instalat Sopcast-ul. Acesta trebuie sa ruleze in background si sonorul sau trebuie suprimat pentru a nu exista efectul de ecou (2 volume activa in 2 aplicatii diferite). Exista o aplicatie (nircmd.exe) care adusa in directorul de unde rulam lista TV ne permite sa definim 2 comenzi pentru Sopcast - una este minimizarea ferestrei Sopcast in taskbar, imediat dupa lansare, si alta este suprimarea sonorului ("Mute Sopcast", functionala numai in Vista si Windows 7, un mixerul audio lanseaza un sonor distinct pentru fiecare aplicatie). Din pacate procedura este cu bug-uri si nu aduce rezultatele scontate - fie sonorul nu este suprimat 100%, fie aplicatia nu se minimizeaza (Sopcast-ul are 2 ferestre, una a programului principal, alta a player-ului). O procedura mai buna ar fi instalarea separata a doua programe, unul care sa "arunce" o aplicatie in Systray la lansara acesteia (TrayIt.exe) si altul care sa "execute" sonorul (IndieVolume, care ruleaza cu bug-uri in Win 7).

O alta alternativa ar fi lansarea unei pagini de browser care sa contina un script pentru web-playerul Sopcast, script in care playerul ar putea fi fortat sa afiseze o imagine dupa dorinta telespectatorului (720 x 576 pentru formatul 4:3 sau 720 x 400 pentru formatul 16:9), dar imaginati-va ca trebuie sa creati o pagina diferita pentru fiecare program Sopcast. Nu e prea comod.

Eu am incercat toate aceste variante, incercind sa-mi reduc la minimum timpul de manipulare al televiziunilor pe Internet. Pur si simplu ideea este ca sa lansezi tot ceea ce ai nevoie dintr-o singura aplicatie, fara sa mai trebuiasca sa intervii asupra programului lansat. Adica totul sa poata fi rezolvabil, de pilda, cu o telecomanda PC, timp in care tu sa stai tihnit in fotoliu. Iata citeva imagini care surprind comportamentul unei liste TV de genul celei prezentate mai sus.

Lansarea programului:



Lansarea player-ului VLC:



Lansarea player-ului WMP:



Imaginea (corecta) Sopcast in WM Player:



Reproducerea unui canal din lista exemplificata mai sus:



Sint convins ca daca aveti nu mai mult de o zi la dispozitie, veti reusi sa adunati suficiente adrese de canale TV functionale si sa va creati o lista proprie pentru a urmari stream-urile TV in tihna cu un minimum de operatiuni.

Bafta!

1 comment: