Для организации онлайн трансляций в реальном режиме времени, видео по запросу (vod), а также для осуществления записи видео-потоков можно использовать nginx вместе с модулем nginx-rtmp-module.
Медиа серверы
На сегодняшний день существуют несколько популярных медиа серверов, о которых вы можете подробнее почитать в одной из моих прошлых статей. Медиа серверы необходимы для создания онлайн трансляций в реальном режиме времени.
Существуют как платные, так и бесплатные медиа серверы, включающие в себя разные функции. Сегодня мы поговорим об одном бесплатном и довольно неплохом решении.
Ngnix-rtmp
Базовый функционал медиа сервера, также можно реализовать с помощью бесплатного программного обеспечения — модуля Ngnix-rtmp-module, который на данный момент поддерживает такие потоковые протоколы как RTMP и HLS.
Таким образом, с помощью Ngnix-rtmp (веб сервер Ngnix + модуль Ngnix-rtmp-module), можно организовать вещание по RTMP и HLS на устройства пользователей. Сводную таблицу протоколов и устройств, которые их поддерживают, можно посмотреть в статье Медиа серверы (Wowza, Erlyvideo, FMS) и компоненты систем видео трансляций. Также в одной из будущих своих статей я планирую сделать сравнительную таблицу функционала модуля Ngnix-rtmp-module и других медиа серверов.
Онлайн трансляция по протоколу 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