Никак не могу найти простой пример для лайв стриминга в HTML5 video / Chrome, устал читать разные противоречивые статьи по теме...
Нужно что-то типа описанного в этой теме http://rsdn.org/forum/media/4421649
Задача:
Есть C++ приложение, генерирует raw video frames. Есть Chromium-based JavaScript GUI, в котором надо отображать видео.
Надо:
— подобрать тулзу для стриминга из CPP (FFMPEG?)
— настроить отображение лайв-стрима в HTML5 в Chrome.
Так и не понял, что может стандартный HTML5 video тэг в Chrome (файлики проигрывать — это понятно, но нужен именно лайв-стрим, а-ля веб-камера). HLS, MPEG-DASH и прочие RTSP/RTP из там не работают без специальных плейеров.
Знаний в области видео почти 0, поэтому для начала вообще найти бы любой простой пример лайв-стриминга (например с веб-камеры) на HTML5 video в Chrome. Если без дополнительных плейеров типа video.js не обойтись — хотелось бы нормальный пример... Ну и вообще, буду благодарен за любой совет по теме
Здравствуйте, Faland, Вы писали:
F>Всем привет!
F>Так и не понял, что может стандартный HTML5 video тэг в Chrome (файлики проигрывать — это понятно, но нужен именно лайв-стрим, а-ля веб-камера). HLS, MPEG-DASH и прочие RTSP/RTP из там не работают без специальных плейеров.
F>Знаний в области видео почти 0, поэтому для начала вообще найти бы любой простой пример лайв-стриминга (например с веб-камеры) на HTML5 video в Chrome. Если без дополнительных плейеров типа video.js не обойтись — хотелось бы нормальный пример... Ну и вообще, буду благодарен за любой совет по теме
Посмотри на HLS или DASH, мы используем для аудио, но большинство людей используют для видео.
Нюансов достаточно много, в зависимости от целевых браузеров, но в принципе работает. https://github.com/video-dev/hls.js/
Здравствуйте, Faland, Вы писали:
F>Так и не понял, что может стандартный HTML5 video тэг в Chrome (файлики проигрывать — это понятно, но нужен именно лайв-стрим, а-ля веб-камера). HLS, MPEG-DASH и прочие RTSP/RTP из там не работают без специальных плейеров.
Скорее тебе нужен WebRTC. На сколько мне известно есть готовые C++ библиотеки для поддержки на стороне сервера. Одна из них от google, по-моему.
Выхлоп (аудио, видео и плейлисты) при этом должны класться в папку, которая настроена в веб-сервере. При этом нужно убедиться, что адрес доступен из того места, откуда открывается страница с плейером. Можно, например, просто в браузере попробовать перейти по ссылке вида http://myserver.com/streaming/event123/playlist.m3u8.
В каких-то случаях (в зависимости от того, откуда вещается и где проигрывается) может потребоваться включить CORS (cross origin requests).
Здравствуйте, DiPaolo, Вы писали:
DP>Если использовать HLS. DP>Необходимо настроить вещание в соответствии с форматами, поддерживаемыми в браузере. Для этого можно использовать тот же FFmpeg. Список браузеров и поддерживаемых форматов можно посмотреть здесь https://www.wowza.com/docs/how-to-play-video-using-the-html5-video-tag.
DP>Выхлоп (аудио, видео и плейлисты) при этом должны класться в папку, которая настроена в веб-сервере. При этом нужно убедиться, что адрес доступен из того места, откуда открывается страница с плейером. Можно, например, просто в браузере попробовать перейти по ссылке вида http://myserver.com/streaming/event123/playlist.m3u8.
DP>В каких-то случаях (в зависимости от того, откуда вещается и где проигрывается) может потребоваться включить CORS (cross origin requests).
DP>Что можно сделать для теста: DP>В первую очередь, можно попробовать проиграть общедоступный стрим. Список есть тут https://bitmovin.com/mpeg-dash-hls-examples-sample-streams/. DP>Потом можно запустить свое вещание с помощью консольных FFmpeg-утилит (https://ffmpeg.org/ffmpeg-formats.html#hls-2).
DP>Что касается DASH
DP>Тут нужен отдельный плейер. Рекомендую "референсный" DASH-IF player (https://github.com/Dash-Industry-Forum/dash.js/) — можно легко встроить себе на страницу.
DP>Плюс ко всему, в случае отсутствия проигрывания полезно посмотреть консольные логи в девелоперской консоли в браузере (F12).
Пробовал как раз MPEG-DASH + DASH-IF, близко к тому что мне нужно, но для этого приходится веб-сервер поднимать. Хотелось бы чего-то минимально интрузивного, чтоб по дефолту работало просто на локальной машине. Cтриминг через FFMPEG еще ладно, но поднимать еще и веб-сервер на машине клиента... Как-то уж совсем громоздко получается, учитывая что это все по сути второстепенная функциональность для продукта.
Попробую все же WebRTC, тем более что (в перспективе) задержка минимальная должна быть.
F>Пробовал как раз MPEG-DASH + DASH-IF, близко к тому что мне нужно, но для этого приходится веб-сервер поднимать. Хотелось бы чего-то минимально интрузивного, чтоб по дефолту работало просто на локальной машине. Cтриминг через FFMPEG еще ладно, но поднимать еще и веб-сервер на машине клиента... Как-то уж совсем громоздко получается, учитывая что это все по сути второстепенная функциональность для продукта. F>Попробую все же WebRTC, тем более что (в перспективе) задержка минимальная должна быть.
Ремарка относительно DASH: ничего на машине клиента поднимать не надо — достаточно браузера.
Если решите все-таки DASH попробовать, могу подробнее расписать, что и как нужно делать.
Здравствуйте, DiPaolo, Вы писали:
F>>задержка минимальная должна быть. DP>Если решите все-таки DASH попробовать, могу подробнее расписать, что и как нужно делать.
Если DASH аналогично HLS разбивает видеотрансляцию на отдельные фрагменты и предоставляет их плееру один за другим, то задержка минимальной не будет. А будет не меньше длины фрагмента.
F>>>задержка минимальная должна быть. DP>>Если решите все-таки DASH попробовать, могу подробнее расписать, что и как нужно делать. M>Если DASH аналогично HLS разбивает видеотрансляцию на отдельные фрагменты и предоставляет их плееру один за другим, то задержка минимальной не будет. А будет не меньше длины фрагмента.