Sazanof.ru Блог NGINX: Установка rtmp модуля для организации потокового вещания видео на сайте

NGINX: Установка rtmp модуля для организации потокового вещания видео на сайте

В этой заметке пойдет речь о том, как настроить nginx-rtmp-module на сервере, чтобы в итоге использовать его для того, чтобы организовать вещание потокового видео на любом ресурсе или сайте.

В процессе установки я натыкался на различные подводные камни, поэтому попробую все нюансы описать детально.

Вводные данные: VDS на Ubuntu 16.04 LTS (на 18.04 тоже работает)

Итак, приступим.

Подготовка системы к установке компонентов

Для начала обновим систему и возможные модули:

sudo apt-get update
sudo apt-get upgrade

После этого, можно проверить, установлен ли у вас nginx (на некоторых VDS он уже предустановлен) командой

nginx -v

Установка nginx

Если же после этого вы увидели информацию о версии, то идем дальше, иначе устанавливаем его со всемы дополнительными пакетами:

apt-get install nginx libpcre++-dev libssl-dev libxslt1-dev libgd2-xpm-dev libgeoip-dev

или же просто

sudo apt-get install nginx

Командой nginx -v проверяем текущую версию nginx и запонимаем ее. У меня это версия 1.10.3.

Сборка nginx из исходников с модулем nginx-rtmp-module

Далее будем собирать nginx из исходников с модулем nginx-rtmp-module. Скачиваем nginx необходимой версии

wget http://nginx.org/download/nginx-1.10.3.tar.gz

Скачиваем nginx-rtmp-module:

wget https://github.com/arut/nginx-rtmp-module/archive/master.tar.gz

Теперь распакуем оба архива:

tar xzf nginx-1.10.3.tar.gz
tar xzf master.tar.gz

Отлично! Можно приступать к сборку nginx из исходников. Переходим в папку с nginx 1.10.3 и выполняем следующее:

cd nginx-1.10.3
nginx -V

Только что мы запросиили установочную конфигурацию nginx, который будем компилировать. Вывод может быть примерно такой:

--with-cc-opt='-g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2' 
--with-ld-opt='-Wl,-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,now' 
--prefix=/usr/share/nginx 
--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 
--http-client-body-temp-path=/var/lib/nginx/body 
--http-fastcgi-temp-path=/var/lib/nginx/fastcgi 
--http-proxy-temp-path=/var/lib/nginx/proxy 
--http-scgi-temp-path=/var/lib/nginx/scgi 
--http-uwsgi-temp-path=/var/lib/nginx/uwsgi 
--with-debug 
--with-pcre-jit 
--with-ipv6 
--with-http_ssl_module 
--with-http_stub_status_module 
--with-http_realip_module 
--with-http_auth_request_module 
--with-http_addition_module 
--with-http_dav_module 
--with-http_geoip_module 
--with-http_gunzip_module 
--with-http_gzip_static_module 
--with-http_image_filter_module 
--with-http_v2_module 
--with-http_sub_module 
--with-http_xslt_module 
--with-stream 
--with-stream_ssl_module 
--with-mail 
--with-mail_ssl_module 
--with-threads

Далее нам нужно в конец строки добавить путь до нашего nginx-rtmp-module:

--add-module=../nginx-rtmp-module-master

Итог (нужно убрать переносы, чтобы была строка, либо добавить обратный слеш как символ переноса, я просто отформатировал для наглядности). Запускаем ./connfigure

./configure --with-cc-opt='-g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2' 
--with-ld-opt='-Wl,-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,now' 
--prefix=/usr/share/nginx 
--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 
--http-client-body-temp-path=/var/lib/nginx/body 
--http-fastcgi-temp-path=/var/lib/nginx/fastcgi 
--http-proxy-temp-path=/var/lib/nginx/proxy 
--http-scgi-temp-path=/var/lib/nginx/scgi 
--http-uwsgi-temp-path=/var/lib/nginx/uwsgi 
--with-debug 
--with-pcre-jit 
--with-ipv6 
--with-http_ssl_module 
--with-http_stub_status_module 
--with-http_realip_module 
--with-http_auth_request_module 
--with-http_addition_module 
--with-http_dav_module 
--with-http_geoip_module 
--with-http_gunzip_module 
--with-http_gzip_static_module 
--with-http_image_filter_module 
--with-http_v2_module 
--with-http_sub_module 
--with-http_xslt_module 
--with-stream 
--with-stream_ssl_module 
--with-mail 
--with-mail_ssl_module 
--with-threads
--add-module=../nginx-rtmp-module-master

И далее делаем:

make
make install

Возможные ошибки в процессе установки и компиляции

Вот как раз на этом этапе может возникнуть ошибка потипу:

../nginx-rtmp-module-master/ngx_rtmp_stat_module.c: In function 'ngx_rtmp_stat_handler':
../nginx-rtmp-module-master/ngx_rtmp_stat_module.c:771:63: error: missing terminating " character [-Werror]
     NGX_RTMP_STAT_L("<built> __DATE__   __TIME__ "</built>\r\n");
                                                               ^
../nginx-rtmp-module-master/ngx_rtmp_stat_module.c:863:0: error: unterminated argument list invoking macro "NGX_RTMP_STAT_L"
 }
 ^
../nginx-rtmp-module-master/ngx_rtmp_stat_module.c:771:5: error: 'NGX_RTMP_STAT_L' undeclared (first use in this function)
     NGX_RTMP_STAT_L("<built> __DATE__   __TIME__ "</built>\r\n");

Чтобы это исправить, достаточно убрать из параметра --with-cc-opt опцию -Wdate-time. Однако, правильнее всего быдет почистить скомпилированное:

sudo make clean
rm -rf Makefile objs

Затем заново запустить ./configure, make (должно скомпилироваться без ошибок) и make install.

Ну и на последок, если не завелось - скопируйте это

cp /usr/share/nginx/sbin/nginx /usr/sbin/nginx