ffmpeg - прямая трансляция в тег видео браузера (только для локального хоста)

Я создаю приложение, которое в основном представляет собой видеочат, где пользователь подключается с помощью WebRTC к браузеру другого пользователя (оператора) и должен иметь возможность разговаривать с третьим лицом. Часть WebRTC уже сделана и работает правильно. Другая часть - проблематичная - заключается в том, что третье лицо будет записано каким-то видеооборудованием, а поток будет обрабатываться для меня с использованием ffmpeg. Поэтому мне нужно каким-то образом передать это в браузер (а затем передать его с помощью WebRTC - эту часть я рассмотрел).

Поскольку поток будет обрабатываться для меня с помощью ffmpeg, было бы лучше использовать ffmpeg для потоковой передачи в браузер, но это та часть, где все становится сложнее. Насколько я понимаю, единственный протокол, который я могу использовать, это HTTP (поскольку браузеры не поддерживают udp или что-то еще, а использование flash player не вариант), но неясно, как это сделать.

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

Из того, что я прочитал, ffmpeg должен поддерживать то, что мне нужно, из коробки, но я не уверен, как его настроить. На данный момент у меня есть это:

ffmpeg -f video4linux2 -s 640x480 -r 30 -i /dev/video0 -thread_queue_size 512 -ac 1 -f alsa -i pulse -f webm -listen 1 -seekable 0 -multiple_requests 1 http://localhost:8090

... и HTML-тег видео для отображения этого.

<video src="http://localhost:8090"></video>

... который почти работает с ffmpeg version 2.8.15-0ubuntu0.16.04.1. Я заставляю браузер воспроизводить мое видео, но только после остановки записи. Кажется, что браузер видит мой вывод ffmpeg в виде файла и пытается загрузить его до того, как он начнет воспроизводиться.

Эта же команда, запущенная с помощью, ffmpeg version 4.1дает мне ошибки:

[vp8_v4l2m2m @ 0x3dede80] driver 'uvcvideo' on card 'ASUS USB2.0 WebCam'
[vp8_v4l2m2m @ 0x3dede80] Could not find a valid device
[vp8_v4l2m2m @ 0x3dede80] can't configure encoder
Error initializing output stream 0:0 -- Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height

Как мне транслировать прямую трансляцию из ffmpeg в браузер с помощью http? Если мне нужен какой-то сегментный мультиплексор, то как мне его использовать?

Примечания:

  • Я использую свою веб-камеру в качестве входных данных, так как это похоже на то, что я могу ожидать от производства.
  • это среда Linux (Ubuntu)
  • вся эта установка будет установлена ​​на оборудование наших клиентов, и после этого у меня больше не будет к ней доступа. Поэтому я хочу избегать использования чего-либо, кроме ffmpeg (который они уже используют), так как я не уверен, что они смогут справиться с этим в долгосрочной перспективе.

Ответы (1)

Я думаю, что проблема в теге видео. Тег видео не поддерживает прямую трансляцию напрямую, см. этот вопрос на SO . Конкретно:

A. Этот ответ для технического описания того, что вы хотите реализовать

B. Этот ответ для примера кода