处理本机取消 getUserMedia 屏幕共享的正确方法是什么?

What is the correct way to handle native cancelling of getUserMedia screenshare?

我正在将屏幕共享与 getUserMedia 一起用于我正在开发的 Web 应用程序。

我目前正在使用 Chrome 和 Chrome 扩展,使用下面的 API 来实现该功能,但该功能在 Firefox 中也是可能的,并且可能成为本机可用(我相信在过去是可能的)通过 getDisplayMedia 或将来的其他方式。 https://developer.chrome.com/extensions/desktopCapture

在屏幕共享期间,浏览器底部会显示一个本机对话框以停止屏幕共享。我想要一种处理此事件的方法,但我不知道实现此目的的通用标准方法。有没有合适的方法来做到这一点(最好在所有 API 中),或者我应该通过跟踪事件来实现这个?

我不太确定 Chrome 未指定实现的行为方式,但是是的,您通常必须收听 VideoTrack 的 onended 事件。

此代码段应仅在 FF 中有效,FF 是唯一允许 non-chrome 页面访问此功能的代码段。

navigator.mediaDevices.getUserMedia({video: {mediaSource: 'screen'}}).then(stream => {
  document.getElementById('vid').srcObject = stream;
  const v_track = stream.getVideoTracks()[0];
  v_track.onended = e => console.log('stopped');
}).catch(console.error);
<video id="vid" autoplay></video>

如果它甚至不起作用(因为 StackSnippets© 严格的安全规则),这里是 fiddle