代码之家  ›  专栏  ›  技术社区  ›  doppelgreener Perry Tew

如何正确地向Chrome提供模拟网络摄像头视频?

  •  0
  • doppelgreener Perry Tew  · 技术社区  · 6 年前

    --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 是从我录制的视频文件生成的。

    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
    

    这也是 失败了,我直接去了 the Chromium file that explains fake video capture ,转到 the example y4m file list 它提供并下载了grandma文件,并将其作为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为我提供了 准确的 全部的 在这些情况下。

    open -a "Google Chrome" --args
      --disable-gpu
      --use-fake-device-for-media-stream
      --use-file-for-fake-audio-capture="~/Documents/mock/microphone.wav"
    

    核算C420M2

    TestRTC 建议Chrome会崩溃如果我给它一个 C420mpeg2 文件,并建议仅替换元数据即可解决此问题。实际上,我从ffmpeg生成的视频文件提供了以下标题:

    YUV4MPEG2 W1280 H720 F30:1 Ip A1:1 C420mpeg2 XYSCSS=420MPEG2
    

    YUV4MPEG2 W1280 H720 F30:1 Ip A1:1 C420 XYSCSS=420MPEG2
    

    在这种情况下,视频文件仍然会给我上述错误。

    我能/应该做什么?

    对于这个命令行参数,我应该如何向Chrome提供一个视频文件?

    我应该如何录制或创建视频文件?

    我该如何把它转换成4M日元?

    1 回复  |  直到 6 年前
        1
  •  26
  •   Matt Harvey    6 年前

    在阅读了您提供的链接后,我注意到我们还可以提供 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

    我希望这对你有用!

        2
  •  2
  •   Alecu Marian Alexandru    4 年前

    如果有人需要动态模拟一个视频,这就是我用过的(从 here )

    await page.evaluate(() => {
            const video = document.createElement("video");
    
            video.setAttribute('id', 'video-mock');
            video.setAttribute("src", 'https://woolyss.com/f/spring-vp9-vorbis.webm');
            video.setAttribute("crossorigin", "anonymous");
            video.setAttribute("controls", "");
    
            video.oncanplay = () => {
                const stream = video.captureStream();
    
                navigator.mediaDevices.getUserMedia = () => Promise.resolve(stream);
            };
    
            document.querySelector("body").appendChild(video);
        });
    

    这些标志仍然是必要的:

    '--use-fake-ui-for-media-stream',
    '--use-fake-device-for-media-stream',
    

    最后,使用这个脚本,每个页面都可以进行不同的相机模拟-特别是在使用browserless时更有用!

        3
  •  0
  •   Ben Winding    4 年前

    假冒网络摄像头(Chrome和Firefox)

    https://stackoverflow.com/a/63312430/2419584