В некоторых проектах по организации стриминга (видео трансляций) с 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