WebRTC firefox约束

sim*_*mon 10 javascript firefox webrtc

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

var constraints = {
           audio: false,
           video: {
               mandatory : {
                     minWidth: 1280,
                     minHeight: 720 
               }
           }
};
Run Code Online (Sandbox Code Playgroud)

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

谢谢你的建议

jib*_*jib 25

Firefox 确实支持一部分约束getUserMedia(),但支持 Chrome和Opera使用的过时语法.该mandatory/ optional语法年前弃用,minWidthminHeight在一年之前.

MediaCapture规范

根据现在稳定的规范,您的示例应该像这样写:

var constraints = {
    audio: false,
    video: {
        width: { min: 1280 },
        height: { min: 720 },
    }
};
Run Code Online (Sandbox Code Playgroud)

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

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

var constraints = {
    audio: false,
    video: {
        width: { min: 1024, ideal: 1280, max: 1920 },
        height: { min: 576, ideal: 720, max: 1080 },
    }
};
Run Code Online (Sandbox Code Playgroud)

这适用于Firefox(以及带有adapter.js polyfill的 Chrome 在简单的情况下).

一个ideal值,使用时的重心,这意味着浏览器将尝试找到设置(与相机,如果你有一个以上的),用最小的适应度距离从给定的理想值.

简单值本质上是理想的,这意味着:

var constraints = { video: { width: 640, height: 480 } };
Run Code Online (Sandbox Code Playgroud)

是相同的:

var constraints = { video: { width: { ideal: 640 }, height: { ideal: 480 } } };
Run Code Online (Sandbox Code Playgroud)

换句话说,一种倾向于getUserMedia()尊重,但永远不会失败的偏好.

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

var constraints = { video: { width: { exact: 640 }, height: { exact: 480 } } };
Run Code Online (Sandbox Code Playgroud)

火狐

截至目前,width,height,frameRate和(移动)facingMode都在Firefox的支持.此外,一些警告版本:

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

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

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

  • FF46 +:实施echoCancellation.

  • **更新:** 目前所有浏览器都支持规范约束。 (3认同)

wpp*_*wpp 2

编辑wiki链接好像已经过时了,请参考下面的 jib 答案。

Firefox似乎还没有实施限制。

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

以及来自: https: //wiki.mozilla.org/Media/getUserMedia

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

它只支持

支持的最小约束:(注意:所有这些布尔值默认为“假”)视频:真/假音频:真/假假:真/假图片:真/假

  • 那个维基已经过时了。Firefox *确实*支持约束。看我的回答。 (2认同)