在 Firefox 中使用 MediaStream API 捕获屏幕录制时,很难检测选定的屏幕共享窗口何时关闭。 MediaStreamTrack 对象提供了多个事件,例如结束和非活动,但当用户关闭所选窗口时不会触发这些事件。 注意:此问题特定于 Firefox,因为 Chrome、Safari 和 Edge 浏览器在这种情况下可以正常工作。 以下是我现在使用的代码:
screenRecordingStream.value =
await navigator.mediaDevices.getDisplayMedia(
displayMediaOptions
);
screenRecordingStream.value.getTracks().forEach((track) => {
track.addEventListener('ended', () => {
debugger;
if (isRecording.value) {
completionStatus.value = true;
stopMediaRecorder();
}
});
track.addEventListener('inactive', () => {
debugger;
if (isRecording.value) {
completionStatus.value = true;
stopMediaRecorder();
} else {
changeMode(1);
}
});
track.addEventListener('inactive', () => {
console.log('Track inactive');
// ...
});
track.addEventListener('mute', () => {
console.log('Track muted');
});
track.addEventListener('unmute', () => {
console.log('Track unmuted');
});
track.addEventListener('overconstrained', () => {
console.log('Track overconstrained');
});
track.addEventListener('readyStateChange', () => {
console.log('Track ready state changed');
});
});
我尝试在其他浏览器中测试它,它按预期工作。当选定的选项卡或窗口关闭时,录制停止。在 Firefox 中,当选定的选项卡或窗口未检测到事件时。
我在 Bugzilla 上报告了这个问题,并发现这是一个错误。该修复将在下一个 Firefox 更新版本 128 中进行。