«

»

Янв 25 2015

Распечатать Запись

Модуль NGINX-RTMP и стриминг с IP камер

nginx-rtmp-module-ip-cameras В некоторых проектах по организации стриминга (видео трансляций) с IP-камер мы используем NGINX-RTMP.

NGINX-RTMP

 Не все заказчики для которых мы реализуем проекты готовы приобретать дорогостоящий медиа сервер Wowza Streaming Engine, поэтому в тех задачах, для решения которых достаточно функционала модуля NGINX-RTMP мы используем именно его. Рассмотрим один из полезных примеров, взятых из реального проекта.

 Напомню, что для запуска Nginx сервера следует ввести в командной строке: service nginx start. Для остановки сервера нужно ввести в командной строке: service nginx stop.

Добавление новых камер

 Перед добавлением новой IP камеры необходимо убедится, что видеопоток идет со следующими характеристиками: видео кодек h.264. Также необходимо убедиться в том, что видеопоток можно забрать с камеры по протоколу rtsp утилитой ffmpeg. Так как, если его сможет забрать ffmpeg, то проблем с модулем NGINX-RTMP не будет. Для этого в командной строке сервера необходимо выполнить следующую команду:

ffmpeg -rtsp_transport tcp -i «[RTSP URL]» -vcodec copy -an -f flv «rtmp://localhost:1935/live/testcam»

где [RTSP URL] — адрес видеопотока с камеры, например:

rtsp://[IP — адрес]:7554/user=Adminuser&password=adminuserpass&channel=1&stream=1.sdp?

 Например, для IP камер Evidence и Smartec опцию «-rtsp_transport tcp» нужно убрать. Также видео с IP камеры Smartec нужно перекодировать в H264 для этого необходимо опцию -vcodec copy поменять на -vcodec h264.

 Если в результате выполнения этой команды ffmpeg не вылетает с ошибкой и можно просмотреть поток rtmp://localhost:1935/live/testcam то можно переходить к подключению камеры уже с использование модуля NGINX-RTMP, все должно работать без проблем. Если ffmpeg вылетает с ошибками, то необходимо попробовать другие параметры ffmpeg.

 Для добавления новой камеры необходимо в текстовом редакторе открыть файл /etc/nginx/nginx.conf, и в разделе rtmp/server/live добавить строку вида:
exec_static /usr/local/bin/ffmpeg -rtsp_transport tcp -i «[RTSP URL]» -vcodec copy -an -f flv «rtmp://localhost:1935/live/[название потока]» 2>>/dev/null;

где

[RTSP URL] — адрес видеопотока с камеры.
[название потока] — название видеопотока, которое будет доступно на сервере.

 Как уже говорилось для IP камер Evidence и Smartec опцию «-rtsp_transport tcp» нужно убрать. Также видео с камеры Smartec необходимо перекодировать в h264 для этого нужно опцию -vcodec copy поменять на -vcodec h264. 

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

Ссылки для просмотра live трансляции c Nginx сервера

[ip-адрес(Nginx сервера)] – ip-адрес Nginx сервера
[название потока] — название потока.

RTMP протокол:
rtmp://[ip-адрес(Nginx сервера)]:1935/live/[название потока]
HLS протокол:
http://[ip-адрес(Nginx сервера)]:80/hls/[название потока]/index.m3u8

PHP сценарий для захвата кадра из видеопотока

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

<?php

$file_data=»rtmp://localhost:1935/live/cam2″;

$random=rand(10,100000);

$frame_name=$random.’.png’;

$dir=’./’;

exec (‘/usr/local/bin/ffmpeg -i «‘.$file_data.'» -ss 00:00:02 -f image2 -vframes 1 ‘.$dir.$frame_name.’ 2>>/dev/null’);

?>

 Если у вас появились какие-то вопросы по Wowza серверу, пишите нам. Если вам нужно что-то настроить или получить консультацию по медиа серверам и системам, также можете обращаться ко мне и нашей команде. Разную полезную информацию на данную тему вы можете найти в нашем Справочнике по видеотрансляциям.

  Эта статья была написана и опубликована совместно c моим коллегой Евгением Петровым, который и проделывал выше описанные действия.

Всего хорошего!

 Приглашаю всех подписаться на новости моей публичной страницы ВКонтакте, ее адрес http://vk.com/itmultimedia . Буду рад видеть Вас в своих подписчиках!


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

2 pings

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>