Screen Capture API
Screen Capture API 允许网站捕获屏幕共享媒体流,实现共享屏幕功能
使用
调用 MediaDevices 接口的 getDisplayMedia() 方法捕获屏幕共享媒体流
方法可以传递一个可选的配置项参数,参数结构如下:
video参数,同MediaDevices接口的getUserMedia()方法,默认为trueaudio参数,同MediaDevices接口的getUserMedia()方法,默认为falsecontroller参数,接收一个 CaptureController 对象,可用于进一步操作捕获会话preferCurrentTab参数,接收一个布尔值,表示是否将当前标签页设置为最突出的选择selfBrowserSurface参数,接收exclude或include之一,指示是否应当允许捕获当前标签页,默认为excludesystemAudio参数,接收exclude或include之一,指示是否应当包含系统音频,默认为includesurfaceSwitching参数,接收exclude或include之一,指示是否应当显示动态切换共享标签页的控件,默认为excludemonitorTypeSurfaces参数,接收exclude或include之一,指示是否应当包含显示界面,默认为include
方法返回一个兑现一个 MediaStream 的 Promise
若 controller 参数已传递给一个屏幕媒体流,或当前未处于粘性激活状态、完全激活状态、完全聚焦状态之一,方法抛出 InvalidStateError 异常
若 video 参数被置为 false,audio 参数或 video 参数之一包含 advanced 选项或 min 属性或 exact 属性,方法抛出 TypeError 异常
若传递的限制屏幕的参数 max 的值小于可约束属性支持的下限,即此时无法捕获符合参数限制的屏幕媒体流,或应用参数限制失败,方法抛出 OverconstrainedError 异常
若无法获得对应的屏幕媒体流,方法抛出 NotFoundError 异常
若用户拒绝授权使用屏幕媒体流的权限,或用户代理网页限制使用屏幕共享,方法抛出 NotAllowedError 异常
若因为操作系统/程序/网页限制无法提供媒体流,抛出 NotReadableError 异常
若因为其他未知原因无法提供媒体流,抛出 AbortError 异常
CaptureController 简介:
可调用其构造方法创建一个
CaptureController实例可调用其
setFocusBehavior()方法设置其聚焦策略,传入参数可以为focus-captured-surface(转移焦点至捕获界面)或no-focus-change(不转移焦点)
相关参数
displaySurface参数,指定显示界面的类型,值为monitorwindowbrowser之一logicalSurface参数,指定是否为逻辑显示界面,返回一个布尔值cursor参数,指定是否将光标包含在显示界面中,值为neveralwaysmotion之一restrictOwnAudio参数,控制是否尝试从移除由当前文档产生的音频,返回一个布尔值suppressLocalAudioPlayback参数,控制是否将捕获的本地音频转发到本地扬声器设备,返回一个布尔值
这些参数被拓展至以下一些结构:
MediaTrackSupportedConstraints结构MediaTrackConstraintSet结构(从而拓展至MediaTrackConstraints结构)MediaTrackSettings结构MediaTrackCapabilities(不含restrictOwnAudio与suppressLocalAudioPlayback参数)结构
这些参数在屏幕共享的媒体流中可用
示例
权限策略
该 API 调用受到 display-capture 权限策略的控制,可以通过 Permissions-Policy 响应头指定,或通过 <iframe> 标签的 allow 属性指定
默认值是 self,即允许当前源的浏览上下文使用该 API
权限 API
该 API 每次调用都需要用户授予 display-capture 权限(即不会将该权限设置为 granted),可以调用 Permission.query() 方法检查用户是否拒绝授予该权限
类型
1 | interface MediaDevices { |
链接
Screen Capture API
https://skyclouds2001.github.io/2023/12/18/Screen-Capture-API/

