Как да сваляме RTMP видеа

Наскоро ме попитаха дали има лесен начин да се свалят видеа, които са по RTMP протокол. Не бях запознат в детайли с темата и наивно реших, че всевъзможните му плъгини по браузърите ще се справят. Да, ама не. RTMP протокола, който се обслужва от Flash, въобще не минава през браузъра. Оказа се, че не е сложно, с правилните инструменти.

Необходимо е да свалите една програма наречена rtmpdump. Авторите казват, че работи и под Windows, но аз я използвам под Ubuntu. За линукс потребителите, най-лесния начин е:

sudo apt-get install rtmpdump

Следващата стъпка е да намерим адреса на RTMP. В зависимост от самия сайт, плеъра и подобни може да е лесно. Гледайки изходния код на страницата може да видим нещо от типа на:

rtmp://someserver.com/somepath:video.mp4

Няма да сложа истински URL-та, не искам да ме съдят. Сами си носите отговорност за действията си!!!
В този случай нещата са много лесни:

rtmpdump -r "rtmp://someserver.com/somepath:video.mp4" -о name-of-the-saved-file.flv

Но едва ли ще намерите толкова лесен адрес 🙂 Често RTMP хоста и файлoвете са разделени и се обединяват от самия плеър. Някой дори имат възможност да теглят информация от няколко хоста и превключват между тях, ако някой хост спре да работи или е прекалено натоварен. В този случай в изходния код на страницата ще имаме RTMP адреса и името на клипа отделно. Ако RTMP адреса е „rtmp://someserver.com“, а името на файла е „somepath/video.mp4“, тогава използваме:

rtmpdump -r "rtmp://someserver.com/" -y "somepath/video.mp4" -о name-of-the-saved-file.flv

Ако сте под линукс и ви мързи да гледате изходния код, може да направите един много готин трик. RTMP работи на порт 1935 (обикновено), не може ли да пренасочим целия трафик от този порт някъде? Ами можем, под линукс можем всичко, в случая с помощта на IPTABLES:

sudo iptables -t nat -A OUTPUT -p tcp –dport 1935 -j REDIRECT

След това трябва да слушаме за тези връзки, това е лесно, ако сме качили rtmpdump. В конзолата трябва да напишем:

rtmpsrv

И трябва да видим нещо като:

RTMP Server v2.4
(c) 2010 Andrej Stepanchuk, Howard Chu; license: GPL

Streaming on rtmp://0.0.0.0:1935

Сега просто трябва да заредим който и да е браузър, който има RTMP видео, и да го пуснем. Ако видеото НЕ тръгне, значи всичко е наред. Все пак сме пренасочили трафика.
Ако погледнем конзолата, ще видим много редове, но ни интересува само този, който започва с rtmpdump:

rtmpdump -r "rtmp://someserver.com/"  -y "somepath/video.mp4" -о name-of-the-saved-file.flv

Възможно е да има и много други опции. Просто копирайте този ред и го пуснете в конзолата. Воала – видеото вече се сваля на вашия диск.

Не забравяйте да махнете IPTABLES правилото, когато свършите, понеже ВСИЧКИ RTMP видеа ще бъдат редиректвани:

sudo iptables -t nat -D OUTPUT -p tcp –dport 1935 -j REDIRECT

12 thoughts on “Как да сваляме RTMP видеа

  1. Straggler

    Много полезно обяснение. Благодаря ти много. Ти или някой друг, който е добре запознат би ли могъл да ми обясни какъв видео рендър се използва от браузърите за възпроизвеждане на флаш или html5 видеа ?!

    Питам това, защото на 1 стар едноядрен процесор имам странен проблем, който ме мъчи от дълго време. Когато сваля и пусна дадено видео през плейър (MPC-HC, VLC и т.н.) на VMR-7, VMR-9 или дори EVR, видео 720p почти не натоварва процесора над 50%. Но когато отворя видеото например да речем с vimeo (както и всеки друг подобен сайт за видео ъплоуд като тубата, vbox и т.н.) и го стриймвам директо в браузъра (независимо кой) процесора забива на 100% и дропва сигурно над 70% от фреймовете. Т.е. мъчи се та се къса, въпреки че отмятам хардуерната поддръжка на флаш (която навярно би трябвало да ползва DXVA на видео процесора ми). Т.е. с 1 дума възпроизвеждането на .flv .3gp или .mp4 директно в браузъра натоварва CPU (може би и GPU) поне 10 пъти повече, отколкото, когато го пусна в например MPC-HC. И тук не става за специален rtmp тип стрийм, а за съвсем нормален http като например: http://media09.vbox7.com/s/5a/5aebce4493red3ee4c09.mp4

  2. gatakka Автор

    Проблема е патенти и асемблер. Правилно си се ориентирал, че няма хардуерна поддръжка на тези декодери. Конкретно с Flash има и друг проблем, който е малко идиотски. Флаш работи единствено и само с RGB схема, а повечето видео кодеци са на YUV схема. Детайлите защо прехвърлянето между едната и другата схема е проблемно не са ми ясни, но знам, че не можеш да ползваш GPU-то за видео ако си на RGB.
    По отношение на HTML5 видеото, не би трябвало да има проблем вече, след като FF получи правото да ползва патенти за декодирането.

  3. ProXy

    Флаш има няколко режима за рендиране, като единственият, който ползва видеокартата е „direct“. За съжаление, повечето „производители“ на плейъри си ползват transparent или window режими, които натоварват процесора.
    Както каза gattaka, не би трябвало да имаш проблеми с HTML, понеже там всичко си минава през хубави кодеци и GPU. С HTML5, обаче няма как да се плейва RTMP сттрийм. Там обикновено се ползват HLS и MPEG-DASH.

  4. ⌀--·⓪

    Не искам да ви развалям удоволствието, но Мозила могат да ползват безплатно най-скапаната версия на 264, която категорично е по-зле от VP9.

    Т’ва RTMP ми се е налагало да го ползвам само веднъж и пак така намерих някакви неща в хранилището, май едното беше същото. Беше на идиотската страница на ТУ. Там преди няколко години беше станал хит някакъв професор, чието основно занимание беше станало да оборва четирите основни физични закона. Беше стигнал и до Айнщайн. Ама видео имаше само на собствената им страница. Проклинах си дните дето го бяха направили толкова некадърно. Как да е, все пак накрая го гледах.

    Как беше на Tuxcon? Напиши две думи.

  5. sdf

    мисля че плъгина Flashgot за Firefox ти дава директен линк за сваляне на видеа. Той е единствената причина да ползвам Firefox

  6. Dimitar

    При изпълнение на
    sudo iptables -t nat -A OUTPUT -p tcp –dport 1935 -j REDIRECT

    ми дава грешка:
    Bad argument `–dport’
    Try `iptables -h’ or ‘iptables –help’ for more information.

  7. Dimitar

    Проработи по този начин:

    sudo iptables -t nat -A OUTPUT -p tcp --dport 1935 -j REDIRECT

    Ванка, ако искаш го редактирай, че да може мързелите като мен да го ползват наготово 🙂

  8. красимир иванов

    Можете ли да ми посочите къде греша.

    C:\Documents and Settings\krasi>cd Desktop/cd rtmpdump-2.4/rtmpdump -r „rtmp://n
    dtvod.bc-s.cdn.bitgravit.y.com:1935/cdn“ -a „cdn“ -f „WIN 22,0,0,192“ -w „http:/
    /www.ndtv.com/common/v.ideos/flash/player/new-wrapper/NDTVVideoPlayerNew.swf“ -p
    „http://www.ndtv.com/video/shows/agenda/are-muslims-obligated-to-denounce-terro
    r-422860?video“-y „ndtvod/23372/ndtv/Agenda123_Merge_417167_212971_320.mp4“
    The system cannot find the path specified.

    C:\Documents and Settings\krasi>cd Desktop/cd rtmpdump-2.4/rtmpdump -r „rtmp://n
    dtvod.bc-s.cdn.bitgravit.y.com:1935/cdn“ -a „cdn“ -f „WIN 22,0,0,192“ -w „http:/
    /www.ndtv.com/common/v.ideos/flash/player/new-wrapper/NDTVVideoPlayerNew.swf“ -p
    „http://www.ndtv.com/video/shows/agenda/are-muslims-obligated-to-denounce-terro
    r-422860?video“-y „ndtvod/23372/ndtv/Agenda123_Merge_417167_212971_320.mp4“-o „a
    re-muslims-obligated-to-denounce-terror-422860?video-featured.mp4“
    The system cannot find the path specified.
    Това дава Wireshark
    Destination port: macromedia-fcs (1935)
    swfUrl..rhttp://www.ndtv.com/common/v.ideos/flash/player/new-wrapper/NDTVVideoPlayerNew.swf?16-07-08-11-colchange-01-07-2016..
    tcUrl..Mrtmp://ndtvod.bc-s.cdn.bitgravit.y.com:1935/cdn?ovpfv=1.1&auth=yyyyy&aifp=zzzz
    app..“cdn?ovpfv=1.1&auth=yyyyy&aifp=zzzz
    flashVer…WIN 22,0,0,192
    pageUrl..ehttp://www.ndtv.com/video/shows/agenda/are-muslims-oblig[email protected].
    fmsVer…FMS/3,5,7,[email protected]
    play…………;mp4:ndtvod/23372/ndtv/Agenda123_Merge_417167_212971_320.mp4
    Local Address 192.168.1.6
    Remote Address 208.67.238.180
    Local Port 4489
    Remote Port 1935
    url адреса
    http://www.ndtv.com/video/shows/agenda/are-muslims-obligated-to-denounce-terror-422860?video-featured

  9. gatakka Автор

    The system cannot find the path specified. най-често означава, че не може да намери изпълнимия файл, в случая rtmpdump.
    Нещо с извикването (пътя до него) не е наред

  10. кюфте

    Не знам дали просто при копирането са се получили тези бекслешове, или са действително пътя към програмата ти, но…

    Командата cd означава „change directory“, или смяна на директорията.
    Та или първо сменяш директорията с cd и после викаш програмата директно, или без да сменяш директорията задаваш пълна или относителна пътека към програмата като я викаш.
    Пример:
    Ако програмата ти се намира в папка ‘rtmpdump-2.4’ на десктопа
    1) cd Desktop/rtmpdump-2.4
    2) rtmpdump.exe -r „rtmp://n……….“
    или
    1) Desktop/rtmpdump-2.4/rtmpdump.exe -r „rtmp://n……….“

Вашият коментар