Потребляйте RTMP и распространяйте через WebSocket

У меня есть ПК с Linux, который передает видео (со звуком) с веб-камеры на сервер RTMP (nginx). Затем сервер RTMP nginx преобразует видео в формат HLS, и этот поток HLS отображается в браузерах. Все работает хорошо. Единственная проблема — задержка из-за протокола HLS (10-20 секунд в зависимости от размера плейлиста HLS).

Я ищу альтернативу HLS, которая может работать в большинстве основных браузеров. Я не могу использовать WebRTC из-за отсутствия звука, я не могу использовать flash из-за отсутствия поддержки мобильных браузеров. Итак, мой вопрос: есть ли способ потребить поток RTMP, а затем распространить его через WebSocket и < strong>играть в современных браузерах с поддержкой WebSocket без каких-либо дополнительных плагинов? Я использую ffmpeg для публикации потока RTMP с ПК с Linux. При необходимости исходный поток можно легко изменить на другой протокол прямой трансляции, такой как RTSP. Так что, если есть какое-то другое решение, которое может решить эту проблему без RTMP, я тоже могу пойти на это.

Заранее спасибо.


person ShubhadeepB    schedule 08.02.2018    source источник
comment
Как вы тогда смогли этого добиться? Не могли бы вы поделиться каким-либо инструментом или проектом с открытым исходным кодом или кодом?   -  person chintan-p-bhatt    schedule 08.11.2020


Ответы (1)


Да, это возможно, но есть еще более простое решение. Просто передайте данные по HTTP.

WebSockets нужны только для двунаправленной связи. Вы просто отправляете видео клиенту.

person Brad    schedule 10.02.2018
comment
Хорошо. Получил идею. Но я не знаю ни фреймворка, который может конвертировать поток RTSP в поток HTTP, ни проигрывателя, который может воспроизводить этот поток HTTP на HTML5. Не могли бы вы предложить фреймворк и плеер, который может это сделать? - person ShubhadeepB; 13.02.2018
comment
FFmpeg может прочитать этот поток, выполнить необходимое транскодирование и трансмуксирование в WebM и вывести в STDOUT. Оттуда любой фреймворк приложения может считывать данные и передавать их по HTTP. Я использую для этого Node.js, но вы действительно можете использовать все, что захотите. Убедитесь, что ваши кластеры WebM начинаются с ключевых кадров. Что касается плеера, любой браузер может прочитать этот поток по HTTP. <video src="yourstream.webm">. - person Brad; 13.02.2018