Рубрики
Uncategorized

Как настроить Nginx для потокового видео HLS на CentOS 7

Как жить видео с Nginx. Tagged с Linux, DevOps, WebDev.

Введение

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»