четверг, 31 марта 2011 г.

rtmp dump

Для начала скачиваем rtmpdump (берем последнюю версию) распаковываем
tar xvf rtmpdump-2.3.tgz
cd rtmpdump*
Копилируем
make
если появляются ошибки типа "No such file or directory", значит в вашей системе не хватает необходимых библиотек. Доустанавливаем необходимое: мне не хватало openssh/ssh.h
$aptitude search ssh
...
libssh-dev # <=  необходим пакет с суффиксом -dev (это исходные коды)
...
$# ставим 
$sudo aptitude install libssh-dev
$# опять пробуем собрать rtmpdump
$make
Если удачно пакет собрался, то в папке найдете rtmpdump. Устанавливаем ему права на запуск
$ chmod +x rtmpdump

А теперь по шагам 1) start wireshark
$ sudo wireshark 
Запускаем захват снифиринг пакетов на сетевом интерфейсе подключенном к инету (обычно eth0)
в ФИльтер пишем Filter: rtmpt
2) Теперь переключаемся в браузер и открываем нужный ролик, нажимаем Play. Переключаемся в wireshark и видим в первых строках Handshake. По этой строке правой клавишей мыши и выбираем Follow tcp
3) в открывшемся окне запускаем поиск и ищем слова "connect" или "app" или "play" (мне обычно хватает поиска по play) Find: "connect" "app" "play"

4) Теперь в папке скопилированного rtmpdump создаем скрипт (можно любым редактором, я использую nano)
$ nano run.sh
в файл вставляем
#!/bin/sh
SERVER="rtmp://video-3-1.rutube.ru:1935/rutube_vod_2/_definst_"
FILENAME="mp4:vol24/movies/6f/6d/6f6d7247b6d61bb5999b7bfe60aac8db.mp4"
# url берем прямо с адресной строки браузера
URL="http://rutube.ru/tracks/3194354.html?v=6f6d7247b6d61bb5999b7bfe60aac8db"
#адрес плаера, можно взять или из исходного кода страницы, или из окна Follow tcp снифера (все значения находится в соседних строках)
PLAYER="http://rutube.ru/player.swf"
# искомый файл в формате flv
OUTFILE="v.flv"

./rtmpdump -r $SERVER -t $SERVER -y $FILENAME -p $URL -s $PLAYER -o $OUTFILE
из Follow tcp окна заменяем соответсвующие переменные на значение вашего ролика

вместо wireshark можно

$ sudo cat /proc/kcore | strings | awk 'length > 20' | grep rtmp | grep -o 'rtmp:[^"]*' | grep ".mp4"
или tcpdump

ИЛИ rtsp
$ mencoder rtsp://yatv.chanson.cdnvideo.ru:554/chanson-live/shansontv.sdp -oac mp3lame -lameopts cbr:br=56 -ovc x264 -x264encopts bitrate=100 -rtsp-stream-over-tcp -o F.avi
ИЛИ
$ mplayer -noframedrop -dumpfile out.rm -dumpstream rtsp://yatv.chanson.cdnvideo.ru:554/chanson-live/shansontv.sdp

VLC
$ cvlc rtsp://yatv.chanson.cdnvideo.ru:554/chanson-live/shansontv.sdp :sout=#transcode{vcodec=h264,vb=768,ab=64,acodec=mp3,samplerate=44100,deinterlace,high-priority}:std{access=http,dst=0.0.0.0:8080/stream.flv} 

7 комментариев:

  1. Скажите пожалуйста как использовать ваш способ в Ubuntu? Установлен rtmpdump качал с других сайтов, но на рутьюб останавливается на 3х процентах.

    ОтветитьУдалить
  2. В общих чертах я описал с статье. Проблема с рутубом в том что нужно определить точный адрес rtmp потока, сервер, адрес плеера (похоже что используется для авторизации). Для определения этих параметров я использовал wireshark, включать его на сканирование трафика нужно перед открытием страницы с видео, т.к. передача нужных параметров происходит в перевые секунды после запуска видео.

    Если вопрос еще актуален и интересует могу выложить видео всего процесса.

    ОтветитьУдалить
  3. Актуален. Очень мало информации в сети об этом и скудная. Если Вас не не затруднит...

    ОтветитьУдалить
  4. А как добавить потоки rtmp в плейлист VLC? Хотелось бы запускать промсотр из VLC. Возможно ли это?

    ОтветитьУдалить
  5. Если получилось запустить запись потока вот этой командой
    ./rtmpdump -r $SERVER -t $SERVER -y $FILENAME -p $URL -s $PLAYER -o $OUTFILE
    то просто можно открыть в VLC файл $OUTFILE и смотреть.

    Только со времени написания статьи у рутуба, по крайней мере у него, многое поменялось и поток они теперь отдают через video/x-f4f
    о том как его граббить и программы/скрипты есть здесь
    http://www.stream-recorder.com/forum/

    ОтветитьУдалить
    Ответы
    1. Спасибо. Я смотрю другие потоки командой
      rtmpdump -r "rtmp://origin.cdn.ua:1935/coliseum.su/_definst_//dodtrk.com.ua" --quiet | "C:\Program Files\VideoLAN\VLC\vlc.exe" -
      У меня есть несколько URL и хотел бы не писать эти команды вручную в консоли, а переключаться между потоками из плейлиста VLC.

      Удалить
  6. Попробуй поискать GUI программу, обертку над rtmpdump, может даже на форуме stream-recorder.com, которая может работать с несколькими стримами одновременно.
    Иначе вижу только вариант скрипт который будет одновременно скачивать несколько стримов в разные файлы, а файлы соответственно можно добавить в обычный плейлист. Но это решение некомильфо конечно же.
    Стандартного решения в rtmpdump для такой задачки я не находил.

    ОтветитьУдалить