Javascript 使用getUserMedia和RTPeerConnection Chrome 25停止/关闭网络摄像头

Javascript 使用getUserMedia和RTPeerConnection Chrome 25停止/关闭网络摄像头,javascript,html,html5-video,webrtc,Javascript,Html,Html5 Video,Webrtc,我在Chrome 25上成功地使用getUserMedia和RTPeerConnection将音频从网页连接到另一方,但我无法让API停止Chrome选项卡中的红色闪烁指示图标,该页面正在使用媒体。我的问题基本上是重复的,只是那里的决议不起作用。如果我的页面只使用getUserMedia而没有远程介质(没有对等介质),则停止相机会关闭闪烁的选项卡指示灯。添加远程流似乎是一个问题。以下是我目前获得的“关闭”代码: 我试过使用和不使用removeStream()调用,我试过使用和不使用stop()调

我在Chrome 25上成功地使用getUserMedia和RTPeerConnection将音频从网页连接到另一方,但我无法让API停止Chrome选项卡中的红色闪烁指示图标,该页面正在使用媒体。我的问题基本上是重复的,只是那里的决议不起作用。如果我的页面只使用getUserMedia而没有远程介质(没有对等介质),则停止相机会关闭闪烁的选项卡指示灯。添加远程流似乎是一个问题。以下是我目前获得的“关闭”代码:

我试过使用和不使用
removeStream()
调用,我试过使用和不使用
stop()
调用,我试过
元素。src=“”
元素。src=null
,我已经没有主意了。有人知道这是API使用中的错误还是用户/我的错误吗

编辑:我将默认设备(使用Windows)设置为使用时有灯光的相机,停止时,相机灯光熄灭,因此这可能是一个Chrome错误。我还发现如果我使用
chrome://settings/content
要将麦克风设备更改为“默认”以外的任何设置,Chrome audio将完全失败。最后,我意识到使用
element.src=undefined
会导致Chrome试图加载资源并抛出404,因此这显然是不正确的。。。所以回到
element.src='

我昨天在浏览了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);

结果是我的错(是的,令人震惊)。原来我没有在
getUserMedia
onUserMediaSuccess
回调中正确保存
localStream
。。。一旦设置完毕,Chrome将关闭闪烁的录制图标。这并不能解释其他的反常现象,但它结束了问题的要点。

谢谢你的帖子;我在我的关闭代码中添加了一个
peerConnection.createOffer
,就在
peerConnection.close
行的上方,但奇怪的是,它似乎在没有调用成功回调或失败回调的情况下以某种方式失败,并且也没有抛出错误。不幸的是,我的小chrome标签记录图标仍在闪烁。我会继续从这个角度工作,如果我发现了什么,我会发回,谢谢。几个月前我也遇到过类似的问题:
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);