我一直在为我的下一个项目尝试使用 webRTC 创建视频聊天,但测试很困难。我有这个简单的代码来访问相机:
navigator.getUserMedia = navigator.getUserMedia ||
navigator.webkitGetUserMedia ||
navigator.mozGetUserMedia ||
navigator.msGetUserMedia;
var video = document.querySelector('#av-chat video');
if (navigator.getUserMedia) {
navigator.getUserMedia({audio: true, video: true}, function(stream) {
video.src = window.URL.createObjectURL(stream);
}, errorCallback);
}
它在 chrome 和 mozilla 上工作得很好,但是当我尝试一起做时,它不起作用。我所说的一起的意思就像在两个浏览器中使用此代码打开同一个文件。似乎当一个浏览器可以访问相机时,它会阻止其他浏览器访问该相机。
我没有在互联网上看到过这个问题,所以我想知道,只有我这样吗?如果不行有什么解决办法吗?
Chrome 和 Firefox 都有命令行标志,可以通过启用假设备来简化测试。有关 Firefox,请参阅此处,有关 Chrome,请参阅下文。
Chorme/Edge
两者都是基于 Chromium 的,因此命令行标志是相同的:https://webrtc.github.io/webrtc-org/testing/
相关部分如下:
对于手动开发和测试,以下是一些对于 WebRTC 相关测试有用的命令行标志:
--allow-file-access-from-files
允许从getUserMedia()
URL 调用file://
。--disable-gesture-requirement-for-media-playback
无需点击<video>
元素即可开始在 Android 上播放。--use-fake-ui-for-media-stream
无需授予摄像头/麦克风权限。--use-fake-device-for-media-stream
将测试模式馈送到getUserMedia()
,而不是实时摄像头输入。--use-file-for-fake-video-capture=path/to/file.y4m
将 Y4M 测试文件提供给getUserMedia()
,而不是实时摄像头输入。
火狐
导航到about:config
,在搜索输入框中输入
media.navigator.streams.fake
,然后双击该标志将值更改为
true
。
Safari
Safari 允许模拟捕获设备:https://webkit.org/blog/7763/a-closer-look-into-webrtc/
相关部分如下:
在
Develop
>WebRTC
菜单中,您可以选择Use Mock Capture Devices
将真实捕获设备的使用替换为模拟捕获设备。该模拟循环 bip-bop AV 流,如下所示。当用作传入流时,模拟的可预测数据可以轻松评估流媒体播放的各个方面,包括同步、延迟和输入设备的选择。