这个问题可能是由于 Chrome 在 Android 设备上的某些特定行为引起的。为了解决这个问题,你可以通过监听 Android 设备的音频状态来手动触发 MediaStreamTrack.onended
事件。
下面是一个可能的解决方案示例:
// 创建一个媒体流对象
navigator.mediaDevices.getUserMedia({ audio: true })
.then(function(stream) {
// 获取音频轨道对象
var audioTrack = stream.getAudioTracks()[0];
// 监听音频状态变化
audioTrack.addEventListener('ended', function() {
// 手动触发 onended 事件
audioTrack.onended();
});
// 选择外部麦克风
audioTrack.applyConstraints({ deviceId: 'external-microphone-id' })
.then(function() {
// 麦克风选择成功后的操作
})
.catch(function(error) {
console.log('无法选择外部麦克风:', error);
});
})
.catch(function(error) {
console.log('无法获取媒体流:', error);
});
在这个示例中,我们首先创建了一个媒体流对象,并获取了音频轨道对象。然后,我们使用 addEventListener
方法监听音频轨道的 ended
事件。当该事件触发时,我们手动调用 audioTrack.onended()
方法来触发 MediaStreamTrack.onended
事件。
请注意,你需要将 'external-microphone-id'
替换为你的外部麦克风的设备 ID。你可以使用 navigator.mediaDevices.enumerateDevices()
方法获取可用设备的列表,并查找外部麦克风的设备 ID。
这个解决方案可以确保在外部麦克风断开时正常触发 MediaStreamTrack.onended
事件。