freebsd 14.3 ffmpeg rtmp сервер на angie

Задача: транслировать картинку с камеры в виджет своего сайта

Решение:

Поставим отечественный веб-сервер, поднимем на нем rtmp-сервер(закинем на него rtsp-картинку с помощью ffmpeg), rtmp-сервер создаст m3u8 файл, который съедобен для браузеров и видеоплееров. На этом же сервере опубликуем сайт, с которого будем показывать полученную «картинку» посетителям в их браузерах.

1. Установка Angie

 pkg install angie angie-module-rtmp

Пример рабочей конфигурации angie.conf с rtmp модулем:


user  www;
worker_processes  auto;
worker_rlimit_nofile 65536;

error_log  /var/log/angie/error.log debug;
pid        /var/run/angie.pid;

# Модуль трансляции в angie подгружатется так(долго же я искал пример))):
load_module modules/ngx_rtmp_module.so;

events {
    worker_connections  65536;
}

# Публикация принимающего трансляцию сервера. 
# При поступлении потока с ffmpeg, автоматически(по указанному здесь пути) появится файл с расширением .m3u8, название файла rtmp-модуль возьмет из указанного вами в ffmpeg пути к приемнику трансляции(s1 в этой записке(п.2).
 
rtmp {
    server {
        listen 1935;
        application cam1 {
            live on;

            hls on;
            hls_path /usr/local/www/angie/html/stream;
        }
    }
}

# Публикация сайта, с которого будем забирать трансляцию.
# /usr/local/www/angie/html/stream/ здесь будет искать указанный в vlc плеере файл(в примере ниже, s1.m3u8)

http {
    server {
        listen       8880;
        server_name  cam37.xn--h1afhbk.xn--p1ai;
        location / {
            alias /usr/local/www/angie/html/stream/;
        }
}
}

2. Пересылаем картинку с камеры на rtmp-сервер

Отправляем из ffmpeg на получившийся rtmp сервер rtsp-трансляцию с камеры. Добавил слово s1, иначе по пути /usr/local/www/angie/html/stream будет файл без названия: «.m3u8». А в данной примере будет «s1.m3u8»:

ffmpeg -i rtsp://user:password@192.168.37.113/onvif1 -c:v libx264 -s 780x420 -r 25 -c:a aac -ar 22050 -b:a 32k -f flv -flvflags no_duration_filesize rtmp://192.168.37.1/cam1/s1

Или можно с камеры OpenIPC в разделе Majestic Settings — Outgoing прописать путь до rtmp сервера:

rtmp://192.168.37.1:1935/cam1/s1

3. Проверяем

Проверим в плеере VLC. Открыть url: http://cam37.орлин.рф:8880/s1.m3u8

Работает с ffmpeg! С камеры OpenIPC напрямую трансляции не видно в vlc, хотя поток данных на сервер поступает и vlc его видит… надо разбираться с этим.

4. Вставляем на сайт

Осталось вставить блок с видео, со ссылкой на нужный плейлист, на страницу сайта. Код вставки:

<video width="352" height="198" controls>
<source src="http://cam37.орлин.рф:8880/s1.m3u8" type="application/x-mpegURL">
</video>

Готово!


За кадром

… много времени ушло разобраться в синтаксисе angie и на то чтобы в голове сложилась логика работы всего этого механизма.

Возможные ошибки:

  1. Игнорирует путь до файлов сайта в конфигурации angie.conf, — отправляет на папку файлов самого angie. Ошибка вида: «/usr/local/etc/angie/html/stream/s1.m3u8» failed (2: No such file or directory). Решение: в описании «location / » после знака дроби убрать все слова, оставить просто одну дробь.

2. Также важен последний знак дроби здесь же в «stream/«, иначе будет считать слово stream частью названия файла.

3. При отправке трансляции в ffmpeg, после названия приложения(cam1) поставить дробь и написать название(слово), тогда будет не просто плейлист без названия типа «.m3u8» а появится полноценный файл с названием «слово.m3u8», иначе хрен подцепишь его в плеер.


Литература:

https://angie.software/angie/docs/configuration/configfile

https://github.com/arut/nginx-rtmp-module/wiki/Examples

Оценить
[Оценок: 0 средняя: 0]