alex.podolin Posted March 12, 2018 Posted March 12, 2018 Всем добрый день. Мне необходима помощь для выбора правильного технического решения в следующей задаче: Есть некоторое количество ip камер, с этих камер я забираю rtsp поток с помощью ffmpeg и с его же помощью на этот поток накладываю время и дату. Как мне далее реализовать возможность вещания обработанного потока в rtsp ? т.е. схема ip-camera ->ffmpeg -> обработанные rtsp потоки Подозреваю, что необходимо отдать обработанный поток на некий rtsp сервер. Но не очень понимаю каким образом это сделать Вставить ник Quote
snapoid Posted March 12, 2018 Posted March 12, 2018 А сами камеры не могут наложить на картинку время и дату ??? Или "некрасиво" ? Вставить ник Quote
alex.podolin Posted March 12, 2018 Author Posted March 12, 2018 да, сами камеры этого не могут. Вставить ник Quote
snapoid Posted March 12, 2018 Posted March 12, 2018 (edited) "Некий сервер rtsp" не нужен - им будет сам ffmpeg - http://ffmpeg.org/ffmpeg-protocols.html#rtsp - раздел Examples. Для множественных потоков - смотреть ffserver P.S. - и черкните (если не тайна) модельки камер - давно уже не встречал камер, которые дату и время сами не могут.... Edited March 12, 2018 by snapoid Вставить ник Quote
alex.podolin Posted March 12, 2018 Author Posted March 12, 2018 как раз читаю этот раздел документации. И там написано: Send a stream in realtime to a RTSP server, for others to watch: ffmpeg -re -i input -f rtsp -muxdelay 0.1 rtsp://server/live.sdp Что выступает в качестве RTSP server из данного примера документации. Выше в этом же разделе дана ссылка https://github.com/revmischa/rtsp-server на данное ПО. Прихожу к выводу, что надо отправлять поток на него Касательно модели камер не скажу, они стоят на удаленной площадке и у меня есть только rtsp ссылки на потоки. Знаю только, что это чудесный продукт импортозамещения, что-то с сильно "порезанной" прошивкой Вставить ник Quote
alibek Posted March 12, 2018 Posted March 12, 2018 ffmpeg — это комбайн, который может практически что угодно. Стримить он тоже умеет, в том числе и в конвейерном режиме (то есть раскодировать, наложить дату, закодировать и стримить). Я аналогичное делаю на VLC, он мне как-то больше понравился. Но советую все же от перекодирования отказаться, это плохо во всех отношениях. Настройте на камерах вывод времени, это все камеры умеют. Вставить ник Quote
alex.podolin Posted March 12, 2018 Author Posted March 12, 2018 Just now, alibek said: аналогичное делаю на VLC, он мне как-то больше понравился. расскажите подробнее, как это осуществляете ? Вставить ник Quote
snapoid Posted March 12, 2018 Posted March 12, 2018 Так напишите место rtsp://server/live.sdp rtsp://localhost:порт/live.sdp или rtsp://IP_машины_на_которой_ffmpeg:порт/live.sdp Но насколько помню - были с этим грабли, хотя в Streaming Guide (https://trac.ffmpeg.org/wiki/StreamingGuide) есть пример ffmpeg -i input -f rtsp -rtsp_transport tcp rtsp://localhost:8888/live.sdp Я в свое время делал "рестример" для Ubiquti AirCam-ов в Интеллект - он тогда не понимал RTSP-поток по TCP, а камеры не могли отдавать в UDP. Пришлось использовать ffserver Вставить ник Quote
alibek Posted March 12, 2018 Posted March 12, 2018 Есть три скрипта. Один скрипт генерирует VLM-файл, содержащий блоки с описанием каналов примерно такого вида: #Обзорные камеры: CAM-910 - КОМСОМОЛЕЦ new CAM-910 broadcast enabled loop setup CAM-910 input rtsp://usr:pwd@cam-910.local/cam/realmonitor?channel=1&subtype=0 setup CAM-910 output #std{access=udp,dst=239.0.9.10:1234} control CAM-910 play В строку output можно добавить транскодирование и наложение текста, оно работает, но сильно увеличивает нагрузку на CPU. Я делаю вывод в мультикаст, но можно использовать любой способ вывода. Второй скрипт запускает VLC с нужными параметрами (запускаю в screen-сессии, это проще и удобнее, чем демонизировать VLC): #!/bin/sh CONF="/srv/iptv/cam.conf" SCREEN="screen -S vlc-cam -d -m" VLC="/usr/bin/cvlc" MGMT="-I telnet --telnet-password iptv" DEBUG="-v --logfile /srv/iptv/vlc-cam.log --log-verbose -1" if [ ! -f $CONF ]; then echo "Config-file $CONF not exists" exit 0 fi $SCREEN $VLC $DEBUG $MGMT --vlm-conf=$CONF --ttl 5 Ну а третий скрипт следит за VLC (иногда VLC зависает или вылетает) и при необходимости перезапускает его. Вставить ник Quote
undro Posted March 13, 2018 Posted March 13, 2018 Похожая схема, nginx+rtmp и ffmpeg, только без перекодирования. Забираю rtsp потоки с полсотни камер, конвертирую в hls и сливаю в стример с инфоканалом. nginx держит буфер и реврайтит урлы в удобный вид. для ffmpeg ffmpeg -i rtsp://xxx:yyy@1.2.3.4:554/Streaming/Channels/101 -c copy -f flv -an rtmp://localhost:1935/hls/live Вставить ник Quote
alex.podolin Posted March 13, 2018 Author Posted March 13, 2018 1 minute ago, undro said: Забираю rtsp потоки с полсотни камер, конвертирую в hls и сливаю в стример с инфоканалом. Каким стримером вы пользуетесь и каким образом отдаете hls в стример Вставить ник Quote
undro Posted March 13, 2018 Posted March 13, 2018 Стример забирает hls, накладывает лого+текстовые вставки и отдает mcast. Сам стример - проприетарная разработка. Могу конфигами nginx поделиться. Вставить ник Quote
alex.podolin Posted March 13, 2018 Author Posted March 13, 2018 1 minute ago, undro said: Могу конфигами nginx поделиться. Было бы не плохо Какой стриммер можете порекомендовать ? Вставить ник Quote
undro Posted March 13, 2018 Posted March 13, 2018 Зависит от того, что вам нужно на выходе. Для меня головной болью было реализовать бесшовное переключение картинки с камер в выходном mcast. Сделать это на коленке с помощью vlc/ffmpeg так и не получилось. Вставить ник Quote
alex.podolin Posted March 13, 2018 Author Posted March 13, 2018 (edited) На выходе мне нужно получить обработанный rtsp поток, т.е поток, куда я добавил время и дату. Достаточно возможности посмотреть его в vlc Edited March 13, 2018 by alex.podolin Вставить ник Quote
undro Posted March 13, 2018 Posted March 13, 2018 Скрытый текст ngnix.conf user nginx; worker_processes 4; pid /run/nginx.pid; error_log /var/log/nginx/nginx_error.log debug; env PATH; http { access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; proxy_cache_path /var/www/cache/local levels=1:2 keys_zone=nginx_local_cache:1m inactive=30m max_size=512M; proxy_temp_path /var/www/cache/local/tmp; server { listen 80; location /stat { rtmp_stat all; rtmp_stat_stylesheet stat.xsl; } location /stat.xsl { root /etc/nginx; } location / { rtmp_control all; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } include cams.conf; } } rtmp { access_log /var/log/nginx/rtmp_access.log; server { listen 1935; ping 30s; notify_method get; include rtmp.conf; } } cams.conf types { application/vnd.apple.mpegurl m3u8; video/mp2t ts; } location ~* /hls/.*\.m3u8$ { rewrite "/(.*)/hls/(.*)$" /hls-$1/$2 break; root /tmp/; expires 10s; add_header Cache-Control public; } location ~* /hls/.*\.ts$ { rewrite "/(.*)/hls/(.*)$" /hls-$1/$2 break; root /tmp/; expires 3m; add_header Cache-Control public; } location @fallback_img { rewrite (.+) /fallback.jpg break; root /etc/nginx/; } rtmp.conf chunk_size 4000; application hls_XX { live on; sync 10ms; exec_static ffmpeg -i rtsp://xxx:yyy@1.2.3.4:554/Streaming/Channels/101 -c copy -f flv -an rtmp://localhost:1935/hls-1/live ; hls on; hls_path /tmp/hls-xx/; hls_fragment_naming timestamp; } application hls_YY { live on; sync 10ms; exec_static ffmpeg -i rtsp://xxx:yyy@5.6.7.8:554/Streaming/Channels/101 -c copy -f flv -an rtmp://localhost:1935/hls-2/live ; hls on; hls_path /tmp/hls-yy/; hls_fragment_naming timestamp; } Камеры добавляются в rtmp.conf по шаблону. Потоки забираются в виде http://ip:80/xx/hls/live.m3u8 Вставить ник Quote
Simoon Posted August 24, 2019 Posted August 24, 2019 Доброго дня. IP камеры (H.264/H.264+/H.265/H.265+), 30 шт. подключены к DVR, пишет локально и реплицирует архив на FTP (могу завернуть на любое облако), сейчас онлайн трансляцию снимаю через RTSP поток в связке с rtsp.me -- но это временный костыль, т.к. требуется удалённая работа с архивом. Подскажите пожалуйста, каким образом прикрутить на сайт (bootstrap/yii) плеер с выборкой по архиву, таймлайном? Смотрю на стек из FFmpeg, ffserver, motion Вставить ник Quote
morf Posted October 15, 2020 Posted October 15, 2020 (edited) Есть уже готовая сборка на докере nginx+rtmp+hls https://github.com/alfg/docker-nginx-rtmp Для проигрывания на сайте использовал hls.js. В URl передается переменная с названием камеры на поток m3u8, а далее через iframe можно подключать куда угодно. Edited October 15, 2020 by morf Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.