Перейти к содержимому
Калькуляторы

ffmpeg и обработка rtsp ссылок

Всем добрый день.

Мне необходима помощь для выбора правильного технического решения в следующей задаче:

Есть некоторое количество ip камер, с этих камер я забираю rtsp поток с помощью ffmpeg и с его же помощью на этот поток накладываю время и дату.

Как мне далее реализовать возможность вещания обработанного потока в rtsp ? т.е. схема ip-camera ->ffmpeg -> обработанные rtsp потоки

Подозреваю, что необходимо отдать обработанный поток на некий rtsp сервер. Но не очень понимаю каким образом это сделать

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А сами камеры не могут наложить на картинку время и дату ??? Или "некрасиво" ?
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

"Некий сервер rtsp" не нужен - им будет сам ffmpeg - http://ffmpeg.org/ffmpeg-protocols.html#rtsp  - раздел Examples. Для множественных потоков - смотреть ffserver

P.S. - и черкните (если не тайна) модельки камер - давно уже не встречал камер, которые дату и время сами не могут....

 

Изменено пользователем snapoid

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

как раз читаю этот раздел документации. И там написано:

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 ссылки на потоки. Знаю только, что это чудесный продукт импортозамещения, что-то с сильно "порезанной" прошивкой

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ffmpeg — это комбайн, который может практически что угодно.

Стримить он тоже умеет, в том числе и в конвейерном режиме (то есть раскодировать, наложить дату, закодировать и стримить).

Я аналогичное делаю на VLC, он мне как-то больше понравился.

Но советую все же от перекодирования отказаться, это плохо во всех отношениях. Настройте на камерах вывод времени, это все камеры умеют.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Just now, alibek said:

аналогичное делаю на VLC, он мне как-то больше понравился.

расскажите подробнее, как это осуществляете ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Так напишите место 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
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Есть три скрипта.

Один скрипт генерирует 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 зависает или вылетает) и при необходимости перезапускает его.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Похожая схема, 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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

1 minute ago, undro said:

Забираю rtsp потоки с полсотни камер, конвертирую в hls и сливаю в стример с инфоканалом.

Каким стримером вы пользуетесь и каким образом отдаете hls в стример 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Стример забирает hls, накладывает лого+текстовые вставки и отдает mcast. Сам стример - проприетарная разработка. Могу конфигами nginx поделиться.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

1 minute ago, undro said:

Могу конфигами nginx поделиться.

Было бы не плохо

 

Какой стриммер можете порекомендовать ?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Зависит от того, что вам нужно на выходе.

Для меня головной болью было реализовать бесшовное переключение картинки с камер в выходном mcast.

Сделать это на коленке с помощью vlc/ffmpeg так и не получилось.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

На выходе мне нужно получить обработанный rtsp поток, т.е поток, куда я добавил время и дату.

Достаточно возможности посмотреть его в vlc

Изменено пользователем alex.podolin

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

Скрытый текст

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Доброго дня. 

IP камеры (H.264/H.264+/H.265/H.265+), 30 шт. подключены к DVR, пишет локально и реплицирует архив на FTP (могу завернуть на любое облако), сейчас онлайн трансляцию снимаю через RTSP поток в связке с rtsp.me -- но это временный костыль, т.к. требуется удалённая работа с архивом. 

Подскажите пожалуйста, каким образом прикрутить на сайт (bootstrap/yii) плеер с выборкой по архиву, таймлайном? Смотрю на стек из FFmpeg, ffserver, motion

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Есть уже готовая сборка на докере nginx+rtmp+hls  https://github.com/alfg/docker-nginx-rtmp

Для проигрывания на сайте использовал hls.js. В URl передается переменная с названием камеры на поток m3u8, а далее через iframe можно подключать куда угодно.

Изменено пользователем morf

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.