MediaDevices: phương thức enumerateDevices()
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since August 2023.
Secure context: This feature is available only in secure contexts (HTTPS), in some or all supporting browsers.
Phương thức enumerateDevices() của giao diện MediaDevices yêu cầu một danh sách các thiết bị đầu vào và đầu ra phương tiện hiện có, chẳng hạn microphone, camera, tai nghe, v.v.
Promise trả về sẽ được resolve thành một mảng các đối tượng MediaDeviceInfo mô tả các thiết bị.
Danh sách trả về sẽ bỏ qua các thiết bị bị chặn bởi Permission Policy của tài liệu: microphone, camera, speaker-selection (cho thiết bị đầu ra), v.v.
Quyền truy cập một số thiết bị không mặc định còn bị điều tiết bởi Permissions API, và danh sách sẽ bỏ qua các thiết bị mà người dùng chưa cấp quyền rõ ràng.
Cú pháp
enumerateDevices()
Tham số
Không có.
Giá trị trả về
Một Promise được resolve với một mảng các đối tượng MediaDeviceInfo.
Mỗi đối tượng trong mảng mô tả một thiết bị đầu vào hoặc đầu ra phương tiện có sẵn.
Thứ tự có ý nghĩa: các thiết bị mặc định sẽ được liệt kê trước.
Ngoài thiết bị mặc định, chỉ những thiết bị đã được cấp quyền mới được xem là "có sẵn".
Nếu thiết bị là thiết bị đầu vào, một đối tượng InputDeviceInfo sẽ được trả về thay thế.
Nếu việc liệt kê thất bại, promise sẽ bị reject.
Yêu cầu bảo mật
Việc truy cập API này bị ràng buộc bởi các điều kiện sau:
- Phương thức phải được gọi trong một secure context.
- Tài liệu phải đang hoạt động hoàn chỉnh và trạng thái hiển thị phải là "visible".
Ví dụ
Ví dụ sau xuất danh sách các thiết bị mà trình duyệt của bạn hỗ trợ.
if (!navigator.mediaDevices?.enumerateDevices) {
console.log("enumerateDevices() not supported.");
} else {
// Liệt kê camera và microphone.
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}`);
});
}
Kết quả có thể là:
videoinput: id = csO9c0YpAf274OuCPUA53CNE0YHlIr2yXCi+SqfBZZ8= audioinput: id = RKxXByjnabbADGQNNZqLVLdmXlS0YkETYCIbg+XxnvM= audioinput: id = r2/xw1xUPIyZunfV1lGrKOma5wTOvCkWfZ368XCndm0=
hoặc nếu một hay nhiều MediaStream đang hoạt động hoặc quyền duy trì đã được cấp:
videoinput: FaceTime HD Camera (Built-in) id=csO9c0YpAf274OuCPUA53CNE0YHlIr2yXCi+SqfBZZ8= audioinput: default (Built-in Microphone) id=RKxXByjnabbADGQNNZqLVLdmXlS0YkETYCIbg+XxnvM= audioinput: Built-in Microphone id=r2/xw1xUPIyZunfV1lGrKOma5wTOvCkWfZ368XCndm0=
Thông số kỹ thuật
| Specification |
|---|
| Media Capture and Streams> # dom-mediadevices-enumeratedevices> |
Tương thích trình duyệt
Xem thêm
MediaDevices.getUserMedia- WebRTC - trang giới thiệu của API
- Media Capture and Streams API - API cho các đối tượng media stream
- Taking webcam photos - bài hướng dẫn dùng
getUserMedia()để chụp ảnh thay vì video