Онлайн трансляции с помощью модуля Ngnix-rtmp-module
Для организации онлайн трансляций в реальном режиме времени, видео по запросу (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 и других медиа серверов.
What is HTTP Live Streaming (HLS)?
Онлайн трансляция по протоколу HLS
- wgethttp://nginx.org/download/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
- Если все прошло без ошибок, можно приступать к настройке сервера. По умолчанию сервер устанавливается в директорию /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.
Теперь рассмотрим один пример. Мы отправляем на сервер три видео-потока:
WebRTC vs. HLS: What’s the Difference
- test1 с битрейтом 256 кбит/с,
- test2 с битрейтом 512 кбит/с,
- test3 с битрейтом 1024 кбит/с.
Наша задача, чтобы клиент, использующий протокол HLS (устройства: Mac, iPad, iPhone) мог динамически переключаться между потоками, в зависимости от качества Интернет соединения. Для этого нам необходимо в директории /usr/local/nginx/html создать файл с расширением m3u8, например playlist.m3u8, со следующим содержимым:
Просмотр трансляции
Для просмотра видео-потоков необходимо в веб-страницу сайта встроить следующий код.
[ip-адрес(nginx сервера)] — ip-адрес вашего nginx сервера.
Nginx rtmp hls windows
Краткая инструкция по созданию рестрима при помощи Nginx.
1) Скачиваем
Сам Nginx уже с модулем rtmp
WEB морда для отслеживание потоков
2) Необходимо все разархивировать
nginx-rtmp-win32-master.zip в папку C:Nginxnginx-rtmp-win32-master
nginx-rtmp-module-master.zip в папку C:Nginxnginx-rtmp-win32-masterwww2
3) Настраиваем Nginx
для этого необходимо отредактировать C:Nginxnginx-rtmp-win32-masterconfnginx.conf
error_log logs/error.log debug;
location /hls
alias temp/hls;
expires -1;
>
в секции rtmp:
rtmp
application YOUTUBE
application YOUTUBEBACKUP
application TWITCH
application CYBERGAME
с начало создаем сервис на который мы будем стриметь и который будет рестриметь на другие источники «application myapp
где самое главное это push rtmp://rtmp сервер/ключ трансляции;
Должно быть все понятно, тут нечего сложного.
в секции http:
location /hls
alias temp/hls;
expires -1;
>
тут кому как удобно, можно добавить новые настройки или заменить старые, я оставил старые на всякий случай и добавил дополнительную секцию
server
location /stat.xsl
# rtmp control
location /control
error_page 500 502 503 504 /50x.html;
location = /50x.html
>
где самое главное поменять порт, я поставил «listen 8081;»
пусть к корневому каталогу «root www2;» где указывается папка создаваемая в самом начале «nginx-rtmp-module-master.zip в папку C:Nginxnginx-rtmp-win32-masterwww2»
остальное можно не трогать.
4) Проверяем настройки
запускаем командную строку, для этого необходимо нажать на «Пуск» и в поле поиска вбить «cmd», или «Пуск/Все программы/Стандартные/Командная строка» после чего появляется окно.
Далее переходим в каталог с Nginx, для этого набираем «cd Путь», в моем случае cd C:Nginxnginx-rtmp-win32-master
Далее пишем nginx -t и должны увидеть следующее
nginx: the configuration file C:nginx/conf/nginx.conf syntax is ok
nginx: configuration file C:nginx/conf/nginx.conf test is successful
Если выводит нечто другое — вчитываемся в ошибку, пытаемся исправить (обычно это не поставленная точка с запятой или забытая скобка).
Если все верно то запускаем nginx: набираем nginx, жмем Enter. Командная строка зависнет — это нормально, значит все нормально запустилось и что бы точно убедится открываем браузер и запускаем http://localhost:8081/stat , должны увидеть табличку
Теперь можно остановить nginx, для этого запускаем опять командную строку, так же переходим в папку с Nginx, «cd C:Nginxnginx-rtmp-win32-master» и что бы сотановить сервер нам надо набрать nginx -s stop. Или просто некорректно вырубить из диспетчера задач процесс.
5) Настраиваем стрим-программу.
Для примера покажу настройки OBS.
Тут все совсем просто: нужно указать в качестве сервера наш компьютер.
Для этого лезем в настройки и в настройках Трансляции выбираем Сервер вещания «Custom» и в FMS URL: rtmp://localhost/myapp
где «myapp» это название которое мы указывали в настройках nginx в секции rtmp.
Все теперь готово, запускаем сервер Nginx и запускаем трансляцию, о состоянии рестримов можно отслеживать через WEB морду http://localhost:8081/stat
есть еще WEB морда изначальная http://localhost:8080/ , но я в ней не разбирался и мне она не нужна была.
6) Для удобства запуска и остановки сервера
Для этого создадим 3 bat файлика
nginx-start.bat — для старта
nginx-reload.bat — для применения изменения конфигов
nginx-stop.bat — для остановки
При этом, nginx-start.bat можно положить в автозагрузку.
где «set root=C:Nginxnginx-rtmp-win32-master» пусть до Nginx сервера, куда мы все разархивировали.
7) Безопасность
Теперь когда все работает, надо подумать о безопасности, что бы не кто не мог стриметь кроме вас на ваш сервер.
Для этого создадим белые IP адреса, с которых можно стриметь
для этого в секции в настройках Nginx (C:Nginxnginx-rtmp-win32-masterconfnginx.conf) в секции rtmp нам нужно кое что дописать.
В каждом application нудно добавить следующие настройки:
allow publish 127.0.0.1; # локальный адрес
allow publish 192.168.1.13; # ip адрес ПК с которого будет идти стрим
allow publish 83.153.39.122; # адрес с которого будет идти стрим в не дома
deny publish all; # Запретить все остальные
вот так выглядят полностью мои настройки C:Nginxnginx-rtmp-win32-masterconfnginx.conf
error_log logs/error.log debug;
rtmp
application YOUTUBE
application YOUTUBEBACKUP
application TWITCH
application CYBERGAME
location /hls
alias temp/hls;
expires -1;
>
>
server
location /stat.xsl
# rtmp control
location /control
error_page 500 502 503 504 /50x.html;
location = /50x.html
>
В общем на это все.
Это моя первая статья, извините если есть какие то недочеты, надеюсь эта статья вам поможет.
Краткая инструкция по созданию рестрима при помощи Nginx.
1) Скачиваем
Сам Nginx уже с модулем rtmp
WEB морда для отслеживание потоков
2) Необходимо все разархивировать
nginx-rtmp-win32-master.zip в папку C:Nginxnginx-rtmp-win32-master
nginx-rtmp-module-master.zip в папку C:Nginxnginx-rtmp-win32-masterwww2
3) Настраиваем Nginx
для этого необходимо отредактировать C:Nginxnginx-rtmp-win32-masterconfnginx.conf
error_log logs/error.log debug;
location /hls
alias temp/hls;
expires -1;
>
в секции rtmp:
rtmp
application YOUTUBE
application YOUTUBEBACKUP
application TWITCH
application CYBERGAME
с начало создаем сервис на который мы будем стриметь и который будет рестриметь на другие источники «application myapp
где самое главное это push rtmp://rtmp сервер/ключ трансляции;
Должно быть все понятно, тут нечего сложного.
в секции http:
location /hls
alias temp/hls;
expires -1;
>
тут кому как удобно, можно добавить новые настройки или заменить старые, я оставил старые на всякий случай и добавил дополнительную секцию
server
location /stat.xsl
# rtmp control
location /control
error_page 500 502 503 504 /50x.html;
location = /50x.html
>
где самое главное поменять порт, я поставил «listen 8081;»
пусть к корневому каталогу «root www2;» где указывается папка создаваемая в самом начале «nginx-rtmp-module-master.zip в папку C:Nginxnginx-rtmp-win32-masterwww2»
остальное можно не трогать.
4) Проверяем настройки
запускаем командную строку, для этого необходимо нажать на «Пуск» и в поле поиска вбить «cmd», или «Пуск/Все программы/Стандартные/Командная строка» после чего появляется окно.
Далее переходим в каталог с Nginx, для этого набираем «cd Путь», в моем случае cd C:Nginxnginx-rtmp-win32-master
Далее пишем nginx -t и должны увидеть следующее
nginx: the configuration file C:nginx/conf/nginx.conf syntax is ok
nginx: configuration file C:nginx/conf/nginx.conf test is successful
Если выводит нечто другое — вчитываемся в ошибку, пытаемся исправить (обычно это не поставленная точка с запятой или забытая скобка).
Если все верно то запускаем nginx: набираем nginx, жмем Enter. Командная строка зависнет — это нормально, значит все нормально запустилось и что бы точно убедится открываем браузер и запускаем http://localhost:8081/stat , должны увидеть табличку
Теперь можно остановить nginx, для этого запускаем опять командную строку, так же переходим в папку с Nginx, «cd C:Nginxnginx-rtmp-win32-master» и что бы сотановить сервер нам надо набрать nginx -s stop. Или просто некорректно вырубить из диспетчера задач процесс.
5) Настраиваем стрим-программу.
Для примера покажу настройки OBS.
Тут все совсем просто: нужно указать в качестве сервера наш компьютер.
Для этого лезем в настройки и в настройках Трансляции выбираем Сервер вещания «Custom» и в FMS URL: rtmp://localhost/myapp
где «myapp» это название которое мы указывали в настройках nginx в секции rtmp.
Все теперь готово, запускаем сервер Nginx и запускаем трансляцию, о состоянии рестримов можно отслеживать через WEB морду http://localhost:8081/stat
есть еще WEB морда изначальная http://localhost:8080/ , но я в ней не разбирался и мне она не нужна была.
6) Для удобства запуска и остановки сервера
Для этого создадим 3 bat файлика
nginx-start.bat — для старта
nginx-reload.bat — для применения изменения конфигов
nginx-stop.bat — для остановки
При этом, nginx-start.bat можно положить в автозагрузку.
где «set root=C:Nginxnginx-rtmp-win32-master» пусть до Nginx сервера, куда мы все разархивировали.
7) Безопасность
Теперь когда все работает, надо подумать о безопасности, что бы не кто не мог стриметь кроме вас на ваш сервер.
Для этого создадим белые IP адреса, с которых можно стриметь
для этого в секции в настройках Nginx (C:Nginxnginx-rtmp-win32-masterconfnginx.conf) в секции rtmp нам нужно кое что дописать.
В каждом application нудно добавить следующие настройки:
allow publish 127.0.0.1; # локальный адрес
allow publish 192.168.1.13; # ip адрес ПК с которого будет идти стрим
allow publish 83.153.39.122; # адрес с которого будет идти стрим в не дома
deny publish all; # Запретить все остальные
вот так выглядят полностью мои настройки C:Nginxnginx-rtmp-win32-masterconfnginx.conf
error_log logs/error.log debug;
rtmp
application YOUTUBE
application YOUTUBEBACKUP
application TWITCH
application CYBERGAME
location /hls
alias temp/hls;
expires -1;
>
>
server
location /stat.xsl
# rtmp control
location /control
error_page 500 502 503 504 /50x.html;
location = /50x.html
>
В общем на это все.
Это моя первая статья, извините если есть какие то недочеты, надеюсь эта статья вам поможет.
Источник: onecomp.ru
Запускаем свой RTMP сервер для стриминга
Иногда YouTube или Twitch не подходят как стриминговая платформа — скажем, если вы пилите портал с вебинарами или контентом 18+, нарушаете авторские права или хотите максимально отгородить свою трансляцию от остального интернета. У них есть много альтернатив как в виде сервисов (те же минусы, недостаток контроля и непредсказуемая политика), так и в виде self-hosted решений. Проблема опенсорсных стриминговых проектов в том, что все они начинаются с крохотной связки из пары технологий, а затем отчаянно пытаются вырасти в сервис, добавляя сложные веб-интерфейсы, чаты, библиотеки стримов и в конечном счёте отдаляясь от исходной цели: дать миру инструмент, который по понятному мануалу позволит запустить свой сервер трансляций. Что с ним будет дальше, в какие системы будет встроена эта картинка — это только ваше личное дело, а самописный аналог твича с лагающими и отваливающимися сервисами и периодически валящимся билдом не нужен никому, кроме его разработчиков. Поэтому в этой статье мы разберём минимальную цепочку действий для запуска своего RTMP-сервера с плеером.
Структура
Здесь всё просто: за приём и кодировку потока из OBS отвечает RTMP модуль Nginx’a. Сконвертированный поток он выставляет наружу, где его подбирает HLS (HTTP Live Streaming) клиент в браузере и выдаёт уже готовую картинку в плеере.
Установка
При выборе сервера упор стоит обратить внимание на процессор. Я взял эпичный сервер с двумя ядрами и пробовал наращивать битрейт, чтобы определить граничные условия — на 11-12k нагрузка стала болтаться в районе 96-100%, так что для обработки действительно тяжёлого потока лучше взять мощности с запасом:
Нам понадобится Docker для установки контейнеризованного nginx-rtmp с FFmpeg и любой веб-сервер (включая тот же Nginx) для раздачи страницы с плеером. Я ставил на Ubuntu 20.04:
Запускаем контейнер c проброшенными портами:
docker run -d -p 1935:1935 -p 8080:80 —rm alfg/nginx-rtmp
Затем в OBS на клиенте указываем наш сервер с произвольным ключом потока (ключ = индентификатор стрима):
Теперь можно запустить трансляцию и удостовериться что поток пошёл, например, в демке hls.js или в любом другом плеере HLS.
Осталось настроить сервер. В nginx.conf укажите путь до вашей страницы:
location / < root /var/www/; index index.htm index.html; autoindex on; >
sudo nginx -s reload
В index.html просто скопипастим код из примера hls.js:
Теперь на 8080 порту нашего сервера раздаётся жутковатый мультик про зайца:
Остаётся только изменить путь на http://server_ip:8080/live/stream-key.m3u8 и идти смотреть трансляцию!
Нагрузку в реальном времени можно проверять командой docker stats:
Заключение
Размещая стриминговый клиент на своём сервере важно помнить, что весь трафик со всех зрителей будет проходить прямо через него — значит, если одновременный онлайн у вас будет больше 1-2 человек, стоит изучать способы распределения нагрузки (ведь транскодирвоание ощутимо давит и на CPU). Для запуска полноценного кластера есть энтерпрайзное (но опенсорсное) решение — SRS aka Simple Realtime Server (GitHub, 10k звёзд, огромная вики, сложная архитектура). В него стоит вникать, если вам стримы нужны для решения настоящих задач, а не чтобы поиграться с приватным видеопотоком.
На правах рекламы
Серверы в аренду для любых задач — это про наши эпичные! Все серверы защищены от DDoS-атак, автоматическая установка множества ОС или использование своего образа ISO. Лучше один раз попробовать!
Источник: temofeev.ru
Видеонаблюдение через Youtube по протоколу RTMP
Облачные сервисы видеонаблюдения значительно упрощают задачу охранного мониторинга. Но иногда по каким-либо причинам (финансовым или техническим) пользователи интересуются альтернативными способами для видеонаблюдения по интернет. И одни из самых простых и эффективных способов – это просмотр событий онлайн через Youtube. Для трансляции видеопотока с IP камеры Вам понадобится – аккаунт Youtube и IP камера с поддержкой протокола RTMP.
Трансляция осуществляется на сервер Youtube, VK или FB и за просмотр ничего платить не нужно, для многих пользователей это большой плюс. Разрешить доступ к каналу трансляции можно на свое усмотрение – только одному пользователю или ограниченному кругу лиц, например:
- Застройщик размещает онлайн-видеотрансляцию процесса строительства, чтобы заказчики были спокойны.
- Можно показывать загруженность и очереди в сфере услуг: Автомойки; Прачечные; Склады и т.д.
- Видеотрансляции с выставок.
- Загруженность дорог.
Свободные места на парковках, пляжах и т.д. и т.п. Причем, пользователи могу посмотреть непосредственно вблизи от парковки с своего смартфона
В настоящее время есть много IP камер с поддержкой протокола RTMP (Real Time Messaging Protocol) по которому осуществляется передача потокового видео и аудиопотока с видеокамеры на интернет канал. Серверная часть RTMP реализована авторами протокола Adobe Inc, во Flash Media Server.
Как осуществлять трансляцию с IP камеры на свой Youtube канал
1. Перейдите по ссылке: https://www.youtube.com/my_live_events
2. Нажмите «Создать прямую трансляцию».
3. Заполните название трансляции, установите время начала, «Тип трансляции» установите в значении «Особая».
4. Перейдите в закладку «Расширенные настройки».
5. В пункте «Подстройка трансляции» установите значение «Вести эфир с наименьшей задержкой» и нажмите «Создать мероприятие».
6. Выберите требуемый битрейт, в настройках видеокодера выберите «Другие видеокодеры», запомните значения полей «URL основного сервера» и «Название потока», нажмите «Сохранить изменения».
7. Перейдите к веб-интерфейсу камеры. В настройках откройте страницу «Расширенная конфигурация» – «Сеть» – «RTMP» (или «Настройки» – «Сеть» – «Дополнительно» – «RTMP») и установите флажок «Вкл.» в поле URL пропишите адрес сервера YouTube из предыдущего пункта в виде «URL основного сервера»/»Название потока» (например: «rtmp://a.rtmp.youtube.com/live2/a623-pm8g-u1m4-fsf9»), нажмте кнопку «Сохр.»
8. Вернитесь к настройкам видеотрансляции и перейдите в «Панель управления трансляциями».
Источник: alians-market.ru