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...