Введение
HLS означает HTTP Live Streaming. Это протокол потоковой передачи медиа на основе HTTP, разработанный Apple. В отличие от протоколов на основе UDP, таких как RTP, он не может быть заблокирован брандмауэрами, которые позволяют только HTTP -трафик. Он может быть доставлен HTTP -серверами, такими как Nginx, и может распространяться по CDN.
Установка NGINX по умолчанию не соответствует модулю HLS; Но есть открытый исходный код Nginx module Это поддерживает HLS. Нам нужно будет компилировать Nginx из источника и добавить модуль во время компиляции.
В этом уроке показано, как установить Nginx и использовать его в качестве потокового сервера Video Live.
Предварительные условия
Чтобы следовать этим учебнику, убедитесь, что на целевой машине присутствует следующее:
- Git, Wget, GCC, GCC-C ++, Perl, GD, GD-Devel, Perl-Extutils-Embed, Geoip, Geoip-Devel и Tar
- Пользователь без root с возможностями sudo
Если у вас нет утилит для сборки, вам нужно их установить. Запустите это для этого:
$ sudo yum update $ sudo yum install epel-release $ sudo yum install git wget gcc gcc-c++ tar gd gd-devel perl-ExtUtils-Embed geoip geoip-devel
Шаг 1 — Загрузите и компилируйте Nginx с его зависимостями
Нам нужно скачать библиотеки зависимостей для Nginx; в том числе открытый сорень nginx-rtmp Модуль, используемый для обеспечения Nginx с возможностями HLS. Во -первых, мы скачаем Pcre Модуль, требуемый Nginx Ядро и Переписать модули. Запустите это для этого:
$ wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.42.tar.gz $ tar -zxf pcre-8.42.tar.gz $ rm -rf pcre-8.42.tar.gz $ cd pcre-8.42 $ ./configure $ make $ sudo make install $ cd
Далее мы скачаем zlib модуль, требуемый Nginx gzip module nginx и установите его. Запустите это для этого:
$ wget http://zlib.net/zlib-1.2.11.tar.gz $ tar -zxf zlib-1.2.11.tar.gz $ rm -rf zlib-1.2.11.tar.gz $ cd zlib-1.2.11 $ ./configure $ make $ sudo make install $ cd
Далее мы скачаем OPENSSL MODULE требуется Nginx ssl module Анкет Запустите это для этого:
$ wget http://www.openssl.org/source/openssl-1.0.2q.tar.gz $ tar -zxf openssl-1.0.2q.tar.gz $ rm -rf openssl-1.0.2.tar.gz $ cd openssl-1.0.2q $ ./config $ make $ sudo make install $ cd
Затем мы загружаем открытый исходный код nginx-rtmp модуль из его репозитория GitHub. Чтобы сделать это, беги:
$ git clone git://github.com/arut/nginx-rtmp-module.git
Наконец мы загружаем источник Nginx. Мы бы загрузили последнюю стабильную версию, которая на момент написания этой статьи — 1.14.2, от nginx.org Анкет Запустите это для этого:
$ wget https://nginx.org/download/nginx-1.14.2.tar.gz $ tar zxf nginx-1.14.2.tar.gz $ rm -rf nginx-1.14.2.tar.gz $ cd nginx-1.14.2
Теперь, когда у нас есть необходимые зависимости, мы можем составить Nginx. Теперь нам нужно настроить параметры сборки. Это делается путем запуска сценария «./configure» в каталоге с множеством параметров для компиляции Nginx. Параметры включают пути к модулю с открытым исходным кодом, модуль Zlib, модуль PCRE и модуль OpenSSL, все ранее загруженные и установленные. Нам также необходимо указать, какие встроенные модули NGINX мы хотим собрать. Мы запускаем это, чтобы получить желаемый вариант сборки:
$ ./configure --add-module=../nginx-rtmp-module \ --sbin-path=/usr/sbin/nginx \ --lock-path=/var/run/nginx.lock \ --conf-path=/etc/nginx/nginx.conf \ --pid-path=/run/nginx.pid \ --with-pcre=../pcre-8.42 \ --with-zlib=../zlib-1.2.11 \ --with-openssl=../openssl-1.0.2q \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --user=nginx \ --group=nginx \ --with-http_auth_request_module \ --with-http_degradation_module \ --with-http_geoip_module \ --with-http_gunzip_module \ --with-http_gzip_static_module \ --with-http_image_filter_module \ --with-http_mp4_module \ --with-http_perl_module \ --with-http_realip_module \ --with-http_secure_link_module \ --with-http_slice_module \ --with-http_ssl_module \ --with-http_stub_status_module \ --with-http_v2_module \ --with-stream_ssl_module \ --with-stream \ --with-threads \ --prefix=/etc/nginx
Наконец компилируйте и создайте Nginx.
$ make $ sudo make install
Чтобы проверить, был ли он установлен должным образом запуска:
$ nginx -V #The output should be the Nginx version, compiler version, and configure script parameters.
Нам нужно установить страницы Nginx Man, чтобы выполнить это:
$ sudo cp ~/nginx-1.14.2/man/nginx.8 /usr/share/man/man8 $ sudo gzip /usr/share/man/man8/nginx.8
Теперь мы убираем библиотеки ранее загруженные.
$ rm -rf nginx-1.14.2 nginx-rtmp-module openssl-1.0.2q pcre-8.42 zlib-1.2.11
Шаг 2 — Настройка и настройка Nginx
Теперь, когда бинар Nginx установлен в нашем пути поиска, нам нужно настроить пользователя Nginx. Чтобы настроить пользователя Nginx, запустите:
$ sudo useradd --system --home /var/lib/nginx --shell /sbin/nologin --comment "nginx system user" nginx
Нам также необходимо создать каталог, в котором хранятся журналы Nginx, и сделать пользователя Nginx владельцем. Для этого мы бежим:
$ sudo mkdir /var/log/nginx && sudo chown nginx:nginx /var/log/nginx
При этом пришло время создать файл сервисного устройства Systemd Systemd. Это содержимое должно быть что -то вроде этого:
[Unit] Description=nginx - high performance web server Documentation=https://nginx.org/en/docs/ After=network.target remote-fs.target nss-lookup.target Wants=network-online.target [Service] Type=forking PIDFile=/run/nginx.pid ExecStartPre=/usr/bin/rm -f /run/nginx.pid ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.conf ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf ExecReload=/bin/kill -s HUP $MAINPID KillSignal=SIGQUIT TimeoutStopSec=5 KillMode=process PrivateTmp=true [Install] WantedBy=multi-user.target
Теперь мы вставляем вышеприведенное содержимое в файл сервиса NGINX:
$ sudo vim /lib/systemd/system/nginx.service # You can replace vim with whichever editor you prefer
Теперь мы перезагружаем Daemonctl и начинаем Nginx.
$ sudo systemctl daemon-reload $ sudo systemctl start nginx $ sudo systemctl enable nginx
Теперь нам нужно настроить Nginx для потоковой передачи видео. Наш файл nginx.conf; Расположен в каталоге/etc/nginx/
user nginx; worker_processes auto; server_tokens off; events { worker_connections 1024; } # We need to setup an rmtp server to stream video from client devices rtmp { server { listen 1935; chunk_size 4096; ping 30s; notify_method get; allow play all; # rmtp handler our clients connect to for live streaming, it runs on port 1935. It converts the stream to HLS and stores it on our server application app { live on; hls on; hls_path /var/www/hls/live; hls_nested on; # create a new folder for each stream record_notify on; record_path /var/www/videos; record all; record_unique on; } application vod { play /var/www/videos; } } } http { include mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; sendfile on; tcp_nopush on; keepalive_timeout 65; gzip on; server { listen 80; server_name _; location / { root html; index index.html index.htm; } # the http end point our web based users connect to see the live stream location /live { types { application/vnd.apple.mpegurl m3u8; } alias /var/www/hls/live; add_header Cache-Control no-cache; } }
Нам также нужно создать каталог, в котором хранится наш видеопоток.
$ sudo mkdir -p /var/www/hls/live
Теперь мы можем перезапустить Nginx для перезагрузки нового файла конфигурации.
$ sudo systemctl restart nginx
Шаг 3- Поток и публикация видео
Теперь, чтобы жить в прямом эфире с клиентской машины, предполагая, что у клиента хранится видео локально и ffmpeg Установлено, мы запускаем это для публикации на нашем сервере:
$ ffmpeg -i /path/to/video -c:v h264 -c:a aac -strict -2 -f flv rtmp://server_ip:1935/app/unique_stream_name #the name of the stream has to be unique
Наши зрители могут посмотреть видео на VLC Media Player Поток URL: http://server_ip/live/unique_stream_key/index.m3u8
Анкет Также можно публиковать видео с веб -камеры с клиентской машины Linux, работая:
$ ffmpeg -f video4linux2 -i /dev/video0 -c:v libx264 -an -f flv rtmp://server_ip:1935/app/unique_stream_name
Из книги Mac это так
$ ffmpeg -f avfoundation -framerate 30 -i "0" -c:v libx264 -an -f flv rtmp://server_ip:1935/app/unique_stream_name
Вывод
И вот как настроить HLS с Nginx. Чтобы пойти дальше, мы могли бы написать приложение на нашем любимом языке программирования для обработки аутентификации пользователей и, возможно, хранить видео на медиа -сервере. Ключевым моментом то, что наши пользователи могут транслировать видео по потоковой передаче с обычным HTTP.
Оригинал: «https://dev.to/samuyi/how-to-setup-nginx-for-hls-video-streaming-on-centos-7-3jb8»