LINUX.ORG.RU

Рекомендации по созданию стримов на веб-сайте

 , ,


6

2

Картинка для привлечения внимания.

Новый год всё ближе, хотелось бы устроить новогоднюю видеоконференцию с моими воображаемыми^W друзьями, используя конечно же, опен сорц!

На самом деле ничего сложного, используя nginx-rtmp-module удалось создать HLS (Apple HTTP Live Stream), который как заверяют, будет работать на любых устройствах.

rtmp {
  server {
    listen 1935;

    chunk_size 4096;

    application hls {
      live on;

      hls on;
      hls_path /var/www/hls;

      record off;

      allow publish 127.0.0.0/8;
      deny publish all;

      allow play all;
    }
}
server {
  listen 80;
  server localhost;

  root /var/www;

  location /hls {
    types {
      application/vnd.apple.mpegurl m3u8;
      video/mp2t ts;
    }

    add_header Cache-Control no-cache;
  }
}

Вот такая загогулина позволяет получать урлы в формате https://spfng.com/hls/live.m3u8, теперь запускаем стрим...

Стримить можно что угодно, любой источник, веб-камера или просто видео. Я взял видео.

# ffmpeg -re -i /media/The\ Simpsons\ s27e07.mp4 -c copy -f flv rtmp://spfng.com/hls/live

На веб-страничку прикрутил HTML5-плеер с реализацией video.js, — никакого богомерзкого Flash! И да, оно даже заработало. Результат вы видите на скриншоте.

По итогам, что потребуется: 1) nginx + nginx-rtmp-module 2) ffmpeg 3) video.js HTML5-плеер 4) любой источник видео, будь то веб-камера или кинцо 5) широкий канал чтобы стримить для большого круга друзей.

Вопрос!

А какие инструменты для реализации потокового вещания использовали вы? Что можно сделать правильнее или ещё лучше? Сталкиваюсь с этим первый раз, поэтому возможно что-то сделал не так.

★★★★★

Угадал ТС по первому предложению (ссылку не смотрел).

Канал-то у тебя выдержит? То что ты на своем локалхосте погонял это еще ничего не значит.

alozovskoy ★★★★★ ()

А ну-ка, поподробней! Неужели html5 научился играть потоковое видео? Если да, то ведь мне не нужно будет больше велосипедить с идиотскими mjpeg'ами и вебсокетами! Можно будет сразу стримить видео, да еще и сжимать налету...

Давай ссылку на инструкцию! Правда, nginx мне не нравится своей ограниченностью, я апачем пользуюсь. Но в некоторых случаях можно и nginx запилить. Только скажи мне, как это сделать!!!!1111

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Eddy_Em

узбагойся. :)

посмотреть пример можешь здесь: https://spfng.com/live/

посмотри исходный код странички, — небольшой кусок кода и три js файлика: video.js, video-media-sources.js, video-hls.js. https://github.com/videojs/videojs-contrib-hls

вся остальная инструкция уже вся написана в первом посте.

Spoofing ★★★★★ ()
Ответ на: комментарий от Eddy_Em

УМВР, последний Firefox 42.

HLS это типа популярный стандарт для стриминга у Apple, работает на всех устройствах Apple и судя по гуглу на Android тоже.

Для обратной совместимости можно использовать флеш. Но только для совместимости. HTML5 уже готов.

Spoofing ★★★★★ ()

Спасибо за тему. Мне пригодится. Руки не доходили самому разобраться с этим делом.

Psych218 ★★★★★ ()
Ответ на: комментарий от Spoofing

УМННР, последний firefox 38.4.0.

Apple

Ты сменил ориентацию?

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от deep-purple

У меня быдлофлеши в огнелисе нет (т.к. огнелис — мой основной браузер, не хватало еще, чтобы какой-нибудь гад у меня пароли с paypal стырил), так что и не предлагает. Даже скрипты временно разрешил: висят какие-то менюшки, но нифига не работает, окромя фулскрина. Видео не кажет.

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Spoofing

В хромоногой быдлоподелке какой-то идиотский мультик начало было показывать. Щелкнул паузу и настройки фона, ничего не изменилось (фон так и остался белый), а идиотский мультик больше запустить не получилось.

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Harald

Чтение евангелия «Как обходиться без тян» от сторожа со справкой.

Deleted ()
Ответ на: комментарий от dk-

Да я уже понял, что это — мухлеж. Та же фигня, что и mjpeg.

Eddy_Em ☆☆☆☆☆ ()

На андроиде в браузере будет работать с проблемами, а то и вообще не будет. Ну как минимум нужен кодек h264 с baseline profile.

JN ()

На андрюхе хромой 47.что-то-там работает. А фраерфокс 43.0b10 нет.

yacuken ★★★★ ()

Делал на всем, на этом хлс(он не риалтайм - минус), на webrtc(самый верный способ для небольших приватных конференций и сервера не нужно), на rtmp - пожалуй самый удачный способ real-time трансляции через сервер, но нужен флэш, это единственный минус и плюс одновременно

gobot ★★★★ ()

Я использовал FMS в далеком 2004м. Всё работало отлично. Писал сам плеер. Аудио и видео было по udp rtmp протоколу от адоби. Сейчас бы я не стал этим всем заморачиваться ради 3-х человек. Проще по скайпу или перископу потрепаться.

menangen ★★★★★ ()

Когда-то делал так.

С этой же связкой как-то тестировал плеер THEOplayer от OpenTelly - очень понравилось. HLS поток игрался одинакого хорошо на всех доступных мне ОС (Ubuntu, Blackberry, Android, OS X, iOS, Windows) во всех доступных браузерах.

silw ★★★★★ ()
Ответ на: комментарий от gobot

Фигово. Интересно, когда же нацонец-то браузеры научатся в html5 показывать видеотрансляции? Доколе будет этот цирк с mjpeg продолжаться?

Eddy_Em ☆☆☆☆☆ ()

Посмотрел немного симпсонов, где пародировали фильм «Игра Эндера» в переводе от кетчуп-тв.

Но там нужен флеш, да.

shrub ★★★★★ ()

Рекомендую: не создавай.

t184256 ★★★★★ ()
Ответ на: комментарий от Eddy_Em

Умеют уже давно по webrtc(sip), только вот по серверная часть хромает, поэтому пока везде флэш и rtmp, а на мобилках hls

gobot ★★★★ ()
Ответ на: комментарий от gobot

Тупо нужна трансляция видео реального времени (сотня миллисекунд рассинхронизации сгодится). Видео снимается с камеры, обрабатывается и выплевывается.

Пока что только 2 рабочих варианта: (медленный) на вебсокетах и (относительно быстрый) на мджпегах.

Eddy_Em ☆☆☆☆☆ ()

Не вижу связи между видеоконференцией и потоковым вещанием. Это вообще разные схемы распределения и обработки данных. Для видеоконференций можно VoIP-решения заюзать (сам тестил только экспериментальную ветку в FreeSWITCH почти год назад), либо webrtc-решения.

А тут какое-то HLS, nginx-rtmp-module, ffmpeg...

Andrey_Utkin ★★ ()
Ответ на: комментарий от gobot

Обычная ПЗС-видеокамера с ЭОПом (иногда, когда денег дофига, применяется EM-CCD). Частота кадров: от 1 за ~30с до ~5 в секунду (смотря какая яркость у звезд фона). Выполняется предварительная обработка (обычное улучшение картинки + вычисление смещения относительно предыдущего кадра), в shm кладется значение смещения, а по запросу через сокет отдается картинка (по запросу — чтобы обеспечить псевдореальное время).

Все элементарно. Т.е. один демон занимается получением и обработкой изображений, он же выплевывает эти жопеги для веб-клиентов. Другой демон управляет локальным корректором по этим смещениям из shm (либо можно через сокеты данные получать, пофиг).

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Eddy_Em

А что не устраивает слайды смотреть? Как я вижу решение задачи с вещанием: твой демон подает на вход ffmpeg жпеги, а на выходе получаем rtmp поток, который идет на nginx. На клиенте нужен простецкий плеер на флэше. Если хочешь все чинно по html5, есть вариант с kurento, websocket и webrtc - это посложнее будет, зато работать будет во всех браузерах, на мобилках и без флеш

gobot ★★★★ ()
Ответ на: комментарий от gobot

плеер на флэше

В топку дерьмо!

вариант с kurento, websocket и webrtc

mjpeg'и шустрей вебсокетов, а что за хрень эта «курента» — без понятия. Вебртц годится только для трансляции с вебкамер напрямую.

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Eddy_Em

mjpeg'и шустрей вебсокетов

Причем тут вебсокеты? На них реализован только сигнальный сервер, трафик идет фактически по SIP

а что за хрень эта «курента»

Это как раз и есть сервер, с которого будет раздаваться транса, он умеет протокол webrtc

Вебртц годится только для трансляции с вебкамер напрямую

Нет не так, смотри выше

В твоем случае естественно не будет выигрыша, т.к. mjpeg это чередование картинок. Вот и смотри слайды, о каком «Тупо нужна трансляция видео реального времени» может быть речь, если твоя камера кроме картинок ничего не выдает

gobot ★★★★ ()
Ответ на: комментарий от gobot

Я делал и передачу кадров через вебсокеты.

о каком «Тупо нужна трансляция видео реального времени» может быть речь, если твоя камера кроме картинок ничего не выдает

А что, какие-то камеры выдают что-то кроме картинок? Ну, а для уменьшения трафика можно было бы хоть mpeg'ом жать ряд картинок, скажем, с запозданием на 100мс (понятно, это имеет смысл лишь если скорость выше 10fps, что бывает крайне редко).

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Eddy_Em

Камера умеет работать с вебсокетами? Она программируемая? Например ип-камеры некоторые поддерживают rtp

gobot ★★★★ ()
Ответ на: комментарий от gobot

При чем здесь камера? С камеры кадры забираются демоном, использующим ffmpeg (раньше я напрямую v4l2 юзал, но задолбался перепиливать под новые модели).

ип-камеры

Где ты видел EM-CCD в формате «ип-камеры»? Это ж вообще изврат высшего уровня!

В любом случае, прежде чем кадр отдать на веб-морду, он обрабатывается: фильтрация (медианная, вейвлетами или еще как), улучшение краев, эквализация или подгонка гистограммы.... Заодно из этого кадра вычисляются смещения, чтобы автогид правильно отрабатывал.

Кому нафиг может понадобиться тупо необработанное видео с камеры пинать в веб?

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Eddy_Em

Я не могу понять какая связь между mjpeg c 5 кадрами в сек и realtime вещанием? Зачем тебе на камере, которая максимум может 5fps, делать трансляцию? Оставь как есть, смотри слайды. Или я чего то недопонял...

gobot ★★★★ ()
Ответ на: комментарий от gobot

Камера может до 30fps, но выхлоп зависит от освещенности. Если ярче какой-нибудь 20 звездной величины ничего в поле нет, нужно поднакопить в течение несколько большего времени...

Оставь как есть, смотри слайды

Вот и смотрю, пока нет никаких реальных возможностей для нормального real-time видео в хытымле5.

Eddy_Em ☆☆☆☆☆ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.