【问题标题】:Calling getUserMedia with new constraints causes black screen (MediaStream.ended=true)使用新约束调用 getUserMedia 会导致黑屏 (MediaStream.ended=true)
【发布时间】:2014-10-07 19:52:15
【问题描述】:

在我的 nexus4 (Android 4.4.4) 上,我正在尝试在面向“用户”的摄像头和面向“环境”的摄像头之间切换

直接访问任何一个都可以。 在它们之间切换 bij 再次调用 navigator.getUserMedia() 设置新约束失败。失败导致黑屏视频 & MediaStream.ended=true

为什么在我第二次调用 getUserMedia 时 MediaStream.ended=true?

在我看来,我会为视频源的数量动态创建按钮。在这种情况下是两个。点击按钮将调用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) {
                ...
            }
        );
    };

【问题讨论】:

  • 我假设是因为您一次只能拥有一台摄像机,而杀死另一台摄像机会杀死原始流...一旦添加了创建的新流,您将需要重新协商整个对等连接用另一台相机。
  • @BenjaminTrent 您在谈论“重新协商对等连接”。我确实再次调用了“navigator.getUserMedia()”(重新协商?),并带有包含另一个相机 ID 的新约束。这不就是“重新协商对等连接”的意思吗?
  • 忽略我之前的评论...我完全错了:)。这两个调用的源 ID 是什么?

标签: javascript android video webrtc getusermedia


【解决方案1】:

我通过将流存储在相机对象上解决了这个问题,然后在将流绑定到视频元素之前,我将对其调用停止。虽然不太确定到底发生了什么(也许有人可以在 cmets 中添加解释)。

    camera.getUserMedia = function(source){
        if(camera.stream){
            camera.stream.stop();
        }
        ...
        navigator.getMedia(
            constraints,
            function(stream) {
                camera.stream = stream;
                ...
            },
            function(err) {
                ...
            }
        );
    };

【讨论】:

  • 停止流对我没有影响
  • 嘿,我知道已经过去了一段时间,但是当我遇到完全相同的问题时,我使用了这个主题。 @pthalacker 您的问题可能是由于某些流尚未关闭而引起的,并且您已经在尝试访问下一个流。这是我用于解决方案的一段代码` if (window.stream) { window.stream.getTracks().forEach(function (track) { track.stop(); }); }` 你需要对 MediaTracks 进行操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-07
  • 2015-12-17
  • 1970-01-01
  • 2023-01-13
  • 2012-03-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多