LINUX.ORG.RU

Трансляция HLS или MPEG-DASH потока на сайт [РЕШЕНО]

 , , ,


0

1

Здравствуйте друзья! Не был уверен под какую ветку подходит мой пост, думаю эта больше всего.)))

Очень нужна помощь в осуществлении трансляции rtsp потока с камер на сайт, столько всего перепробовал — не получается вывести поток на страницу сайта на Wordpress. Нужен взгляд со стороны на все мною проделанное, буду благодарен любым советам и подсказкам!

Есть некий сайт работающий на хостинге с SSL на Wordpress, на этот сайт нужно опубликовать живую трансляцию с 4х IP камер. Перелопатив хренову тучу материала в сети понял, что есть два реальных варианта, HLS и MPEG-DASH. Причем MPEG-DASH в некоторых случаях требует перекодирования потока, а так как ПК для ретрансляции не шибко мощный, то HLS выглядит интереснее, но в целом задача запустить хоть что-то.

Для ретрансляции был установлен NGINX на свежий Linux, собран с модулем nginx-rtmp, конфиг настроен по мануалу, уточню, что раньше с NGINX дела не имел, больше использовал Apache. Так же уточню, что сервер для ретрансляции находится за натом, через Iptables были проброшены порты для http и для rtmp.

И так, все готово, все настроено! Проверка через VLC внутри сети показала, что все работает, поток запустился! Запуск из вне дался хуже, если я находясь внутри сети пытаюсь открыть поток через VLC по внешнему адресу, например http://196.96.186.86:8080/cams/stream1.m3u8, то ничего не откроется, если этот же адрес запросить снаружи, то поток запускается, я так понимаю, что проблема где-то в правилах Iptables, устранить эту проблему мне не удалось (т. к. тоже редко имею дело с iptables), но поскольку запрашивать поток будет сайт, который находится снаружи, я решил этот вопрос отложить напоследок.

Следующий этап, попытка вставить поток на сайт. Испробовав кучу разных плееров типа FV Player, Videojs, … запустить поток на сайте так и не получилось, все плееры выдают какую-то ошибку, причем некоторые говорят, что возможно формат не тот, а другие пишут, что проблема с сетью. Но VLC же нормально запускает поток! В чем может быть проблема? Случайно попал на информацию, что если сайт использует https (именно по этому я упомянул SSL в начале), то и поток должен использовать https, а у меня NGINX вообще висит даже без домена на белом IP, кто сталкивался с этим, есть ли разница по какому протоколу будет идти поток? Для проверки этой теории, я перевел весь сайт на хостинге на http, получил кучу страшных предупреждений, но сайт теперь, так сказать, на одной волне с сервером ретрансляции, все используют http. Но чуда не произошло, плееры на странице так и не показали поток, повторюсь, VLC же отлично все показывает.

ОГРОМНОЕ СПАСИБО тем, кто дочитал до этих строк! Куда двигаться? Почему при любых раскладах, будь то трансляция в HLS или MPEG-DASH, с транскодированием или нет VLC все нормально показывает, а на странице сайта одни ошибки?

Действительно ли, что протоколы веб сервера и сервера ретрансляции должны совпадать, стоит ли покупать домен, создавать сертификаты или это не поможет?

Заранее спасибо всем отозвавшимся!!!


Совершенно случайно увидел, что Firefox на Android, именно на телефоне, запустил HLS поток с сайта!! При этом на ПК в Firefox или Сhromium поток не запускается, так же поток отказался запускаться и в Chrome на телефоне, WTF?!! Наверное это позволяет снять вопрос о разности протоколов полностью и скорее всего указывает на проблемы в конфиге NGINX, вот только в чем может быть проблема…


к сожалению не разбираюсь, но

Случайно попал на информацию, что если сайт использует https (именно по этому я упомянул SSL в начале), то и поток должен использовать https

сейчас браузеры могут блокировать смешанное содержимое. Откройте инструменты разработчика в браузере на вкладке сетевых запросов. Если запрос от плеера блокируется, то это будет отображено

anonymous ()
Ответ на: комментарий от VladV

Проблемы было две. Добрые люди помогли найти ответ.

Проблема номер 1:

Разность протоколов все таки была. Если сайт работает по https, то видео поток так же должен быть по https. В моем случае это лишний головняк, так как ретрансляция видео крутится на собственном сервере, так что проблему решил созданием отдельной страницы для трансляции видео по протоколу http.

Проблема 2:

В конфиг nginx нужно добавить опцию

add_header 'Access-Control-Allow-Origin' '*';

Эта опция указывает какому домену разрешена трансляция вашего видео, * - означает любому.

Должно это выглядить вот так:

server {
    listen       80;
    server_name  localhost;        
    add_header 'Cache-Control' 'no-cache';
    add_header 'Access-Control-Allow-Origin' '*';
    add_header 'Access-Control-Expose-Headers' 'Content-Length';
    add_header 'Access-Control-Max-Age' 1728000;
    add_header 'Access-Control-Allow-Headers' 'Origin,Range,Accept-Encoding,Referer,Cache-Control';
    add_header 'Access-Control-Expose-Headers' 'Server,Content-Length,Content-Range,Date';
    add_header 'Access-Control-Allow-Methods' 'GET, HEAD, POST, OPTIONS, PUT, DELETE';
VladV ()