mediastreamtrack.getsettings().width/height表示当前实际生效的视频输出尺寸,而非摄像头物理分辨率;其值受约束条件、设备能力等影响,可能随applyconstraints()动态变化。

MediaStreamTrack.getSettings() 不能直接获取“当前摄像头的分辨率”,它返回的是该轨道(track)**当前实际应用的配置参数快照**,其中 width 和 height 字段表示浏览器**尝试协商并已生效的视频尺寸**,但要注意:这不等于物理摄像头传感器分辨率,也不代表一定能稳定输出该尺寸——它受约束条件(constraints)、设备能力、系统负载等影响。
getSettings() 返回的 width/height 是什么
调用 track.getSettings() 得到的是该 MediaStreamTrack 当前运行时的设置对象。如果 track 来自 getUserMedia 且视频约束中指定了 { width: { ideal: 1280 }, height: { ideal: 720 } },而设备支持,那么 getSettings().width 很可能就是 1280,height 是 720。但它也可能是设备实际选中的值(例如 1280×720、640×480 或 1920×1080),取决于约束匹配结果。
关键点:
- 它反映的是**当前生效的输出尺寸**,不是摄像头最大能力
- 若未显式设置宽高约束,该值可能为
undefined或浏览器默认值(如 640×480) - 该值在 track 生命周期中可能变化(如动态调整约束后重新应用)
正确获取方式:结合 getCapabilities() 和 getSettings()
要较全面了解摄像头能力与当前状态,应配合使用:
-
track.getCapabilities()→ 查看设备支持的分辨率范围(width/height的min/max/step) -
track.getSettings()→ 查看当前实际使用的宽高 -
track.getConstraints()→ 查看上次调用applyConstraints()时设置的目标(不一定已生效)
示例代码:
const stream = await navigator.mediaDevices.getUserMedia({ video: true });
const videoTrack = stream.getVideoTracks()[0];
console.log('当前设置:', videoTrack.getSettings());
// → { width: 1280, height: 720, ... }
console.log('设备能力:', videoTrack.getCapabilities());
// → { width: { min: 640, max: 1920, step: 1 }, height: { ... }, ... }
console.log('当前约束:', videoTrack.getConstraints());
// → { width: { ideal: 1280 }, height: { ideal: 720 } }
注意兼容性与常见陷阱
getSettings() 在所有现代浏览器中均支持(Chrome 52+、Firefox 50+、Safari 11+、Edge 79+),但以下情况需留意:
- 音频 track 调用会返回空对象或不含
width/height字段 - track 已停止(
track.readyState === 'ended')时,getSettings()可能返回空对象或抛错 - 某些老旧安卓 WebView 或定制浏览器可能返回
undefined宽高,即使 track 正常工作 - 仅靠
getSettings()无法得知帧率、编码格式、是否启用 HDR 等高级参数(需查frameRate、advanced等字段)
动态监听分辨率变化(可选进阶)
如果应用需响应分辨率自动切换(如网络降级后浏览器缩放输出),可监听 track.onended 或结合 applyConstraints() 后轮询 getSettings(),但更可靠的方式是:在调用 applyConstraints() 后等待 promise resolve,再立即读取 getSettings()。
示例:
await videoTrack.applyConstraints({
width: { exact: 640 },
height: { exact: 480 }
});
console.log('应用后实际尺寸:', videoTrack.getSettings()); // 更可信
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











