Я пытаюсь запустить сквозное тестирование в Chrome для продукта, для работы которого требуется веб-камера на полпути. Из того, что я понимаю, это означает предоставление поддельного видео с веб-камеры в Chrome с использованием аргумента командной строки --use-file-for-fake-video-capture="/path/to/video.y4m"
. Затем он будет использовать это как видео с веб-камеры.
Однако, независимо от того, какой файл y4m я предоставляю, я получаю следующую ошибку от Chrome, работающего в этих условиях:
DOMException: Could not start video source
{
code: 0,
message: "Could not start video source",
name: "NotReadableError"
}
Примечательно Я могу просто предоставить аудиофайл , используя --use-file-for-fake-audio-capture
, и Chrome будет хорошо с ним работать. Видео было моим камнем преткновения.
Эта ошибка возникает из-за следующего простого запроса mediaDevices:
navigator.mediaDevices.getUserMedia({ video: true, audio: true })
.then(data => {
// do stuff
})
.catch(err => {
// oh no!
});
(Это всегда попадает в ветку «о нет!», Когда предоставляется видеофайл.)
Что я пробовал до сих пор
Я запускаю Chrome со следующими аргументами командной строки (добавлены символы новой строки для удобства чтения), и я использую Mac, поэтому команда open
:
open -a "Google Chrome" --args
--disable-gpu
--use-fake-device-for-media-stream
--use-file-for-fake-video-capture="~/Documents/mock/webcam.y4m"
--use-file-for-fake-audio-capture="~/Documents/mock/microphone.wav"
webcam.y4m
и microphone.wav
были сгенерированы из видеофайла, который я записал.
Сначала я записал двадцать второе видео в формате mp4, используя MediaRecorder моего браузера, загрузил результат и преобразовал его, используя следующие команды командной строки:
ffmpeg -y -i original.mp4 -f wav -vn microphone.wav
ffmpeg -y -i original.mp4 webcam.y4m
Когда это не сработало, я попробовал то же самое, используя двадцать второй фильм, записанный в Quicktime:
ffmpeg -y -i original.mov -f wav -vn microphone.wav
ffmpeg -y -i original.mov webcam.y4m
Когда , что также не удалось, я сразу перешел к файлу Chromium, который объясняет ложный захват видео , перешел к примерному списку файлов y4m , который он предоставил, и загрузил файл бабушки и предоставил его в качестве аргумента командной строки для Chrome:
open -a "Google Chrome" --args
--disable-gpu
--use-fake-device-for-media-stream
--use-file-for-fake-video-capture="~/Documents/mock/grandma_qcif.y4m"
--use-file-for-fake-audio-capture="~/Documents/mock/microphone.wav"
Chrome предоставляет мне точную такую же ошибку в всех этих ситуациях.
Единственный раз, когда Chrome не выдает ошибку с этим запросом mediaDevices, это когда я полностью опускаю видео:
open -a "Google Chrome" --args
--disable-gpu
--use-fake-device-for-media-stream
--use-file-for-fake-audio-capture="~/Documents/mock/microphone.wav"
Учет C420mpeg2
TestRTC предполагает, что Chrome будет «зависать», если я предоставлю ему файл C420mpeg2
, и рекомендует просто заменить метаданные, чтобы устранить проблему. Действительно, видеофайл, который я генерирую из ffmpeg, дает мне следующий заголовок:
YUV4MPEG2 W1280 H720 F30:1 Ip A1:1 C420mpeg2 XYSCSS=420MPEG2
Chrome на самом деле не падает при запуске с этим файлом, я просто получаю сообщение об ошибке выше. Если я отредактирую видеофайл в следующем заголовке, хотя в соответствии с рекомендациями TestRTC я получу ту же ситуацию:
YUV4MPEG2 W1280 H720 F30:1 Ip A1:1 C420 XYSCSS=420MPEG2
В этих условиях видеофайл по-прежнему выдает ошибку, указанную выше.
Что я могу / должен сделать?
Как мне предоставить видеофайл в Chrome для этого аргумента командной строки?
Как записывать или создавать видеофайл?
Как мне преобразовать его в y4m?