我正在创建多个webrtc对等连接并使用创建单个媒体流
if(mediaStream == undefined){ navigator.mediaDevices.getUserMedia({ audio:true, …
这是一个猜测,但似乎是最可能的原因,所以虽然有更多的代码将有助于......
如果输入第一个代码块
if (mediaStream == undefined) { navigator.mediaDevices.getUserMedia({ ...
再次在第一个Promise返回之前 getUserMedia 得到解决后,您实际上会有多个来自您设备的不同MediaStream。
getUserMedia
全局变量 mediaStream 将只代表最后一个MediaStream getUserMedia 以及从代码中无法访问的所有以前版本仍会锁定您的设备。
mediaStream
这是一个MCVE
换句话说,你需要 的 重构你的代码 强> 。
您需要更好地跟踪何时获取MediaStream的请求,因此为了减少代码中的更改,我建议您实际存储由返回的Promise getUserMedia [而不是/同时]存储MediaStream。
这样,接下来的电话只需要 then() 这个Promise,为了访问相同的MediaStream。
then()
// outer scope var stream_request = null; // [...] function requestStream() { if(!stream_request) { stream_request = navigator.mediaDevices.getUserMedia(options); } return stream_request .then(doSomethingWithTheMediaStream); } // and to kill it function kill_stream() { return stream_request.then(stream => { stream.getTracks().forEach(t => t.stop()); } }
实例