Как правильно предоставить макет видео с веб-камеры в Chrome? - PullRequest
0 голосов
/ 30 августа 2018

Я пытаюсь запустить сквозное тестирование в 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?

1 Ответ

0 голосов
/ 05 сентября 2018

После прочтения предоставленной вами ссылки я заметил, что мы также можем предоставить mjpeg .

В зависимости от ваших требований к тестам - этого может быть достаточно для вас.

ffmpeg -i oldfile.mp4 newfile.mjpeg

тогда я тестировал используя:

google-chrome --use-fake-device-for-media-stream --use-file-for-fake-video-capture=newfile.mjpeg

После перехода к Отслеживание JS я мог видеть воспроизводимое видео.

Я надеюсь, что это работает для вас!

...