我在Chrome 25上成功使用getUserMedia和RTCPeerConnection将音频从网页连接到另一方,但我无法让API停止Chrome标签中正在使用媒体的红色闪烁指示图标在那个页面上。我的问题基本上是Stop/Close webcam which is opened by navigator.getUserMedia的重复,除了那里的决议无效。如果我的页面只使用没有远程媒体的getUserMedia(没有对等),则停止摄像机会关闭闪烁的标签指示。添加远程流似乎是个问题。以下是我目前获得的“密切”代码:
if (localStream) {
if (peerConnection && peerConnection.removeStream) {
peerConnection.removeStream(localStream);
}
if (localStream.stop) {
localStream.stop();
}
localStream.onended = null;
localStream = null;
}
if (localElement) {
localElement.onerror = null;
localElement.pause();
localElement.src = undefined;
localElement = null;
}
if (remoteStream) {
if (peerConnection && peerConnection.removeStream) {
peerConnection.removeStream(remoteStream);
}
if(remoteStream.stop) {
remoteStream.stop();
}
remoteStream.onended = null;
remoteStream = null;
}
if (remoteElement) {
remoteElement.onerror = null;
remoteElement.pause();
remoteElement.src = undefined;
remoteElement = null;
}
if (peerConnection) {
peerConnection.close();
peerConnection = null;
}
我已尝试使用removeStream()
来电和不使用stop()
来电,我尝试过element.src=""
来电,我尝试了element.src=null
和chrome://settings/content
,我的想法已经不多了。任何人都知道这是使用API时的错误或用户/我的错误吗?
编辑:我将默认设备(使用Windows)设置为在使用时有照明的相机,并在停止时,相机指示灯熄灭,所以这可能是Chrome错误。我还发现,如果我使用element.src=undefined
将麦克风设备更改为“默认”以外的任何设备,则Chrome音频会完全失败。最后,我意识到使用element.src=''
导致Chrome尝试加载资源并抛出404,因此显然不正确...所以回到{{1}}就可以了。
答案 0 :(得分:2)
结束了我的错(是的,令人震惊)。事实证明我没有在localStream
onUserMediaSuccess
回调中正确保存getUserMedia
...一旦设置完毕,Chrome就会关闭闪烁的录制图标。这并没有解释其他异常,但它结束了问题的主要观点。
答案 1 :(得分:0)
我只是昨天在浏览WebRTC规范后得到了这个。我不知道这是否是“正确”的方式,但是我发现在删除流之后用新的提议重新协商PeerConnection就行了。
var pc = peerConnections[socketId];
pc.removeStream(stream);
pc.createOffer( function(session_description) {
pc.setLocalDescription(session_description);
_socket.send(JSON.stringify({
"eventName": "send_offer",
"data":{
"socketId": socketId,
"sdp": session_description
}
}));
},
function(error) {},
defaultConstraints);