MacOS Safari调用getUserMedia后旧MediaStream AudioTrack状态为ended
多摄像头音频轨道在MacOS WebKit环境下自动终止问题
问题概述
MacOS Ventura 13.0 环境下(WebKit内核浏览器)开发多摄像头录制应用时,出现特有异常:每次通过getUserMedia新增一个包含摄像头音视频的MediaStream后,前一个流的AudioTrack会自动变为ended状态,仅最新流的音频能正常工作;VideoTrack不受任何影响。该问题在Chrome浏览器中完全不存在,所有AudioTrack始终保持live状态。
复现流程
- 用户点击「获取设备」按钮,触发
getUserMedia调用以获取音视频权限 - 调用
enumerateDevices获取系统所有音视频设备列表 - 用户选择某摄像头并点击「添加」,携带该设备ID调用
getUserMedia,获取对应摄像头的音视频流,此时该流的所有轨道状态均为live,功能正常 - 用户选择另一摄像头并点击「添加」,再次携带设备ID调用
getUserMedia获取新的音视频流 - 立即检查前一个MediaStream的AudioTrack,其
readyState已变为ended,仅最新流的AudioTrack状态正常
已尝试的无效解决方案
- 禁用video元素的
autoplay、playsinline属性,启用controls属性 - 在调用
getUserMedia前后,手动禁用/启用已存在的音频轨道
内容的提问来源于stack exchange,提问作者Filip Szutkowski
相关产品推荐
相关产品推荐

