«

»

Сен 05 2013

Распечатать Запись

Онлайн трансляции с помощью модуля Ngnix-rtmp-module

nginx-rtmp-module

 Для организации онлайн трансляций в реальном режиме времени, видео по запросу (vod),  а также для осуществления записи видео-потоков можно использовать nginx вместе с модулем nginx-rtmp-module.

Медиа серверы

 На сегодняшний день существуют несколько популярных медиа серверов, о которых вы можете подробнее почитать в одной из моих прошлых статей. Медиа серверы необходимы для создания онлайн трансляций в реальном режиме времени.

 Существуют как платные, так и бесплатные медиа серверы, включающие в себя разные функции. Сегодня мы поговорим об одном бесплатном и довольно неплохом решении.

Ngnix-rtmp

nginx-rtmp

 Базовый функционал медиа сервера, также можно реализовать с помощью бесплатного программного обеспечения — модуля Ngnix-rtmp-module, который на данный момент поддерживает такие потоковые протоколы как RTMP и HLS.

 Таким образом, с помощью Ngnix-rtmp (веб сервер Ngnix + модуль Ngnix-rtmp-module), можно организовать вещание по RTMP и HLS на устройства пользователей. Сводную таблицу протоколов и устройств, которые их поддерживают, можно посмотреть в статье Медиа серверы (Wowza, Erlyvideo, FMS) и компоненты систем видео трансляций. Также в одной из будущих своих статей я планирую сделать сравнительную таблицу функционала модуля Ngnix-rtmp-module и других медиа серверов.

Онлайн трансляция по протоколу HLS

hls Сегодня мы рассмотрим, как с помощью модуля Nginx-rtmp-module организовать простейшую трансляцию с адаптивным битрейтом по протоколу HLS. В первую очередь нам необходимо скачать исходные коды веб-сервера Nginx с официального сайта. Все команды, представленные ниже исполнялись в Linux.

  • wget http://nginx.org/download/nginx-1.4.1.tar.gz

  Извлечь файлы из архива.

  •  tar -zxvf nginx-1.4.1.tar.gz

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

  •  wget https://github.com/arut/nginx-rtmp-module/archive/master.zip

  Теперь нам необходимо скомпилировать nginx с модулем nginx-rtmp-module, для этого при конфигурации nginx  нужно указать в опции  —add-module расположение исходных файлов nginx-rtmp-module, а также необходимо указать дополнительную опцию with-http_ssl_module.

 ./configure —add-module=/home/nginx/nginx-rtmp-module-master —with-http_ssl_module

 make

 make install

  • Если все прошло без ошибок, можно приступать к настройке сервера. По умолчанию сервер устанавливается в директорию  /usr/local/nginx. Конфигурационный файл  сервера nginx.conf, находится в директории /usr/local/nginx/conf. Рассмотрим подробнее секцию rtmp:server  конфигурационного файла.  Параметр  listen указывает порт на котором сервер  будет принимать rtmp запросы.
  • Далее мы открываем секцию для настройки приложения testlive.  Здесь мы указываем, что у нас live-поток — параметр live on, включаем поддержку протокола hls для этого приложения – параметр hls on.
  • С помощью параметра hls_path мы задаем директорию в которой буду располагаться чанки (кусочки) потока. Для того чтобы чанки (кусочки) для каждого видео потока располагались в  отдельной директории необходимо подключить директиву hls_nested on.
  • Далее с помощью параметра allow publish мы разрешаем публиковать потоки с  своего компьютера, а с помощью параметра deny publish all запрещаем  всем остальным публиковать видео.
  • Теперь рассмотрим секцию http:server. В параметре  listen необходимо указать на коком порту сервер будет принимать http запросы. Мы указываем порт 8080. И из примера конфигурационного файла перенести секцию http:server:location /hlsПосмотреть более подробную информацию по всем директивам конфигурационного файла можно по адресу: https://github.com/arut/nginx-rtmp-module/wiki/Directives.
  • Настало время запустить сервер. Для этого необходимо перейти в директорию /usr/local/nginx/bin и выполнить команду ./nginx.

 Теперь рассмотрим один пример. Мы отправляем на сервер три видео-потока:

  • test1 с битрейтом 256 кбит/с,
  • test2 с битрейтом 512 кбит/с,
  • test3 с битрейтом 1024 кбит/с.

 Наша задача, чтобы клиент, использующий протокол HLS (устройства: Mac, iPad, iPhone) мог динамически переключаться между потоками, в зависимости от качества Интернет соединения. Для этого нам необходимо в директории /usr/local/nginx/html создать файл с расширением m3u8, например playlist.m3u8, со следующим содержимым:

#EXTM3U

#EXT-X-VERSION:3

#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=256000,RESOLUTION=640×480

hls/test1/index.m3u8

#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=512000,RESOLUTION=640×480

hls/test2/index.m3u8

#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1024000,RESOLUTION=640×480

hls/test3/index.m3u8

Просмотр трансляции

  Для просмотра видео-потоков необходимо в веб-страницу сайта встроить следующий код.

[ip-адрес(nginx сервера)] — ip-адрес вашего nginx сервера.

[название плейлиста] — название файла, созданного в предыдущем пункте (playlist.m3u8).

 <video controls preload  autoplay width=»640″ height=»360″ src=»http://[ip-адрес(nginx сервера)]:8080/[название плейлиста]» ></video>

 Ниже, приведен пример простейшего конфигурационного файла nginx.conf.

worker_processes  1;

rtmp {

      server {

                  listen 1935;

                  application testlive {

                        live on;

                        hls on;

                        hls_path /tmp/hls;

                        hls_nested on;

                        allow publish 10.10.146.148;

                        deny publish all;

                  }

      }

}

http {

      server {

                  listen       8080;

                  server_name  rtmp_test;

                  charset utf-8;

                  location / {

                        root   html;

                        index  index.html index.htm;

                  }    

                  location /hls {

                        types {

                              application/vnd.apple.mpegurl m3u8;

                              }

                        alias /tmp/hls;

                  }

      }

Заключение

  Эта статья была написана и опубликована совместно c моим коллегой Евгением Петровым. Мы используем данный модуль (Ngnix-rtmp) в разных проектах. Если у кого-то появятся вопросы по Ngnix-rtmp, Wowza серверу, пишите. Если вам нужно что-то настроить или получить консультацию по медиа-серверам и мультимедийным системам, также можете обращаться ко мне и нашей команде через форму контактов.

 Приглашаю подписаться на новости моей публичной страницы ВКонтакте, ее адрес http://vk.com/itmultimedia . Буду рад видеть Вас в своих подписчиках!

Всего хорошего!


Комментарии:

1 ping

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>