Firefox 22 mozGetUserMedia使用'screen'作为设备源

kni*_*ght 7 javascript firefox html5 webrtc getusermedia

对于Firefox 22中的WebRTC支持,已经有了一些嗡嗡声.这适用于对Firefox开发有所了解的人:Firefox中是否支持桌面屏幕捕获?

这项技术确实适用于Chrome 26+,它为屏幕捕获提供实验支持(使用"屏幕"作为设备源); 实现这一目标的代码(片段)是:

   // select any supported getUserMedia function
   navigator.getMedia = (navigator.getUserMedia || 
                         navigator.webkitGetUserMedia ||
                         navigator.mozGetUserMedia ||
                         navigator.msGetUserMedia);

  // if getUserMedia is not supported, do nothing 
  if( !navigator.getMedia ) return;

  // request for user media
  navigator.getMedia(
  {
     video : {
        mandatory : {
           // request 'screen' as a source media
           chromeMediaSource : 'screen'
        }
     }
  },

  // success
  function( localMediaStream )
  {
     // process local media stream...
  },

  // failure
  function( error )
  {
     // error handling
  });
Run Code Online (Sandbox Code Playgroud)

看看W3C文档,这些对象MediaSourceConstraints, MediaTrackConstraints, MediaTrackConstraintsSet尚未标准化.可能只是因为此功能在Firefox生产中出现,所以API太模糊了.了解当前的支持状态会很好.

Ale*_*ara 4

现在,这在 Firefox 中是可能的,但是出于安全考虑,支持隐藏在某些首选项后面。具体是media.getusermedia.*下面的偏好设置about:config

对 Mozilla 错误报告的评论说明了其中一些担忧:

现在我们已经重新设计,<input type="file">不再在屏幕上绘制完整路径,情况好多了。我们在绘制跨域图像和<iframe>s 等方面仍然存在问题。

即使用户选择加入,我也会担心这样的情况:“用户在一个选项卡中加载应用程序页面 A,在另一个选项卡中加载应用程序页面 B,页面 B 请求屏幕共享页面 A 的权限,该页面看起来不错,用户接受,然后应用程序将<iframe>FB 或 Gmail 或其他内容交换到页面 A 并获取内容。

虽然media.getusermedia.screensharing.enabled目前true默认处于发布通道中,但media.getusermedia.screensharing.allowed_domains实际上只有列入白名单的域才允许使用它。

如果您的域位于允许列表中,您可以通过使用属性中的以下键来使用它video

video: {
    mozMediaSource: "screen",
    mediaSource: "screen"
}
Run Code Online (Sandbox Code Playgroud)

Mozilla在 Firefox Nightly 和 Firefox Developer Edition 列入白名单的域上托管getUserMedia 测试页面。如果您使用这两个版本的 Firefox,您可以看到它的实际效果。或者,您可以将域添加到下面的白名单中about:config,并在发布和测试版渠道中使用它。