MediaStreamTrack.kind 是只读属性,返回 "audio" 或 "video" 字符串以标识轨道类型;可通过 stream.getTracks() 遍历并判断 track.kind,用于分离音视频、控制渲染、WebRTC 发送策略等场景。

MediaStreamTrack.Kind 是 MediaStreamTrack 接口的一个只读属性,返回字符串 "audio" 或 "video",直接表明该轨道(track)的媒体类型。它不是用来“判断当前流”,而是用来识别某个具体 MediaStreamTrack 实例的类型。
如何获取并判断 track 的 kind
当你从 getUserMedia、MediaStream 或 RTCPeerConnection 中获得一个 track 时,可直接访问其 kind 属性:
- 调用
navigator.mediaDevices.getUserMedia({ video: true, audio: true })后,得到的MediaStream包含多个 track,可用stream.getTracks()遍历 - 每个 track 对象都有
track.kind,值为"audio"或"video" - 也可用
track.contentHint或track.label辅助判断(但不可靠,仅作参考)
实际代码示例
以下代码演示如何分离音视频 track:
navigator.mediaDevices.getUserMedia({ video: true, audio: true })
.then(stream => {
stream.getTracks().forEach(track => {
if (track.kind === 'video') {
console.log('这是视频轨道:', track.label);
// 可绑定到 <video> 元素,或做视频处理
} else if (track.kind === 'audio') {
console.log('这是音频轨道:', track.label);
// 可用于音频分析、静音控制等
}
});
});
注意边界情况
kind 值严格由浏览器根据媒体源生成,开发者不能修改。需注意:
立即学习“前端免费学习笔记(深入)”;
- 屏幕共享时,
getDisplayMedia返回的 video track 的kind仍是"video" - 某些虚拟设备(如虚拟摄像头、VoIP 软编码音频)仍会正确设置
kind - 不存在
"screen"或"mixed"等其他值;规范只定义"audio"和"video" - 若 track 已停止(
track.readyState === "ended"),kind仍有效,但不再传输数据
结合常用场景使用
在音视频应用中,常配合以下操作:
- 动态禁用/启用:用
track.enabled = false关闭某类轨道(如关闭摄像头但保留麦克风) - 渲染控制:只把
kind === "video"的 track 添加到<video>元素的srcObject - WebRTC 发送策略:在
RTCPeerConnection.addTrack(track, stream)前按 kind 分类处理 - 权限与状态同步:监听
track.onmute/onunmute时,结合kind区分是音频静音还是视频停用



















