2 posts tagged

rtmp

Простое Интернет-радио

nginx-rtmp модуль может вещать не только видео, а также и аудио-потоки. «живое радио» Фредди Меркьюри для примера. Это интернет-радиостанция на bash, вещающая mp3-файлы из /var/music. Этот поток может воспроизводить простой JWPlayer, встроенный в веб-страницу.

while true; do
    ffmpeg  -re -i "`find /var/music -type f -name '*.mp3'|sort -R|head -n 1`" -vn -acodec copy -f flv rtmp://localhost/myapp/mystream;
done
2017   armbian   OrangePI PC   rtmp   радио

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