确定具有指定朝向模式的相机的设备ID
Determine device ID of a camera with a specified facing mode
我正在编写代码以允许页内 select
元素选择相机。默认摄像头应该是 "environment" 摄像头,其余摄像头应该列在后面。
使用以下调用,我可以从适当的 "environment" 面向摄像头流式传输视频:
navigator.mediaDevices.getUserMedia({ video: { facingMode: "environment"} }).then(function (stream) {
// display stream on web page
...
});
同样,我可以使用以下方法获取可用设备列表:
navigator.mediaDevices.enumerateDevices().then(
devices => {
// build list of options
}
);
我为每个选项存储 deviceId
并使用它来显示来自那个工作良好的相机的提要。
不过,默认选择的选项不一定是"environment"相机。从 getUserMedia
返回的流对象似乎没有一种简单的方法来确定提供该流的设备的 deviceId
。我似乎也找不到任何其他方法来确定面向 "environment" 的摄像头。
这是不可能的,还是我刚刚错过了某种 getDeviceIdForFacingMode
功能?
在对对象进行更多挖掘之后,我最终发现以下方法可以从流中获取 deviceId
:
stream.getVideoTracks()[0].getSettings().deviceId
我假设在其他情况下,如果由于某种原因您的流涉及多个视频轨道,您可能需要小心 [0]
,但就我的目的而言,这很有效。一般来说,我希望你能在 stream.getVideoTracks()[i]
(MediaStreamTrack) and stream.getVideoTracks()[i].getSettings()
(MediaTrackSettings).
之间获得你需要的任何信息
我正在编写代码以允许页内 select
元素选择相机。默认摄像头应该是 "environment" 摄像头,其余摄像头应该列在后面。
使用以下调用,我可以从适当的 "environment" 面向摄像头流式传输视频:
navigator.mediaDevices.getUserMedia({ video: { facingMode: "environment"} }).then(function (stream) {
// display stream on web page
...
});
同样,我可以使用以下方法获取可用设备列表:
navigator.mediaDevices.enumerateDevices().then(
devices => {
// build list of options
}
);
我为每个选项存储 deviceId
并使用它来显示来自那个工作良好的相机的提要。
不过,默认选择的选项不一定是"environment"相机。从 getUserMedia
返回的流对象似乎没有一种简单的方法来确定提供该流的设备的 deviceId
。我似乎也找不到任何其他方法来确定面向 "environment" 的摄像头。
这是不可能的,还是我刚刚错过了某种 getDeviceIdForFacingMode
功能?
在对对象进行更多挖掘之后,我最终发现以下方法可以从流中获取 deviceId
:
stream.getVideoTracks()[0].getSettings().deviceId
我假设在其他情况下,如果由于某种原因您的流涉及多个视频轨道,您可能需要小心 [0]
,但就我的目的而言,这很有效。一般来说,我希望你能在 stream.getVideoTracks()[i]
(MediaStreamTrack) and stream.getVideoTracks()[i].getSettings()
(MediaTrackSettings).