nginx + ffmpeg = rtmp. Потоковое видео

Сборка FFmpeg
FFmpeg — это универсальный инструмент для кодирования и декодирования множества видео и аудио форматов, хотя FFmpeg и x264 есть в официальных репозитариях различных дистрибутивов, иногда возникает необходимость собирать эти пакеты самостоятельно.

apt-get update && apt-get upgrade -y
git clone https://github.com/ua3nbw/gpiokey.git
cd gpiokey
sudo chmod -R 777 *
./build_ffmpeg.sh

На OrangePI PC собирается минут 40.
синтаксис FFmpeg:
ffmpeg [опции источника] -i [источник] [основные опции] [кодеки] [преемник]
•Опции источника — указывают параметры чтения файла, настройки и так далее;
•Источник — опция -i задает источник, откуда будет читаться файл, источников может быть несколько и это может быть не только файл, но и устройство;
•Основные опции — задают параметры работы всей утилиты;
•Кодеки — кодек, который будет использоваться для сохранения видео и аудио;
•Преемник — файл или устройство, куда будут записаны данные.

Понимаем FFmpeg
Перевод документации ffmpeg на русский язык

Вывод команды ffmpeg -version

ffmpeg version N-83006-g4c63910 Copyright (c) 2000-2017 the FFmpeg developers
built with gcc 4.9.2 (Debian 4.9.2-10)
configuration: --prefix=/usr --arch=armel --target-os=linux --enable-gpl --enable-libx264 --enable-librtmp --enable-nonfree --enable-libfreetype --enable-libfdk-aac --enable-libmp3lame --enable-version3 --disable-mmx --enable-shared
libavutil      55. 43.100 / 55. 43.100
libavcodec     57. 70.101 / 57. 70.101
libavformat    57. 61.100 / 57. 61.100
libavdevice    57.  2.100 / 57.  2.100
libavfilter     6. 68.100 /  6. 68.100
libswscale      4.  3.101 /  4.  3.101
libswresample   2.  4.100 /  2.  4.100
libpostproc    54.  2.100 / 54.  2.100

Устанавливать nginx надо не через apt-get, а из исходников компилируем с модулем nginx-rtmp

./build_nginx.sh

Вывод команды nginx -V

nginx version: nginx/1.11.8
built by gcc 4.9.2 (Debian 4.9.2-10)
built with OpenSSL 1.0.2j  26 Sep 2016
TLS SNI support enabled
configure arguments: --with-ld-opt=-Wl,-z,relro --prefix=/usr --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --with-http_ssl_module --add-module=../nginx-rtmp-module

Далее открываем конфиг nginx расположенный /etc/nginx/nginx.conf и правим под себя. У меня он следующий…


user www-data;
worker_processes 4; # воркеры по количеству ядер процессора
pid /run/nginx.pid;
error_log  /var/log/nginx/nginx_error.log debug;
env PATH;
events {
    worker_connections 768;
}

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;

    server {
        listen 88;

        # rtmp stat

        location /stat {
            rtmp_stat all;
            rtmp_stat_stylesheet stat.xsl;
        }

        location /stat.xsl {
            # you can move stat.xsl to a different location
            root /etc/nginx/;
        }

        location / {
            rtmp_control all;
        }


        error_page   500 502 503 504  /50x.html;

        location = /50x.html {
            root   html;
        }
    }
}

# RTMP
rtmp_auto_push on;
#rtmp_auto_push_reconnect 1s;
#rtmp_socket_dir /var/sock;
rtmp {
    access_log /var/log/nginx/rtmp_access.log;
    server {
        listen 1935;
        ping 30s;
        notify_method get;
        application myapp {
            live on;
         }

    }
}

Проверяем корректность нашего конфига nginx:

root@orangepipc:~# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
root@orangepipc:~#

Если всё ок, то запускаем nginx:

nginx

Простейшая проверка:
подключаем USB Веб камеру

ffmpeg  -i /dev/video0  -an -f flv rtmp://localhost/myapp/mystream

Потоковое rtmp видео наблюдаем по этому адресу

rtmp://Ваш_IP/myapp/mystream

Getting started with nginx rtmp

Поделиться
Отправить
2017   armbian   ffmpeg   nginx   OrangePI PC   rtmp
8 комментариев
admin

Повторил установку на  ruvds.com, при сборке ffmpeg из ./configure надо выкинуть опцию —arch=armel
nginx собрался без ошибок.

vash_sa

Попробовал по этой методе сделать потоковое видео с usb(web)-камеры. Камера бюджетная довольно старая. 4TECH. Армбиан ее поддерживает и на том ей спасибо. Приведенный пример камеру запустил. Но картинка и задержка ужасны. 10-15 с ждешь чтобы картинка на экране отразила перемещение камеры. На форуме нашел такой вариант
ffmpeg -f v4l2 -i /dev/video0 -f mpegts -qscale 2 udp://192.168.1.90:1300  — это в Апельсин с камерой

mplayer -demuxer mpegts -nocache udp://192.168.1.90:1300 — это в Апельсин без камеры но с телевизором
Картинка намного лучше, задержка составляет 1 — 2 с.
Но это UDP. VLC — не показывает. Может не знаю как воспроизводить udp-поток на vlc.
Еще ffmpeg никак у меня не хочет работать в фоне
ffmpeg -f v4l2 -i /dev/video0 -f mpegts -qscale 2 udp://192.168.1.90:1300 &  — не приводит к нужному результату PID появляется, а потока нет. Как быть прошу совета.
Хочу попробовать RTSP сервер, но не знаю с чего начать? Может уважаемый автор с его богатым опытом сделает блог по вопросу создания RTSP сервера? Я и, надеюсь, многие были бы ему благодарны.
С уважением и весь в оранжевой кожуре, ваш постоянный читатель.

ua3nbw

RTSP сервер просто реализуется на ffserver.
ffserver идёт в комплекте с ffmpeg и выполняет роль медиа-сервера — получает видеопоток от ffmpeg.
RTSP используется для старых Андроидов.
сделаю пост.

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

vash_sa

Меня интересует такой вопрос. Может ли RTSP сервер работать как IP-камера. Т. е. когда на ip-камеру подаешь запрос rtsp://login:passwd@ip-cam/video , то она включается и отдает поток. При сбросе — она отключается. Можно ли это же организовать на RPSP с usb(web)-камерой?

vash_sa

То что я выше писал — брал отсюда https://www.linux.org.ru/forum/multimedia/9669080

ua3nbw

RTSP сервер ffserver работатает как IP-камера, но поток будет идти если запущен ffserver
при заходе на страницу, можно скриптом запускать и останавливать ffserver.

vash_sa

«при заходе на страницу,» Эта оговорка ставит в тупик такого дилетанта как я. Можно в обещанном блоге для подобных мне «тормозов» уточнить отдельно выделив этот вопрос. Как автоматически запускать и останавливать ffserver. А может он работать в фоновом режиме? Запустить его при автозапуске или он постоянно будет гнать поток расходуя ресурсы компа?

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

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

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