什么决定了 MediaStreamTrack.getCapabilities() 方法枚举哪些功能?

What determines which capabilities are enumerated by the MediaStreamTrack.getCapabilities() method?

我一直在开发 getUserMedia 和 WebRTC 的应用程序,它要求我利用 return 由 getConstraints()getCapabilities()getSettings() MediaStreamTrack 的方法。

在测试中,在对应于外部网络摄像头的轨道上使用 getCapabilities() 可能 return 类似于...

aspectRatio: {max: 1920, min: 0.000925925925925926}
deviceId: ""
exposureCompensation: MediaSettingsRange {max: 2047, min: 3, step: 1}
exposureMode: (2) ["manual", "continuous"]
facingMode: []
focusMode: (2) ["manual", "continuous"]
frameRate: {max: 30, min: 1}
groupId: ""
height: {max: 1080, min: 1}
whiteBalanceMode: ["manual"]
width: {max: 1920, min: 1}
zoom: MediaSettingsRange {max: 5, min: 1, step: 1}

...但是如果 focusDistancecolorTemperature(或 here 列出的其他潜在成员)不在功能列表中,那么什么决定了相机或其他媒体设备?

这个问题的答案是否也适用于 Android 或 iOS 平板电脑或手机等具有集成摄像头和麦克风的移动设备?

track.getCapabilities() 返回的能力是四件事的交集:

  1. 曲目来源。 getUserMediagetDisplayMedia 轨道具有不同的功能。
  2. track.kind。例如。视频轨道不返回音频功能,反之亦然。
  3. 浏览器支持的功能。
  4. 设备支持的功能。

您可以像这样了解浏览器支持的功能:

console.log(navigator.mediaDevices.getSupportedConstraints());

然后,您通常依靠文档和规范来了解哪些功能适用于哪种方法,kind

较新版本的浏览器往往支持更多功能。并非所有浏览器都支持 getCapabilities()。例如,Firefox 不 yet,即使它在其他方面支持约束。

因此,在依赖某项功能之前,始终最好检查支持的内容(如上所示)。

对于您提到的特定功能,focusDistancecolorTemperature,它们是为 getUserMedia 返回的轨道定义的,但在 mediacapture-image 扩展规范中定义,因此它们应该如果他们得到支持,就会出现。他们的缺席意味着他们不受支持。