Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google chrome 如何正确地向Chrome提供模拟网络摄像头视频?_Google Chrome_Video_Ffmpeg_Mocking_Webcam - Fatal编程技术网

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

Google chrome 如何正确地向Chrome提供模拟网络摄像头视频?,google-chrome,video,ffmpeg,mocking,webcam,Google Chrome,Video,Ffmpeg,Mocking,Webcam,我正在尝试在Chrome中运行一个产品的端到端测试,该产品需要一个网络摄像头才能运行到一半。据我所知,这意味着使用--use file for fake video capture=“/path/to/video.y4m”命令行参数向Chrome提供假网络摄像头视频。然后,它会将其用作网络摄像头视频 但是,无论我提供什么y4m文件,在这些条件下运行Chrome时都会出现以下错误: domeException:无法启动视频源 { 代码:0, 消息:“无法启动视频源”, 名称:“NotReadabl

我正在尝试在Chrome中运行一个产品的端到端测试,该产品需要一个网络摄像头才能运行到一半。据我所知,这意味着使用
--use file for fake video capture=“/path/to/video.y4m”
命令行参数向Chrome提供假网络摄像头视频。然后,它会将其用作网络摄像头视频

但是,无论我提供什么y4m文件,在这些条件下运行Chrome时都会出现以下错误:

domeException:无法启动视频源
{
代码:0,
消息:“无法启动视频源”,
名称:“NotReadableError”
}
值得注意的是,我可以提供一个音频文件,使用
--使用文件进行假音频捕获
,Chrome可以很好地使用它。这段视频一直是我的症结所在

此错误来自以下直接的mediaDevices请求:

navigator.mediaDevices.getUserMedia({video:true,audio:true})
。然后(数据=>{
//做事
})
.catch(错误=>{
//哦,不!
});
(当提供视频文件时,这始终会点击“哦,不!”分支。)

到目前为止我都试过了 我一直在使用以下命令行参数运行Chrome(为可读性添加了换行符),并且我使用的是Mac,因此使用了
open
命令:

open-a“谷歌浏览器”--args
--禁用gpu
--对媒体流使用假设备
--使用文件进行假视频捕获=“~/Documents/mock/webcam.y4m”
--使用文件进行假音频捕获=“~/Documents/mock/microscop.wav”
网络摄像头.y4m
麦克风.wav
是根据我录制的视频文件生成的

我首先使用浏览器的MediaRecorder录制了一段22秒的mp4视频,下载了结果,并使用以下命令行命令对其进行了转换:

ffmpeg-y-i original.mp4-f wav-vn microscope.wav
ffmpeg-y-i original.mp4网络摄像头.y4m
当这不起作用时,我使用Quicktime中录制的第二十二个电影文件尝试了同样的方法:

ffmpeg-y-i original.mov-f wav-vn microscope.wav
ffmpeg-y-i original.mov网络摄像头.y4m
当这也失败时,我直接转到,转到它提供的,并下载了grann文件,并将其作为Chrome的命令行参数提供:

open-a“谷歌浏览器”--args
--禁用gpu
--对媒体流使用假设备
--使用文件进行假视频捕获=“~/Documents/mock/grandma_qcif.y4m”
--使用文件进行假音频捕获=“~/Documents/mock/microscop.wav”
在所有这些情况下,Chrome都为我提供了完全相同的错误

Chrome唯一没有在mediaDevices请求中出错的时间是当我完全忽略视频时:

open-a“谷歌浏览器”--args
--禁用gpu
--对媒体流使用假设备
--使用文件进行假音频捕获=“~/Documents/mock/microscop.wav”
占C420mpeg2 建议如果我给它一个
C420mpeg2
文件,Chrome将“崩溃”,并建议简单地替换元数据就可以解决这个问题。事实上,我从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——使用假设备进行媒体流——使用文件进行假视频捕获=newfile.mjpeg

导航到后,我可以看到正在播放的视频


我希望这对你有用

如果有人需要动态模拟视频,这就是我所使用的(来源)

  • 关键是返回
    Promise.resolve(stream)
  • oncanplay
    优于
    onplay
    ,因为它是被触发的
此标志仍然是必需的:

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

最后,使用此脚本,每个页面都可以进行不同的摄影机模拟-在使用browserless时尤其有用

我在这里提供了一个详细的答案,这可能对一些人有所帮助:

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

模拟chrome网络摄像头的精确解决方案,无需环回设备。干得好。嗨,我在哪里写这些行?
'--use-fake-ui-for-media-stream',
'--use-fake-device-for-media-stream',