Из заголовка понятно что надо сделать. Методом проб, ошибок и матюгов сделал. Вкратце опишу как.
Поскольку камера отдает видео по RTSP, по RTSP мы его и заберем. Быстрое гугление показало что у большинства Hikvision камер rtsp-видео доступно по такому урлу: rtsp://логин:пароль@IP_адрес:порт/ISAPI/Streaming/Channels/101
101, в данном случае указывает на камеру и поток. Хочешь знать больше? Читай мануал!
VLC, или иной медиаплеер какой-нибудь, умеет с rtsp работать, конечно же, но видео надо встроить на веб-страницу. А чтобы встроить и воспроизвести — придется соорудить приблуду, которая rtsp конвертонет в rtmp, который будет схаван плеером (у меня vgaplayer) и отображен на странице.
Почему vgaplayer? Что попалось и заработало, тем и воспользовался.
1. Конвертация RTSP в RTMP
Поскольку веб-страница сервится nginx’ом, то nginx’у и отдуваться.
Скачать нужно исходники, т.к. надо будет собрать nginx с rtmp-модулем. Счастливому пользователю FreeBSD, который лупонул make config в /usr/ports/www/nginx и увидел в опциях RTMP…
…обломаю радость. Это не тот RTMP который нужен.
Тот, который нужен, можно тянуть отсюда. Исходники nginx’а, думаю, всем понятно откуда брать.
В общем, ложим исходники модуля по соседству с исходниками самого nginx’а. Заходим в каталог с исходниками самого и конфигурим сборку:
1
|
. /configure [....] --add-module=.. /nginx-rtmp-module/ |
Если все прошло хорошо, make install clean (главное, не прозевать [….] — я некисло так с префиксом наглупил)
Следующим шагом идет установка ffmpeg, если он еще не установлен. Для задачи хватает собранного добрыми людьми.
1
|
sudo pkg install ffmpeg |
В nginx.conf, в самый низ (или в conf.d/твой-вхост.conf если надо) следует добавить кусок типа такого:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
rtmp { server { listen 1935; chunk_size 4096; application live { live on; record off; hls on; hls_nested on; hls_path /usr/local/nginx/html/hls/; hls_fragment 3; hls_playlist_length 60; exec_pull /usr/local/bin/ffmpeg -i rtsp://логин:пароль@IP-адрес-камеры:rtsp-порт/ISAPI/Streaming/Channels/$name -vcodec copy -acodec copy -f flv rtmp://IP-адрес-сервака:1935/live/$name; } } } |
Не забывай: твой префикс может отличаться.
После этих изменений, ясен пень, следует рестартнуть nginx.
Видос будет доступен по rtmp://IP-адрес-сервака:1935/live/
101
2. А как на счет встроить в веб-страницу?
Вариантов куча. Я остановился на самом простом: vgaplayer
1
2
3
4
5
6
7
8
9
10
11
|
< object classid = "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width = "100%" height = "99%" > < param name = "movie" value = "vgaplayer.swf" /> < embed src = "vgaplayer.swf" width = "100%" height = "420" allowScriptAccess = "sameDomain" allowFullScreen = "true" type = "application/x-shockwave-flash" </ object > |
Флеш, понятное дело, в 2019 моветон. Но html5 вроде как в rtmp-поток так и не умеет до сих пор.