Portál AbcLinuxu, 30. dubna 2025 09:18
Zjistil jsem, jak se dostat k adrese RTMP proudu České televize a naimplementoval jsem extraktor URL v Perlu.
Jmenuje se ctstream používá se takto:
$ ctstream http://www.ct24.cz/vysilani/ 1000: rtmp://wcdn34.nacevi.cz:80/CT24?id=MTIwODAzODIwOXw2MzQ0MDY3MTk2MTk4MDIzMjA=&type=wpl/CT24-MP4_404p.stream 500: rtmp://wcdn34.nacevi.cz:80/CT24?id=MTIwODAzODIwOXw2MzQ0MDY3MTk2MTk4MDIzMjA=&type=wpl/CT24-MP4_288p.stream $ mplayer -cache 256 'rtmp://wcdn34.nacevi.cz:80/CT24?id=MTIwODAzODIwOXw2MzQ0MDY3MTk2MTk4MDIzMjA=&type=wpl/CT24-MP4_288p.stream' MPlayer SVN-r33094-4.4.5 (C) 2000-2011 MPlayer Team Přehrávám rtmp://wcdn34.nacevi.cz:80/CT24?id=MTIwODAzODIwOXw2MzQ0MDY3MTk2MTk4MDIzMjA=&type=wpl/CT24-MP4_288p.stream Naplnění cache: 0.00% (0 bajtů) Metadata: author Ceska televize copyright description CT24 - live keywords rating title presetname Custom creationdate Wed May 11 00:03:03 2011 videodevice Osprey-700 HD Video Device 1 framerate 25.00 width 512.00 height 288.00 videocodecid avc1 videodatarate 500.00 avclevel 31.00 avcprofile 66.00 videokeyframe_frequency2.00 audiodevice Osprey-700 HD Audio Device 1 audiosamplerate 48000.00 audiochannels 2.00 audioinputvolume 75.00 audiocodecid mp4a audiodatarate 96.00 Detekován formát souboru libavformat. [flv @ 0x9bbc960] Estimating duration from bitrate, this may be inaccurate [lavf] stream 0: video (h264), -vid 0 [lavf] stream 1: audio (aac), -aid 0 VIDEO: [H264] 512x288 0bpp 25.000 fps 0.0 kbps ( 0.0 kbyte/s) Cache not responding! Cache not responding! ========================================================================== Otevírám video dekodér: [ffmpeg] FFmpeg's libavcodec codec family Vybrán video kodek: [ffh264] vfm: ffmpeg (FFmpeg H.264) ========================================================================== ========================================================================== Pokouším se vynutit rodinu audiokodeku -dmo... Pokouším se vynutit rodinu audiokodeku ... Otevírám audio dekodér: [ffmpeg] FFmpeg/libavcodec audio decoders AUDIO: 48000 Hz, 2 ch, s16le, 0.0 kbit/0.00% (ratio: 0->192000) Vybrán audio kodek: [ffaac] afm: ffmpeg (FFmpeg AAC (MPEG-2/MPEG-4 Audio)) ========================================================================== AO: [alsa] 48000Hz 2ch s16le (2 bytes per sample) Začínám přehrávat... Poměr stran obrazu filmu je 1.78:1 - škáluji na správný poměr. VO: [xv] 512x288 => 512x288 Planar YV12 A: 0.7 V: 0.7 A-V: -0.011 ct: -0.028 0/ 0 43% 48% 2.0% 2 0 59% Končím... (Konec)
Případně lze druhým argumentem vybrat konkrétní tok a skript vypíše jen jeho URL:
$ ctstream http://www.ct24.cz/vysilani/ 500 rtmp://wcdn34.nacevi.cz:80/CT24?id=MTIwODAzODg1Nnw2MzQ0MDY3MjE0MzAwOTY2MTA=&type=wpl/CT24-MP4_288p.stream
Funguje mi to s ČT24, u ČT4 jsou tomu předřazené reklamy, které ale přehrát nejdou. Stejný způsob by mohl fungovat i u jednotlivých pořadů, ale zatím jsem úspěch neměl (nenašel jsem stránku s patřičným iframem nebo mplayer si vylámal zuby (Received FLV packet before play()! Ignoring.)).
Tiskni
Sdílej:
ctstream-1 http://www.ct24.cz/vysilani/ 500 Type of arg 1 to each must be hash (not array dereference) at /home/pek/bin/ctstream-1 line 54, near "$ref) " Execution of /home/pek/bin/ctstream-1 aborted due to compilation errors.JSON - 2.51
janick@acer:~$ /home/janick/ctstream.sh /http://www.ct24.cz/ivysilani/ Type of arg 1 to each must be hash (not array dereference) at /home/janick/ctstream.sh line 54, near "$ref) " Execution of /home/janick/ctstream.sh aborted due to compilation errors.
Já mám perl-5.12.3. Teď jsem to vyzkoušel na perl-5.10.1 a tam to opravdu nefunguje, protože funkce each umí pracovat nad polem až od verze 5.12:
You can now use the "keys", "values", "each" builtin functions on arrays (previously you could only use them on hashes). See perlfunc for details. This is actually a change introduced in perl 5.12.0, but it was missed from that release's perldelta.
Něco s tím udělám. (Ach jo, a mně se ten polymorfismus tak líbil :(
Can't locate JSON.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.10.1 /usr/local/share/perl/5.10.1 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.10 /usr/share/perl/5.10 /usr/local/lib/site_perl .) at /home/janick/ctstream.sh line 16.
BEGIN failed--compilation aborted at /home/janick/ctstream.sh line 16.
dev-perl/XML-XPath
a dev-perl/JSON
.
perl-XML-XPath
a perl-JSON
, funguje ok
Funguje mi to s ČT24, u ČT4 jsou tomu předřazené reklamy, které ale přehrát nejdou. Stejný způsob by mohl fungovat i u jednotlivých pořadů, ale zatím jsem úspěch neměl (nenašel jsem stránku s patřičným iframem nebo mplayer si vylámal zuby (Received FLV packet before play()! Ignoring.)).Na stránkach s programom je ten iframe vkladaný s parametrom autoStart=false, takže ak priamo načítaš ten iframe, nie je tam to, čo tam očakávaš. Najjednoduchšie riešenie je z url vymazať to &autoStart=false a potom tam už bude to, čo tam chceš mať (v perl sa vôbec nevyznám, ale mne fungovalo niečo ako
$iframe_url =~ s/&autoStart=(?:false|true)//;
).
Potom je už problém len to, že sa tam, kvôli znaku / vo video.src zle odvodí playpath, takže to tam musíš pridať ty. Pre ffplay (a mplayer) by to celé vyzeralo asi takto:ffmpeg "$stream_url playpath=$suffix"(a bonus je, že si tak prehráš aj tú ich reklamu :) )
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.