Потоковая передача видео с камеры с помощью ffmpeg в Firefox через Dash.js
Я пытаюсь транслировать видео с камеры в реальном времени с помощью ffmpeg в браузер. Я нашел несколько вопросов по этому поводу на StackOverflow и здесь, но все они относятся к созданию видеофайла с камеры. К счастью, я могу без особых проблем создать видеофайл со входа камеры. Но мне нужна помощь в создании видеопотока с камеры, в идеале в виде файла .mpd для воспроизведения в браузере.
Проблема
Браузеры на базе Chromium воспроизводят потоковое аудио и видео, но Firefox воспроизводит только аудио и не отображает видео.
Фон
Отличный учебник Udemy предоставил мне эту команду:
ffmpeg -f dshow -i video="HD Pro Webcam C920":audio="Microphone (HD Pro Webcam C920)" -rtbufsize 256M -hls_master_name stream.m3u8 -hls_playlist 1 -seg_duration 2 stream.mpd
Обратите внимание: сейчас я работаю над Windows, но надеюсь, что в Linux, моей конечной цели, все будет работать так же.
Я пробовал разные камеры с одинаковым результатом, поэтому не думаю, что сама камера имеет значение.
Эта команда создает файл .mpd и различные файлы фрагментов, как и следовало ожидать. Я использую проигрыватель DashJS для воспроизведения потокового видео. Вкратце, код выглядит следующим образом:
JS
import dashjs from 'dashjs'
import { ref, onMounted } from 'vue'
const thevideo = ref(null)
onMounted(() => {
const player = dashjs.MediaPlayer().create();
player.initialize(thevideo.value!, '/stream/stream.m3u8', true);
}
HTML
<video width=600 height=300 ref="thevideo" controls></video>
Сейчас я использую Vue, но вы можете настроить его по своему усмотрению, поскольку я просто пытаюсь это протестировать.
Как я уже упоминал, эта настройка отлично работает в таких браузерах, как Chrome и Edge. я использую
Однако эта же страница в Firefox приводит только к загрузке звука. Я не обнаружил ошибок, связанных с загрузкой или обработкой видео браузером. Просто не загружается видео.
Может кто-нибудь знает, что здесь происходит?
Кстати, когда я пытаюсь создать поток HLS с помощью такой команды:
ffmpeg -f dshow -i video="HD Pro Webcam C920":audio="Microphone (HD Pro Webcam C920)" -rtbufsize 265M -fflags flush_packets -max_delay 5 -flags -global_header -hls_time 5 -hls_list_size 3 -y stream.m3u8
ни один браузер не может воспроизвести файл .m3u8. Я не вижу ошибок в Chrome, но Firefox сообщает, что не может проанализировать поток.m3u8 как XML-файл. Я не знаю, почему он пытается это сделать, потому что это не XML-файл, и я никогда не советовал относиться к нему как к таковому. Однако , когда я использую эту команду с реальным видеофайлом в качестве входных данных вместо входа с камеры, она работает хорошо.
Я в порядке, просто работаю с mpeg-dash, но если кто-нибудь может помочь мне сделать m3u8 из входных данных камеры, я тоже был бы признателен. Но, по крайней мере, мне бы хотелось помочь заставить поток MPEG-DASH работать в Firefox. Большое спасибо.
1 ответ
Наконец-то я нашел эту проблему в Shaka player, и она говорит именно о моей проблеме. Клянусь, я уже пытался добавить-vf format=yuv420p
, но я сделал это еще раз, и теперь видео появляется в Firefox. Мне не ясны все детали, но речь идет о том, что Firefox ожидает более распространенного типа « цветового пространства » для этого видео.