代码之家  ›  专栏  ›  技术社区  ›  Damien Golding

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

  •  1
  • Damien Golding  · 技术社区  · 6 年前

    我正在将screenshare与getUserMedia一起用于我正在开发的web应用程序。

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

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

    1 回复  |  直到 6 年前
        1
  •  2
  •   Kaiido trincot    6 年前

    我不太清楚Chrome未指定的实现是如何运行的,但是的,您通常必须听您的VideoTrack onended 事件

    此代码段应该可以工作 仅在FF中 ,这是唯一允许非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