web-dev-qa-db-ja.com

偽のウェブカメラビデオをChromeに正しく提供するにはどうすればよいですか?

動作するために途中でWebカメラのフィードが必要な製品に対して、Chromeでエンドツーエンドのテストを実行しようとしています。私が理解しているところによると、これは--use-file-for-fake-video-capture="/path/to/video.y4m"コマンドライン引数を使用してChromeに偽のウェブカメラビデオを提供することを意味します。その後、それをWebカメラビデオとして使用します。

ただし、提供する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!
  });

(ビデオファイルが提供されると、これは常に「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は、録画したビデオファイルから生成されました。

最初に、ブラウザーのMediaRecorderを使用して22秒のmp4ビデオを録画し、結果をダウンロードして、次のコマンドラインコマンドを使用して変換しました。

ffmpeg -y -i original.mp4 -f wav -vn microphone.wav
ffmpeg -y -i original.mp4 webcam.y4m

これがうまくいかなかったとき、Quicktimeで記録した22秒のムービーファイルを使用して同じことを試しました。

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では、これらの状況のallexact同じエラーが発生します。

MediaDevicesリクエストでChromeがエラーにならないのは、ビデオを完全に省略したときだけです。

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に変換するにはどうすればよいですか?

11
doppelgreener

提供されたリンクを読んだ後、mjpegも提供できることに気付きました。

テスト要件によっては、これで十分な場合があります。

ffmpeg -i oldfile.mp4 newfile.mjpeg

それから私は使用してテストしました:

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

Tracking JS に移動した後、ビデオが再生されているのが見えました。

それがうまくいくことを願っています!

7
Matt Harvey