19 июл. 2011 г.

Организация онлайн трансляции

Для организации онлайн трансляции мне понадобилось:
1. IP камера работающая в сети организации.
2. Проброшенный порт на роутере офиса.
3. Unix сервер c установленными vlc и ffmpeg.

Набор комманд, составленным по немногочисленной документации найденной в интернете.

И так сначала просто подключите камеру к витой паре, и дайте на нее питание.
С компьютера отследите где у нее rtsp поток(по какому порту и как называется файл стрима).
Далее сделайте проброс портов на роутере(для получения возможности "забирать" видео из любой точки мира, в случае отсутсвия прямого IP адреса на роутере, вам может понадобиться включить внешний сервер в общую сеть и колдовать с iproute но меня это не коснулось).

И так точное описание проблемы:
Имеется поток mp4 видео по протоколу rtsp который ни одним браузером не проигрывается, а задача состоит в том чтобы выложить видео на сайте в формате flv для кросплатформенности.

Как мы все понимаем нужно перекинуть видео на другой протокол и еще его перекодировать в другой формат.
Делается это двумя командами, первая заберает видео с камеры и кладет его в корень вебсервера:
cvlc -vv rtsp://10.0.0.3:554/video.mp4 --rtsp-caching=100000 --no-sout-audio --sout \
'#std{access=http,dst=127.0.0.1:8001,mux=ts}'
и делает его доступным по http протоколу на порте 8001.

Вторая же берет видео на сервере и делает из video.mp4 файл view01.flv который очень просто выложить на сайте.
Вот эта команда:
cvlc -vv http://127.0.0.1:8001 --loop --http-caching=10000 --sout \
'#transcode{vcodec=FLV1,vb=512,fps=15}:std{access=http{mime=video/x-flv},dst=:8080/view01.flv,mux=ffmpeg{mux=flv}}'


Можно поиграться с настройками которые вы видите при запуске команды, vb=512 это видеобуфер равный 512мегобайтам, fps соответсвенно частота смены кадров vcodec всем понятно что это кодек, а дальше вы вводети access=http доступ по протаколу WWW и destination dst=:8080(это порт по которому доступно конечное видео)/veaw01.flv(его название) mux=ffmpeg определяет сервер работающий над перекодированием у нас это ffmpeg.

Что примечательно процесс запуска можно автоматизироватьи запускать в фоне, чтобы не отбирать у себя время и 2 виртуальных консоли написав два скрипта:


mkdir ~user/scripts
touch ~user/scripts/stream1.sh
touch ~user/scripts/stream2.sh


[b]stream1.sh[/b]

#!/bin/sh
cvlc -vv rtsp://10.0.0.3:554/camera1.sdp --rtsp-caching=100000 --no-sout-audio --sout \
'#std{access=http,dst=127.0.0.1:8001,mux=ts}'



[b]stream2.sh[/b]
#!/bin/sh
cvlc -vv http://127.0.0.1:8001 --loop --http-caching=10000 --sout \
'#transcode{vcodec=FLV1,vb=512,fps=15}:std{access=http{mime=video/x-flv},dst=:8080/view01.flv,mux=ffmpeg{mux=flv}}'


Ну думаю с запуском стриптов и с его автоматизацией тоже проблем не возникнет - доков полно.

Все, теперь на вашем сервере по 8080 порту постоянно идет видео в формате flv доступном через любой браузер.[/quote]

Комментариев нет: