動作するために途中で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では、これらの状況のallでexact同じエラーが発生します。
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"
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に変換するにはどうすればよいですか?
提供されたリンクを読んだ後、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 に移動した後、ビデオが再生されているのが見えました。
それがうまくいくことを願っています!