2016-11-30 840 views
5

我正在尝试navigator.MediaDevices.getUserMedia()webrtc在通话期间切换设备摄像头。此功能在桌面浏览器上正常工作,但在Mozilla的Android上无法正常工作。 这是我使用的代码。在webrtc中使用MediaDevices.getUserMedia()切换摄像头

var front=false; 

var myConstraints = { video: { facingMode: (front? "user" : "environment")} }; 
navigator.mediaDevices.getUserMedia(myConstraints).then(function(stream) { 

} 

对此有何想法?

+0

更多有关错误的细节可能会有所帮助 - 您能否提供更多信息? –

+0

我做了一个调用系统它工作正常。现在我想包括一个功能来切换相机。切换工作正常在桌面Firefox浏览器,但它不工作在Android的Firefox浏览器。它给出错误“内部错误开始视频失败”。下面是代码 的document.getElementById( '倒装键')的onclick =函数(){风险 myConstraints = {视频:{facingMode:(前 “用户”?: “环境”)。} }; navigator.mediaDevices.getUserMedia(myConstraints).then(func tion(stream){}} – john

+0

您好@john是否能够解决您的问题? – zabumba

回答

4

手机硬件通常不允许同时打开前置和后置摄像头。在获取其他相机之前将您的代码更改为stop()现有的流。

查看my answer to a similar question作为一个工作示例。

+0

我真的很感谢您的帮助。 我正在使用simplepeer.js库和pusher.js作为对等连接通道 我的相机现在开启了移动和桌面,但仍然存在一些问题 当我在发送端切换相机时,接收端摄像头挂起。我应该重新协商通话吗? 也请定义流和window.stream之间的区别 这里是我在pastebin上的代码 请仔细阅读代码 http://pastebin.com/bW0wa9F7 – john

+0

这是一个不同的问题。请参阅http://stackoverflow.com/a/35515536​​/918910 – jib

+0

谢谢,我正在处理您提到我的链接。现在,我被困在接收端没有接收到流的问题上。我发送user_id,user_name,流中的信号从发送者到接收者,以便接收者可以用新发送的流替换他的当前流,user_id和user_name正在接收,但流对象是空的。这就是我正在做的 https: //jsfiddle.net/1so8n164/ – john

1

使用adapter.js的最新版本,并查看NotReadableerror是否发生,似乎Android的Chrome无法通过使用stream.getVideoTracks()[0] .stop()来释放前置摄像头硬件切换到后端。我认为这可能是一个错误

相关问题