Раздача видео с видеокамеры


Бился, бился и добился решения, как раздавать видео с сетевой вебкамеры на сайт.

Что имеем

  • Сетевая камера которая отдает поток в rtsp
  • Мелкий канал до камеры
  • *nix сервер, в данном случае, FreeBSD 9.
  • Нормальный канал до сервера

Что хотим

  • Забирать видео с камеры по мелкому каналу на сервер
  • Выводить видео с сервера по широкому каналу.

Используем

Устанавливаем ffmpeg:

cd /usr/ports/multimedia/ffmpeg
make install clean

я выбрал для установки еще

 [*] X264              H.264 video codec support via x264
 [*] XVID              Xvid MPEG-4 video codec support   

Устанавливаем nginx c модулем rtmp

cd /usr/ports/www/nginx
make install
Не очищаем каталог порта, в папочке work/arut-nginx-rtmp-module-f7f24ba/ есть полезные примеры.

Я выбирал

[*] HTTP                  Enable HTTP module             
[*] HTTP_FLV              Enable http_flv module
[*] RTMP                  3rd party rtmp module
[*] VIDEO                 Video module support               
[ ] HTTP_MP4              S(VIDEO): Enable http_mp4 module   
[*] HTTP_MP4_H264         S(VIDEO): 3rd party mp4/h264 module

После установки правим nginx.conf

rtmp {
        server {
                listen 1935;
                chunk_size 4000;
                application live {
                        live on;
                        allow publish 127.0.0.1;
                        allow publish 192.168.7.0/24;
                        deny publish all;
                }
       }
}
http {

  server {
        listen       80;
        server_name  localhost;
        location / {
                    root   /tmp/video;
                    index  index.html index.htm;
                }
        }
}

Из папочки /usr/ports/www/nginx/work/arut-nginx-rtmp-module-f7f24ba/test/www/ копируем пример странички с плеером.

cp -R /usr/ports/www/nginx/work/arut-nginx-rtmp-module-f7f24ba/test/www /tmp/video

В файле index.html правим под себя:

  • file: "test" - имя потока, который будем публиковать
  • streamer: "rtmp://your_host.com/live" - адрес сервера, на котом опубликуем и название приложения (application)

После этого запускаем nginx

/usr/local/etc/rc.d/nginx onestart

и запускаем ffmpeg для конвертирования и опубликования нужного нам потока

ffmpeg -i rtsp://login:pass@your_camera/mpeg4/ch1/sub/av_stream -f flv rtmp://your_host.com:1935/live/test

После этого заходим на http://your_host.com/index.html и наслаждаемся.

По настройке и использованию модуля рекомендую посмотреть wiki-страничку на гитхабе.

Нашел модуль через статью "Вещание онлайн-видео с помощью nginx".

P.S.

Я потерял некоторое время, на том, что после публикации/конвертации, т.е. запуска ffmpeg, пытался посмотреть видео через VLC плеер, а он у меня так и не смог подключиться + я не знал, какой именно адрес нужно ему указывать.

Спасибо rarut разработчику модуля, быстро откликнулся и помог разобраться, сказал, что смотреть нужно по тому же адресу, что и опубликовал и точно можно смотреть через ffplay.