MediaDevices: enumerateDevices() 方法
enumerateDevices() 方法屬於 MediaDevices 介面,用於請求當前可用的媒體輸入和輸出裝置列表,例如麥克風、攝像頭、耳機等。返回的 Promise 會解析為一個 MediaDeviceInfo 物件陣列,每個物件描述一個裝置。
返回的列表將省略任何被文件 許可權策略 阻止的裝置:microphone、camera、speaker-selection(用於輸出裝置)等。對特定非預設裝置的訪問也受 Permissions API 的控制,並且列表將省略使用者未明確授予許可權的裝置。
語法
js
enumerateDevices()
引數
無。
返回值
一個 Promise,解析為一個 MediaDeviceInfo 物件陣列。陣列中的每個物件都描述了一個可用的媒體輸入或輸出裝置。順序很重要 — 預設的捕獲裝置將首先列出。
除了預設裝置外,只有已授予許可權的裝置才是“可用”的。
如果媒體裝置是輸入裝置,則會返回一個 InputDeviceInfo 物件。
如果列舉失敗,則 Promise 會被拒絕。
安全要求
API 的訪問受以下約束:
- 必須在 安全上下文 中呼叫該方法。
- 文件必須完全活動且其可見性必須是“visible”。
示例
以下是使用 enumerateDevices() 的示例。它會輸出 裝置 ID 列表,如果可用,還會顯示裝置名稱。
js
if (!navigator.mediaDevices?.enumerateDevices) {
console.log("enumerateDevices() not supported.");
} else {
// List cameras and microphones.
navigator.mediaDevices
.enumerateDevices()
.then((devices) => {
devices.forEach((device) => {
console.log(`${device.kind}: ${device.label} id = ${device.deviceId}`);
});
})
.catch((err) => {
console.error(`${err.name}: ${err.message}`);
});
}
這可能會產生
videoinput: id = csO9c0YpAf274OuCPUA53CNE0YHlIr2yXCi+SqfBZZ8= audioinput: id = RKxXByjnabbADGQNNZqLVLdmXlS0YkETYCIbg+XxnvM= audioinput: id = r2/xw1xUPIyZunfV1lGrKOma5wTOvCkWfZ368XCndm0=
或者,如果一個或多個 MediaStream 處於活動狀態或已授予持久許可權
videoinput: FaceTime HD Camera (Built-in) id=csO9c0YpAf274OuCPUA53CNE0YHlIr2yXCi+SqfBZZ8= audioinput: default (Built-in Microphone) id=RKxXByjnabbADGQNNZqLVLdmXlS0YkETYCIbg+XxnvM= audioinput: Built-in Microphone id=r2/xw1xUPIyZunfV1lGrKOma5wTOvCkWfZ368XCndm0=
規範
| 規範 |
|---|
| 媒體捕獲和流 # dom-mediadevices-enumeratedevices |
瀏覽器相容性
載入中…
另見
MediaDevices.getUserMedia- WebRTC - 該 API 的介紹頁面
- 媒體捕獲和流 API - 用於媒體流物件的 API
- 拍攝網路攝像頭照片 - 關於使用
getUserMedia()拍攝照片而非影片的教程。