使用新约束调用getUserMedia会导致黑屏(MediaStream.ended = true)

时间:2014-10-07 19:52:15

标签: javascript android video webrtc getusermedia

在我的nexus4(Android 4.4.4)上,我试图切换用户'面对镜头和环境'面对镜头

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

为什么我第二次调用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) {
                ...
            }
        );
    };

enter image description here

1 个答案:

答案 0 :(得分:0)

我已经通过将流存储在相机对象上解决了这个问题,然后在将流绑定到视频元素之前,我将调用stop on it 。不确定究竟发生了什么(可能有人可以在评论中添加解释)。

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