- InvalidStateError: 由于用户操作(例如事件处理程序)而运行的代码未调用。此事件的另一个潜在原因:
document
在其上下文中getDisplayMedia()
被调用的未完全激活;例如,它可能不是最前面的选项卡。 - NotAllowedError: 用户拒绝访问屏幕区域的权限,或者当前浏览实例无权访问屏幕共享。
- NotFoundError: 没有可供捕获的屏幕视频源。
- NotReadableError: 用户选择了一个屏幕、窗口、选项卡或其他屏幕数据源,但发生了硬件或操作系统级别的错误或锁定,从而阻止了所选源的共享。
- OverconstrainedError: 创建流后,应用指定
constraints
失败,因为无法生成兼容的流。 - TypeError:
constraints
调用时不允许指定的包含约束getDisplayMedia()
。这些不受支持的约束是advanced
和任何约束,这些约束 又具有名为min
or的成员exact
。 - AbortError: 其他失败情况
实例
async function startCapture(displayMediaOption) {
let captureStream = null;
try {
captureStream = await navigator.mediaDevices.getDisplayMedia(displayMediaOptions);
}catch(err) {
console.error("Error:" + err);
}
return captureStream;
}
1.3 查询媒体设备
说明
var enumeratorPromise = navigator.mediaDevices.enumerateDevices();
返回值:enumeratorPromise,如果调用成功则得到一个包含成员MediaDevicesInfo的数组,该数组列出了所有可用的媒体设备;如果调用失败,则得到空值。MediaDevicesInfo的定义如下所示
定义
interface MediaDeviceInfo {
readonly deviceId: string;
readonly groupId: string;
readonly kind: MediaDeviceKind;
readonly label: string;
toJSON(): any;
}
declare var MediaDeviceInfo: {
prototype: MediaDeviceInfo;
new(): MediaDeviceInfo;
};
type MediaDeviceKind = "audioinput" | "audiooutput" | "videoinput";
MediaDeviceInfo属性说明
属性 | 类型 | 说明 |
---|---|---|
deviceId | DOMString | 设备ID |
groupId | DOMString | 组ID |
label | DOMString | 设备的描述信息,如"Full HD webcam (1bcf:2284)" |
kind | MediaDeviceKind | 设备类型,取值为videoinput (视频输入设备)、audioinput (音频输入设备)、audiooutput (音频输出设备) |
使用实例
if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) {
console.log("enumerateDevices() not supported.");
return;
}
// List cameras and microphones.
navigator.mediaDevices.enumerateDevices()
.then(function(devices) {
devices.forEach(function(device) {
console.log(device.kind + ": " + device.label +
" id = " + device.deviceId);
});
})
.catch(function(err) {