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

Кол-во просмотров: 88

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

Решение:

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


Добавка от 14 февраля 2025г.

После обновления пакетов теперь не запускается angie, т.к. ему не нравиться старая версия пакета angie-module-rtmp.so. В то же время какая-то редиска удалила пакет написав:

port deleted on 2025-12-31
REASON: Has expired: Upstream development has slowed down and there are a lot of unresolved issues and PRs upstream, consider migrating to multimedia/mediamtx

Поэтому не спешите удалять старую версию модуля angie-module-rtmp.so, и не обновляйте пакет.

Есть хорошая новость, нашел у себя порты с angie от августа 2025года, выкладываю сюда. Ставить как из обычных портов(make install clean):

+ модули nginx-rtmp-module.so для angie


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

FreeBSD

  1. Чтобы подключить репозиторий Angie, создайте каталоги:
    sudo mkdir -p /usr/local/etc/pkg/angie/ /usr/local/etc/pkg/repos/
  2. Чтобы настроить репозиторий, создайте файл /usr/local/etc/pkg/repos/angie.conf с таким содержимым:
    angie: {
    url: "https://download.angie.software/angie/freebsd/${VERSION_MAJOR}/${ARCH}",
    signature_type: "pubkey",
    pubkey: "/usr/local/etc/pkg/angie/angie-signing.rsa",
    enabled: yes
    }
  3. Скачайте открытый ключ репозитория Angie для проверки подлинности пакетов:
    sudo curl -o /usr/local/etc/pkg/angie/angie-signing.rsa \
    https://angie.software/keys/angie-signing.rsa
  4. Обновите индексы репозиториев:sudo pkg update
  5. Установите пакет Angie:
    sudo pkg install -r angie -y angie
  6. (Необязательно) Установите пакеты необходимых вам дополнений:
    sudo pkg install -r angie -y <ИМЯ ПАКЕТА>
    sudo pkg install -r angie -y angie-module-rtmp
  7. Запустите сервис:sudo service angie start
  8. Чтобы автоматически запускать Angie после перезагрузки сервера:sudo sysrc angie_enable=YES

Примечание

Поскольку пакетный менеджер FreeBSD может неверно определять последнюю версию, для обновления уже установленных пакетов используйте следующий подход:

sudo pkg upgrade `pkg search -r angie angie-[0-9] | sort -Vr | head -1 | awk {'print $1'}`

2. Настройка

Пример рабочей конфигурации 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/;
        }
}
}

3. Пересылаем картинку с камеры на 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

4. Проверяем

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

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

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

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

<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/installation/oss_packages/#install-freebsd-oss

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

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

Яндекс.Метрика