Как я конфигурил стрим-сервер FFmpeg + NGINX-RTMP

Форум технической поддержки


Моё видео, пошаговой установки nginx с модулем rtmp (RTMP Server)

Моё видео, автоматической установки стрим-сервер FFmpeg + NGINX-RTMP с платой захвата DeckLink + GPU Intel Arc + GPU NVidia

Скрипты, автоматической установки и конфигурирования:

0 скрипт пред-установки и конфигурирования ОС

1 скрипт установки репозиториев и драйверов для GPU

2 скрипт установки и конфигурирования FFmpeg

3 скрипт установки и конфигурирования служб samba (SMB v2.0/3.0) и rc.local

4 скрипт установки и конфигурирования NGINX

5 скрипт установки и конфигурирования служб для управления nginx в ОС

все эти скрипты в одном архиве, включая SDK-библиотеки платы Видео захвата Blackmagic DeckLink, для сборки FFmpeg с поддержкой этих плат захвата


Итак, теперь расшифруем это всё, что делают эти скрипты автоматической установки или установим всё пошагово, без них, ручками:

- первым делом подготовимся

1. разрешим суперпользователя root и перейдём на него:

$ sudo passwd root

$ su

обновим ОС

apt update && apt full-upgrade && apt autoremove && apt autoclean

перезагрузимся

reboot

подключим проприетарные репозитории

apt install -y software-properties-common

Обновим базу репозиториев

apt update

установим базовые пакеты в ОС

apt install -y mc net-tools openssh-server inxi wget p7zip-full yasm nasm nmap rtmpdump tclsh tcl git dkms dpkg-dev build-essential make cmake unzip libtool libc6 libc6-dev libnuma1 libnuma-dev g++ gcc gawk gzip curl gnupg2 ca-certificates lsb-release ubuntu-keyring autoconf automake

Установим пакеты и библиотеки, потребующиеся для сборки nginx и ffmpeg

apt install -y ffmpeg rtmpdump tclsh tcl wget git dkms dpkg-dev build-essential make cmake g++ gcc gawk gzip curl gnupg2 ca-certificates lsb-release ubuntu-keyring libssl-dev autoconf automake libxslt1-dev libgeoip-dev fcgiwrap libcgi-fast-perl libfcgi-perl libfcgi0ldbl libcgi-pm-perl libdata-dump-perl libdbd-mysql-perl libdbi-perl libdevel-symdump-perl libdpkg-perl perl perl-base perl-openssl-defaults libbsd-resource-perl libgetopt-argvfile-perl libhtml-template-perl libperl-dev libset-scalar-perl libtext-unidecode-perl libxml2 libxml2-dev libxslt1-dev libxslt1.1 libxml-libxml-perl libxml-namespacesupport-perl libxml-sax-base-perl libxml-sax-expat-perl libxml-sax-perl libyaml-syck-perl zlib1g-dev

И начнём мы от обратного, т.е. с NGINX с модулями RTMP и DAV (оно-же скрипты установки №№ 0, 4 и 5)

добавим пользователя nginx

useradd --no-create-home --shell /bin/false nginx

добавим его в группу www-data

usermod -a -G www-data nginx

проверим

id -Gn nginx

перезагрузимся, чтоб установленные пакеты вступили в силу

reboot

создадим каталоги

mkdir /usr/local/src/nginx /usr/local/nginx /var/cache/nginx /var/log/nginx /tmp/hls

зададим им права

chown nginx:nginx /var/cache/nginx /var/log/nginx /tmp/hls /usr/local/nginx

chmod 750 -R /usr/local/nginx

chmod 777 -R /tmp/hls

переходим в каталог для исходников

cd /usr/local/src/nginx/

скачиваем исходник nginx

wget https://nginx.org/download/nginx-1.30.4.tar.gz

распаковываем в текущий каталог

tar -xvf nginx-1.30.4.tar.gz

поправим права на распакованных архив

chown root:root -R /usr/local/src/nginx/nginx-1.30.4

переходим в него

cd /usr/local/src/nginx/nginx-1.30.4

скачиваем модули rtmp и dav

git clone https://github.com/arut/nginx-rtmp-module

git clone https://github.com/arut/nginx-dav-ext-module

сделаем бэкап скаченных исходников

tar -czf /usr/local/src/nginx/nginx-1.30.4_orig.tar.gz /usr/local/src/nginx/nginx-1.30.4

Сконфигурируем nginx с модулями

./configure --sbin-path=/usr/sbin/nginx --add-module=/usr/local/src/nginx/nginx-1.30.4/nginx-rtmp-module --add-module=/usr/local/src/nginx/nginx-1.30.4/nginx-dav-ext-module --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-http_ssl_module --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-http_v3_module --with-http_perl_module --with-mail --with-mail_ssl_module --with-stream --with-stream_ssl_module --with-http_geoip_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=3 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic'

собираем

make

Устанавливаем

make install

перепровем права

chown nginx:nginx -R /var/cache/nginx /var/log/nginx /tmp/hls /usr/local/nginx /usr/local/nginx/conf /usr/local/nginx/html

chmod 750 /usr/local/nginx /usr/local/nginx/conf /usr/local/nginx/html

chmod 777 -R /tmp/hls

скопируем скомпилированный файл nginx поближе :))

cp /usr/sbin/nginx /usr/local/nginx/

так, nginx готов, теперь для него нужно создать службы в ОС, для управления им

создадим RAM-DISK для временных файлов nginx по пути /tmp/hls, прописав это монтирование в /etc/fstab

echo 'tmpfs /tmp/hls tmpfs rw,nosuid,nodev,relatime,size=4194304k,mode=777 0 0' >> /etc/fstab

примениться после перезагрузки.

далее отредактируем файл конфигурации nginx

nano /usr/local/nginx/conf/nginx.conf

с содержимым

далее создадим файл сервиса nginx

nano /lib/systemd/system/nginx.service

с содержимым

далее создадим файл /etc/default/nginx

nano /etc/default/nginx

с содержимым

далее создадим файл /etc/init.d/nginx

nano /etc/init.d/nginx

с содержимым

сделаем его исполняемым

chmod 755 /etc/init.d/nginx

далее создадим файл ротации логов /etc/logrotate.d/nginx

nano /etc/logrotate.d/nginx

с содержимым

далее создадим символьные ссылки запуска и остановки службы nginx

cd /etc/rc0.d

ln -s ../init.d/nginx K01nginx

cd /etc/rc1.d

ln -s ../init.d/nginx K01nginx

cd /etc/rc2.d

ln -s ../init.d/nginx S01nginx

cd /etc/rc3.d

ln -s ../init.d/nginx S01nginx

cd /etc/rc4.d

ln -s ../init.d/nginx S01nginx

cd /etc/rc5.d

ln -s ../init.d/nginx S01nginx

cd /etc/rc6.d

ln -s ../init.d/nginx K01nginx

разрешим/включим сервис nginx

systemctl enable nginx

запускаем nginx

systemctl start nginx

посмотрим его статус

systemctl status nginx

Всё, nginx полностью готов и уже работает.

теперь переходим на сборку кастомного FFmpeg и установку дров для NVidia, Intel, DeckLink (скрипты установки №№ 0, 1 и 2)

Перейти в раздел Линукс

Перейти в раздел Домой