【问题标题】:WebRTC firefox constraintsWebRTC firefox 约束
【发布时间】:2015-02-02 16:36:28
【问题描述】:

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

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

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

感谢您的建议

【问题讨论】:

  • 是的,我看到了你的链接,但是我没有找到解决我的问题的方法,我无法在 Firefox 中更改视频质量,但我不明白为什么我的代码在 chrome 中可以正常工作,也许是我不知道的编解码器视频...

标签: javascript firefox webrtc


【解决方案1】:

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(又名 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

【讨论】:

  • 更新: adapter.js 现在允许您在 Chrome 和 Firefox 中使用规范约束!
  • 更新:目前所有浏览器都支持规范约束。
【解决方案2】:

编辑 wiki 链接似乎已过时,请参考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') 视频:真/假 音频:真/假 假:真/假 图片:真/假

【讨论】:

  • 那个 wiki 已经过时了。 Firefox 确实 支持约束。看我的回答。
  • 对于旧的 ff 版本也需要注意 (不太清楚是哪一个 + 我注意到它在 mac&linux 和 win 版本之间变化很大) 他们是大约的一个选项:config 手动设置这些约束,请参阅此答案:stackoverflow.com/a/17529034/3702797
猜你喜欢
  • 2014-05-23
  • 1970-01-01
  • 2013-08-07
  • 1970-01-01
  • 2015-01-25
  • 1970-01-01
  • 2019-10-19
  • 1970-01-01
  • 2019-10-04
相关资源
最近更新 更多