Видеонаблюдение на базе Linux
13 Октябрь 2012, 00:28
Вчера и сегодня боролся с перекодированием стрима с ip-камер и вещанием потока в виде понятного для флеш-плеера формате. В качестве ОС установил CentOS 6.
В наличии имелось 3 камеры:
1. DCS-2130
2. TP-Link TL-SC3130G
3. D-Link 932L
Выбор упал на Vlc плеер, как наиболее расхваливаемый. Но как показала практика - зря. Толи руки у меня кривоваты, то ли софт, но корректно заставить работать ее мне не удалось. Она или вещала поток через себя без перекодирования в нужный формат, или же перекодировал, но не отдавал. Клиент начинал получать видео лишь тогда, когда со стороны сервера я обрывал процесс кодирования. Т.е. фактически все время конечный плеер буферезировал нескончаемый поток и воспроизводил его лишь когда поток обрывался. Вообщем, сходных проблем я нигде не нашел, и убив сутки на тщательные попытки завести все это добро через vlc,решил от него отказаться в пользу ffmpeg.
На нем все вышло. Об этом по подробнее.
Сначала подключил репозитории для Centos 6 EPEL и RPMfusion, - они содержат самые свежие версии нужных нам пакетов. После обновления системы ставим само ПО:
# yum install ffmpeg
Как только установится, ном остнется лишь подправить /etc/ffserver.conf
В шапке прописываем:
Port 8091
BindAddress 0.0.0.0
MaxClients 300
MaxBandwidth 100000
CustomLog /var/log/ffservser.log
Тут думаю все понятно.
После пропишем фиды и стримы для первых двух камер. С ними было меньше всего проблем, ибо они поддерживают протокол rtsp.
<Feed feed1.ffm>
File /tmp/feed1.ffm
FileMaxSize 1M
Launch ffmpeg -i rtsp://user:pass@xxx.xxx.xxx.xxx:554/live1.sdp
</Feed>
<Stream camera1.swf>
Feed feed1.ffm
Format swf
VideoCodec flv
VideoFrameRate 15 # кадров в секунду выходного видео
VideoBufferSize 5000 # размер буфера
VideoBitRate 1024 # битрейт в kbs
VideoQMin 1
VideoQMax 5
VideoSize 640x480 # Разрешение видео-потока
PreRoll 0
NoAudio # Отклчаем аудио-поток
</Stream>
Для второй камеры аналогично:
<Feed feed2.ffm>
File /tmp/feed2.ffm
FileMaxSize 1M
Launch ffmpeg -i rtsp://user:pass@yyy.yyy.yyy.yyy:554/video.mp4
</Feed>
<Stream camera2.swf>
Feed feed2.ffm
Format swf VideoCodec flv
VideoFrameRate 5
VideoBufferSize 5000
VideoBitRate 1024
VideoQMin 1
VideoQMax 5
VideoSize 640x480
PreRoll 0
NoAudio
</Stream>
Вот с третьей пришлось помучаться, - ей rtsp неведом.Вычитал на сайте производителя что, она отдает видео в виде ряда картинок путем отработки скрипта mjpeg.cgi на веб-интерфейсе камеры. Никакой плеер не захотел цепляться по данному адресу к потоку. Думал, что на этом все, но ffmpeg смог! Но пришлось пошаманить. Во первых, для авторизации пришлось использовать админскую учетку на камере, ибо с пользовательской не хотел ни в какую. Во вторых, пришлось в ключах ffmpeg явно указать тип входного потока и битрейт, иначе тоже не получалось.
<Feed feed3.ffm>
File /tmp/feed3.ffm
FileMaxSize 1M
Launch ffmpeg -f mjpeg -r 20 -i http://user:pass@zzz.zzz.zzz.zzz/mjpeg.cgi
</Feed>
<Stream camera3.swf>
Feed feed3.ffm
Format swf
VideoCodec flv
VideoFrameRate 7
VideoBufferSize 5000
VideoBitRate 1024
VideoQMin 1
VideoQMax 5
VideoSize 320x240
PreRoll 0
NoAudio
</Stream>
Конфиг готов, остается лишь запустить наше творение:
# ffserver
# ps ax | grep ff
3814 ? Ss 0:09 ffserver
3815 ? Sl 5:57 ffmpeg -i rtsp://user:pass@xxx.xxx.xxx.xxx:554/live1.sdp http://127.0.0.1:8091/feed1.ffm
3816 ? Sl 0:59 ffmpeg -i rtsp://user:pass@yyy.yyy.yyy.yyy:554/video.mp4 http://127.0.0.1:8091/feed2.ffm
3817 ? S 0:32 ffmpeg -f mjpeg -r 20 -i http://user:pass@zzz.zzz.zzz.zzz/mjpeg.cgi http://127.0.0.1:8091/feed3.ffm
3864 pts/1 S+ 0:00 grep ff
Как видим, и сервер, и все три входных потока работают. Остается лишь проверить, зайдя через браузер по адресу этого сервера и порту 8091 (указанному в конфиге). Если все хорошо, откроется страничка со статистикой и ссылками на потоки с наших камер. Цепляемся к любой из них и наслаждаемся видеорядом =)
На этом все, будут замечания или вопросы,- пишите в комментарии или на форуме. Спасибо за внимание.
1 Ответа(ов) на "Видеонаблюдение на базе Linux"
28 Январь 2013, 10:51
# Отклчаем аудеопоток
audio