RTSP сервер средствами ffserver & ffmpeg

RTSP расшифровывается как Real Time Streaming Protocol — потоковый протокол реального времени — по сути это протокол управления вещанием, он позволяет выполнять несколько команд, такие как «старт», «стоп», «переход на определённое время».

Тестировал:
•Одноплатный компьютер Orange PI PC
•Web-камера LOGITECH HD Webcam C270

Важно! Камера должна на выходе иметь изображение, которое не нужно перекодировать.
Если вы запустили потоковое видео средствами ffserver & ffmpeg , RTSP сервер запускается после редактирования /etc/ffserver.conf

nano /etc/ffserver.conf

Мой /etc/ffserver.conf

Port 8090 
RTSPPort 8091 
RTSPBindAddress 0.0.0.0 
MaxClients 100 
MaxBandwidth 20000 
<Feed feed.ffm> 
File /tmp/feed.ffm FileMaxSize 5M
Launch ffmpeg -f video4linux2 -i /dev/video0 
</Feed> 

# RTSP 

<Stream live>
Feed feed.ffm
Format rtp
VideoFrameRate 10
VideoBufferSize 2000
VideoBitRate 800
VideoQMin 1
VideoQMax 31
VideoSize 640x480
Noaudio
</Stream>

Сохраняем изменения в файле (ctrl + o) и закрываем файл (ctrl + x).

запускаем ffserver:
опция -d отладочный режим

ffserver -d

rtsp://Ваш_IP:8091/live смотрим в VLC

Интересный, но мной не проверенный плеер:
HTML5 RTSP Player
поддерживает:
Browser support:
•Firefox v.42+
•Chrome v.23+
•OSX Safari v.8+
•MS Edge v.13+
•Opera v.15+
•Android browser v.5.0+
•IE Mobile v.11+

Мне был задан вопрос «Как автоматически запускать и останавливать RTSP сервер при заходе на веб страницу?»
RTSP сервер можно запускать и останавливать bash скриптом. Google в помощь.

Поделиться
Отправить
Запинить
2017   armbian   ffmpeg   ffserver   OrangePI PC   RTSP
11 комментариев
vash_sa

Как запустить команду ffmpeg -s 640x480 -r 30 -f video4linux2 -i /dev/video0 http://localhost:8090/feed.ffm в фоновом режиме?
ffserver работает в фоновом режиме.
Если я эту команду просто запускаю, то поток с usb-камеры передается в сеть нормально. Но при этом занят терминал. И второй запуск другой программы с терминала не возможен.
Импеданс & не помогает
ffmpeg -s 640x480 -r 30 -f video4linux2 -i /dev/video0 http://localhost:8090/feed.ffm &  — создает PID процесса. но потока нет!!!!
У Вас так же???

ua3nbw

если ffserver работает в фоновом режиме, то ffmpeg запущен тоже в фоновом режиме строкой Launch ffmpeg -f video4linux2 -i /dev/video0 в конфиге ffserver-а.

так ffmpeg можно запустить в фоне:
ffmpeg -s 640x480 -r 30 -f video4linux2 -i /dev/video0 http://localhost:8090/feed.ffm 2>/dev/null >/dev/null&

ну или запустить другую программы, с другого терминала.

vash_sa

Эта комбинация ffmpeg -s 640x480 -r 30 -f video4linux2 -i /dev/video0 http://localhost:8090/feed.ffm 2>/dev/null >/dev/null&
не работает
Прекрасно работает вот такая команда
sh -c «ffmpeg -s 640x480 -r 30 -f video4linux2 -i /dev/video0 http://localhost:8090/feed.ffm > log 2>&1 &»
Осталось за малым Отловить запрос rtsp://ip:port/live отсылаемый на сервер и запустить нужную ffmpeg команду.
Но как отловить запрос? не могу понять. Дайте наводку, пожалуйста.

ua3nbw

Apache + PHP, попробуйте сначала включать светодиоды, кнопками с веб страницы.

vash_sa

Не понял логики. Причем Apache? Запрос такого рода rtsp://192.168.1.231:8091/live. В ip-камере там тоже доп сервер стоит?
Когда посылается аналогичный запрос на ip-камеру, она включается и отдает поток. Запрос разрывается и камера выключается. Как это сделано? Здесь ведь аналогичная ситуация.

ua3nbw

про включение и выключении камеры тут https://ru.wikipedia.org/wiki/RTSP ничего не сказано. Как это сделано в  ip-камерах я не знаю.
логично, что слушаются необходимые порты и в случае активности на определенном порту скриптом включается вещание.
Apache + PHP позволят по сети запускать ffmpeg, что автоматом включит USB камеру.

Азамат Сабырбаев

«Важно! Камера должна на выходе иметь изображение, которое не нужно перекодировать.»

Это значит я не могу никак вещать h264, если камера на выходе имеет mjpeg? То есть до ffserver я не могу перекодировать поток используя ffmpeg?

ua3nbw

Работать будет, но при перекодировке нагрузка на CPU весьма значительная.

Азамат Сабырбаев

Спасибо, обнадежили. Я долго пытался добавить в выше приведенный конфигурационный файл изменения, но все с ошибками. Можете привести конфигурационный файл или дать направление в каком пути двигаться, на данный момент ошибки требуют presets, а их для cedrus264 в ffmpeg нет

ua3nbw

cedrus тут и не должен работать.
вещать h264 можно используя VideoCodec libx264

Все прекрасно!

Скажите, поток отдаем rtsp в сеть, а пароль можно ставить на него? Как-то не хочется транслировать «открытым текстом»)

ua3nbw

У  FFServerа нет возможности ставить пароль, но можно разрешить доступ по IP
директивы #ACL ALLOW и #ACL DENY в конфиге.

https://www.ffmpeg.org/sample.html

Все прекрасно!

ua3nbw спасибо за ответ!
Скажите, есть дебиан и камера usb с270. Можно средствами ffmpeg сделать rtsp трансляцию чтобы это выглядело как будто ip камера? У меня есть апельсинка и камера. Не хочится покупать ip камеру для видеонаблюдения. Сервер к сожалению понимает только ip камеры(

ua3nbw

Это и выглядит как будто ip камера.
Адресс ip камеры rtsp://Ваш_IP:8091/live

Все прекрасно!

Спасибо!!!
Настроил и подключился но задержка большая( От чего зависит такая большая задержка? Дело в кодеке? Можно как то без кодека или сжатия обойтись? Камера с270 ведь не кодированный сигнал отдает, на прямую или самым легким кодеком.
Извините за такие вопросы, но я первый раз этим занимаюсь(((

ua3nbw

без сжатия не обойтись.
задержка будет всегда, для уменьшения задержки поиграйтесь с параметрами.
VideoFrameRate 10
VideoBufferSize 2000
VideoBitRate 800
VideoQMin 1
VideoQMax 31
задержка чуть более 1сек. у меня получалась при трансляции с  сервера потокового вещания

Ваш комментарий
адрес не будет опубликован

ХТМЛ не работает

Ctrl + Enter
Популярное