WebRTC firefox约束

时间:2015-02-02 16:36:28

标签: javascript firefox webrtc

我目前在个人开发中使用WebRTC,一切正常。我从网络摄像头获取了流,但现在我想使用getUserMedia()的约束。

var constraints = {
           audio: false,
           video: {
               mandatory : {
                     minWidth: 1280,
                     minHeight: 720 
               }
           }
};

当我在Firefox中测试它时,它似乎忽略了约束。当我在Chrome或Opera上测试时,我的约束工作正常并且我的质量很好,有谁知道为什么?问题是Firefox?

谢谢你的建议

2 个答案:

答案 0 :(得分:24)

Firefox does support getUserMedia()的约束子集,但不是Chrome和Opera使用的过时语法。 mandatory / optional语法在几年前已被弃用,而minWidthminHeight在前一年被弃用。

MediaCapture规范

According to the specification,现在是稳定的,你的例子应该写成:

var constraints = {
    audio: false,
    video: {
        width: { min: 1280 },
        height: { min: 720 },
    }
};

这适用于Firefox(以及带有adapter.js的Chrome):https://jsfiddle.net/34qxx5w1

在规范中,关键字minmaxexact(a.k.a.min == max)本质上是强制性的,而普通值和ideal则不是。这是一个更全面的例子:

var constraints = {
    audio: false,
    video: {
        width: { min: 1024, ideal: 1280, max: 1920 },
        height: { min: 576, ideal: 720, max: 1080 },
    }
};

这适用于Firefox(在简单的情况下使用adapter.js polyfill的Chrome)。

ideal值在使用时具有重力,这意味着浏览器将尝试查找设置(和相机,如果您有多个),使用最小的fitness distance理想的价值观。

普通值本质上是理想的,这意味着:

var constraints = { video: { width: 640, height: 480 } };

与:

相同
var constraints = { video: { width: { ideal: 640 }, height: { ideal: 480 } } };

换句话说,getUserMedia()会尝试尊重,但绝不会失败的偏好。

如果必须具有特定分辨率,请使用以下简写:

var constraints = { video: { width: { exact: 640 }, height: { exact: 480 } } };

火狐

截至目前,Firefox支持widthheightframeRate和(在移动设备上)facingMode。此外,一些警告版本:

  • FF32-37:不支持普通值和ideal。但是,除非您添加非规范require关键字,否则值不是必需的。

  • FF38 +:实现上述约束的规范。改进了对Mac相机的处理(虽然frameRate在Mac上有限制)。

  • FF43 +:实施MediaStreamTrack.applyConstraints()mediaDevices.getSupportedConstraints()

  • FF46 +:实施echoCancellation

答案 1 :(得分:2)

修改维基链接似乎已过时,请参阅jib's answer down below.

好像是Firefox has not yet implemented constraints.

  

自Chrome 24和Opera 18以来已实施约束。这些约束可用于为getUserMedia()和RTCPeerConnection addStream()调用设置视频分辨率的值。

和来自:https://wiki.mozilla.org/Media/getUserMedia

  

捕获[在Firefox中]的分辨率目前固定为视频的640x480;

它只支持

  

支持最小约束:(注意:所有这些布尔值都默认为'false')     视频:真/假     audio:true / false     假:真/假     图片:真/假