Ubuntu Linux:
sudo apt-get install rtmpdump
Rutube отдаёт ссылки на видеоролики 4-мя способами (по состоянию на 8 ноября 2013 г.):
- Нешифрованное видео по протоколу RTMP. Для закачки используется rtmpdump (версия не ниже 2.4).
- Шифрованное видео по RTMP. Хоть и скачается rtmpdump’ом, но воспроизвести его не удастся. Решение для этого типа ссылок не найдено.
- Нешифрованное видео по технологии HTTP Dynamic Streaming. Для закачки используется скрипт AdobeHDS.php
- Нешифрованное видео методом HTTP Live Streaming. Для закачки используется VLC/ffmpeg.
Сначала нужно определить, какой тип отдачи используется для требуемого видеоролика, на момент обновления статьи чаще всего это способы 3 и 4 (как минимум, для российских пользователей).
Для этого берём любую ссылку на нужное видео с его полным или предназначенным для встраивания идентификатором, это может быть ссылка вида:
- http://rutube.ru/video/51c001891c1147fa53787c8496c0d8bf/
- http://rutube.ru/video/embed/6641938
- http://rutube.ru/[accounts/login/?next=/]video/private/2cc0885902cac3c8f9f88849e115db15/?p=lwTcQ6Z0PUTg3AB7lDvGqg
Для ссылки под номером 3 важно не терять параметр “p”, стоящий в конце.
Открываем файл с информацией о видео http://rutube.ru/api/play/trackinfo/<VIDEO_ID>/?format=xml[&p=blablabla]:
http://rutube.ru/video/51c001891c1147fa53787c8496c0d8bf/
=> http://rutube.ru/api/play/trackinfo/51c001891c1147fa53787c8496c0d8bf/?format=xml
http://rutube.ru/video/embed/6641938
=> http://rutube.ru/api/play/trackinfo/6641938/?format=xml
http://rutube.ru/[accounts/login/?next=/]video/private/2cc0885902cac3c8f9f88849e115db15/?p=lwTcQ6Z0PUTg3AB7lDvGqg
=> http://rutube.ru/api/play/trackinfo/2cc0885902cac3c8f9f88849e115db15/?format=xml&p=lwTcQ6Z0PUTg3AB7lDvGqg
В этом файле нужны адреса из тега <videoBalancer>:
<default>http://bl.rutube.ru/5bc45bc80ad9f9597a8e1de3e0cf69f6.f4m — внутри этого файла будут ссылки для закачки по RTMP/HDS.
<m3u8>http://bl.rutube.ru/5bc45bc80ad9f9597a8e1de3e0cf69f6.m3u8 — для HLS.
RTMP/HDS
<default>http://bl.rutube.ru/5bc45bc80ad9f9597a8e1de3e0cf69f6.f4m
Это файл-манифест. Открыв его, смотрим на теги <baseURL> и <media>. Определяем тип отдачи по их содержимому:
- RTMP, если baseURL == rtmp://video-N-N.rutube.ru/bla-bla-bla, а атрибут url тега media содержит расширение .mp4 в тексте ссылки.
- Шифрованное видео по RTMP, если тот же атрибут url содержит расширение .f4f. Скачанное видео не воспроизводится.
- Нешифрованное видео по HDS, если baseURL == http://video-N-N.rutube.ru, тег(и) media указывает на манифест (ссылка с расширением .f4m) либо сразу на mp4-файл.
Определившись со способом отдачи, приступаем к закачке.
RTMP
Тег <baseURL> содержит имя хоста, порт и переменную “app”. Атрибут url тега <media> содержит путь к потоку (playpath):
rtmp://video-N-N.rutube.ru(:1935)/<app>/mp4:volNN/movies/.*
|____________host___________|__app__|_____playpath____|
где переменная app может принимать следующие значения:
- vod/
- rutube/
- rutube_vod_[0-9]/
- rutube_vod_[0-9]/_definst_/
Из параметров, предлагаемых дампером (rtmpdump –help), нам нужны следующие:
--rtmp URL (напр. rtmp://host[:port]/) --app Переменная app. --playpath Перезаписывает playpath, указанный в --rtmp --swfUrl Ссылка на swf-плеер. --flv Название конечного FLV-файла. --live Для rtmp-ссылок, переменная app которых равна "vod/".
Примеры закачки ссылок:
rtmp://video-1-12.rutube.ru:1935/rutube_vod_2/_definst_/mp4:vol12/movies/b5/e0/b5e08ad46a65d700dd0da2f7b40e2fc0.mp4?e=1288635285&s=740fa844fc6687ac03681a0eb72d003e
sh/cmd:
rtmpdump --rtmp "rtmp://video-1-12.rutube.ru:1935/" --app "rutube_vod_2/_definst_/" --swfUrl "http://rutube.ru/player.swf" --playpath "mp4:vol12/movies/b5/e0/b5e08ad46a65d700dd0da2f7b40e2fc0.mp4?e=1288635285&s=740fa844fc6687ac03681a0eb72d003e" --flv "output_video.flv"
rtmp://video-102-1.rutube.ru:1935/vod/mp4:rutube/vol41/movies/a2/05/a205ff4b2073c18522253585224f7a7c.mp4?e=1287342905&s=813f44d26fe97cd7ef670cb8d44e36e2
sh/cmd:
rtmpdump --rtmp "rtmp://video-1-12.rutube.ru:1935/" --app "vod/" --swfUrl "http://rutube.ru/player.swf" --playpath "mp4:rutube/vol41/movies/a2/05/a205ff4b2073c18522253585224f7a7c.mp4?e=128734&s=813f44d26fe97cd7ef670cb8d4" --flv "output_video.flv" --live
Не забудьте про параметр –live, используемый при переменной app равной “vod/”. Иначе видео будет качаться в размере, в два-три раза превышающий указанный на сайте. Также –swfUrl, он должен быть равен адресу флеш-плеера: “http://rutube.ru/player.swf”.
HDS
С HDS-ссылками проще, достаточно ссылки на f4m-файл:
sh/cmd:
php.exe AdobeHDS.php --manifest "http://bl.rutube.ru/5bc45bc80ad9f9597a8e1de3e0cf69f6.f4m" --outfile "output_video.mp4"
HLS
<m3u8>http://bl.rutube.ru/5bc45bc80ad9f9597a8e1de3e0cf69f6.m3u8
Для закачки можно использовать ffmpeg:
sh/cmd:
ffmpeg -i "http://bl.rutube.ru/5bc45bc80ad9f9597a8e1de3e0cf69f6.m3u8" video_out.ts
Credits: tradiz.org