WebRTC Firefox 限制

IT技术 javascript firefox webrtc
2021-02-11 03:33:16

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

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

当我在 Firefox 中测试时,它似乎忽略了这些限制。当我在 Chrome 或 Opera 上测试时,我的约束工作正常,质量也很好,有人知道为什么吗?问题是火狐?

谢谢你的建议

2个回答

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

MediaCapture 规范

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

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

这适用于 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 },
    }
};

这适用于 Firefox(以及 Chrome 和适配器在简单情况下polyfill)。

一个ideal值在使用时具有重力,这意味着浏览器将尝试找到与给定的理想值的最小适应距离的设置(和相机,如果您有多个)

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

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 相机的处理(尽管帧速率在 Mac 上有限制)。

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

  • FF46+:实现echoCancellation.

更新: adapter.js现在允许您在 Chrome 和 Firefox 中使用规范约束!
2021-03-16 03:33:16
更新:现在所有浏览器都支持规范约束。
2021-04-05 03:33:16

编辑wiki 链接似乎已过时,请参阅下面的 jib 回答。

Firefox似乎还没有实施约束。

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

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

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

它只支持

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

那个维基已经过时了。Firefox确实支持约束。看我的回答。
2021-03-17 03:33:16
还需要注意较旧的 ff 版本(不太清楚是哪个 + 我注意到它在 mac&linux 和 win 版本之间变化很大)他们是 about:config 中的一个选项,可以手动设置这些约束,请参阅此答案:stackoverflow.com /a/17529034/3702797
2021-04-04 03:33:16