用新约束调用getUserMedia会导致黑屏(MediaStream.ended = true)
在我的nexus4(Android 4.4.4)上,我正在尝试在面向相机的'用户'和面向相机的'环境'之间切换。用新约束调用getUserMedia会导致黑屏(MediaStream.ended = true)
访问任何一个直接工作。 在它们之间切换bij再次调用navigator.getUserMedia()
设置新约束失败。失败导致黑屏视频& MediaStream.ended = true。
为什么MediaStream.ended = true在我第二次调用getUserMedia时?
在我看来,我动态创建视频源数量的按钮。两个在这种情况下。点击按钮将调用camera.getUserMedia()
并通过在媒体源:
camera.getUserMedia = function(source){
var constraints = {
video: true,
audio: false
};
if(source){
constraints.video = {optional: [{
sourceId: source.id
}]};
}
navigator.getMedia(
constraints,
function(stream) {
var vendorURL = window.URL || window.webkitURL;
video.src = vendorURL.createObjectURL(stream);
video.play();
streaming = true;
},
function(err) {
...
}
);
};
我已经解决了这个问题存放照相机对象上的流,然后将料流结合到视频元素之前我会呼叫停止吧。不确定究竟发生了什么(也许有人可以在评论中添加解释)。
camera.getUserMedia = function(source){
if(camera.stream){
camera.stream.stop();
}
...
navigator.getMedia(
constraints,
function(stream) {
camera.stream = stream;
...
},
function(err) {
...
}
);
};
停止流对我没有任何影响 – pthalacker 2017-04-13 21:07:47
嘿,我知道已经过去了一段时间,但是当我遇到完全相同的问题时,我使用了这个主题。 @pthalacker您的问题可能是由于某些流尚未关闭而导致的,您已尝试访问下一个流。这是我用于我的解决方案的代码位if(window.stream){window.stream.getTracks()。forEach(function(track){ track.stop(); }); }' 您需要在MediaTracks上操作。 – 2017-07-26 13:15:54
我假设,因为你只能有一个摄像头的时间和杀死另一个杀死原始流...您将需要重新谈判整个对等连接,一旦加入,将其与创建新流其他相机。 – 2014-10-08 00:52:20
@BenjaminTrent你在谈论'重新谈判对等连接'。我再次使用包含其他相机ID的新约束来调用“navigator.getUserMedia()”(重新协商?)。这不是你说'重新谈判对等连接'的意思吗? – Timo 2014-10-08 18:17:33
忽略我以前的评论...我完全错了:)。这两个电话的源ID是什么? – 2014-10-08 18:48:45