alex.podolin Опубликовано 12 марта, 2018 Всем добрый день. Мне необходима помощь для выбора правильного технического решения в следующей задаче: Есть некоторое количество ip камер, с этих камер я забираю rtsp поток с помощью ffmpeg и с его же помощью на этот поток накладываю время и дату. Как мне далее реализовать возможность вещания обработанного потока в rtsp ? т.е. схема ip-camera ->ffmpeg -> обработанные rtsp потоки Подозреваю, что необходимо отдать обработанный поток на некий rtsp сервер. Но не очень понимаю каким образом это сделать Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
snapoid Опубликовано 12 марта, 2018 А сами камеры не могут наложить на картинку время и дату ??? Или "некрасиво" ? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
alex.podolin Опубликовано 12 марта, 2018 да, сами камеры этого не могут. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
snapoid Опубликовано 12 марта, 2018 (изменено) "Некий сервер rtsp" не нужен - им будет сам ffmpeg - http://ffmpeg.org/ffmpeg-protocols.html#rtsp - раздел Examples. Для множественных потоков - смотреть ffserver P.S. - и черкните (если не тайна) модельки камер - давно уже не встречал камер, которые дату и время сами не могут.... Изменено 12 марта, 2018 пользователем snapoid Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
alex.podolin Опубликовано 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 ссылки на потоки. Знаю только, что это чудесный продукт импортозамещения, что-то с сильно "порезанной" прошивкой Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
alibek Опубликовано 12 марта, 2018 ffmpeg — это комбайн, который может практически что угодно. Стримить он тоже умеет, в том числе и в конвейерном режиме (то есть раскодировать, наложить дату, закодировать и стримить). Я аналогичное делаю на VLC, он мне как-то больше понравился. Но советую все же от перекодирования отказаться, это плохо во всех отношениях. Настройте на камерах вывод времени, это все камеры умеют. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
alex.podolin Опубликовано 12 марта, 2018 Just now, alibek said: аналогичное делаю на VLC, он мне как-то больше понравился. расскажите подробнее, как это осуществляете ? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
snapoid Опубликовано 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 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
alibek Опубликовано 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 зависает или вылетает) и при необходимости перезапускает его. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
undro Опубликовано 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 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
alex.podolin Опубликовано 13 марта, 2018 1 minute ago, undro said: Забираю rtsp потоки с полсотни камер, конвертирую в hls и сливаю в стример с инфоканалом. Каким стримером вы пользуетесь и каким образом отдаете hls в стример Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
undro Опубликовано 13 марта, 2018 Стример забирает hls, накладывает лого+текстовые вставки и отдает mcast. Сам стример - проприетарная разработка. Могу конфигами nginx поделиться. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
alex.podolin Опубликовано 13 марта, 2018 1 minute ago, undro said: Могу конфигами nginx поделиться. Было бы не плохо Какой стриммер можете порекомендовать ? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
undro Опубликовано 13 марта, 2018 Зависит от того, что вам нужно на выходе. Для меня головной болью было реализовать бесшовное переключение картинки с камер в выходном mcast. Сделать это на коленке с помощью vlc/ffmpeg так и не получилось. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
alex.podolin Опубликовано 13 марта, 2018 (изменено) На выходе мне нужно получить обработанный rtsp поток, т.е поток, куда я добавил время и дату. Достаточно возможности посмотреть его в vlc Изменено 13 марта, 2018 пользователем alex.podolin Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
undro Опубликовано 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 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Simoon Опубликовано 24 августа, 2019 Доброго дня. IP камеры (H.264/H.264+/H.265/H.265+), 30 шт. подключены к DVR, пишет локально и реплицирует архив на FTP (могу завернуть на любое облако), сейчас онлайн трансляцию снимаю через RTSP поток в связке с rtsp.me -- но это временный костыль, т.к. требуется удалённая работа с архивом. Подскажите пожалуйста, каким образом прикрутить на сайт (bootstrap/yii) плеер с выборкой по архиву, таймлайном? Смотрю на стек из FFmpeg, ffserver, motion Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
morf Опубликовано 15 октября, 2020 (изменено) Есть уже готовая сборка на докере nginx+rtmp+hls https://github.com/alfg/docker-nginx-rtmp Для проигрывания на сайте использовал hls.js. В URl передается переменная с названием камеры на поток m3u8, а далее через iframe можно подключать куда угодно. Изменено 15 октября, 2020 пользователем morf Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...