确定具有指定朝向模式的相机的设备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).

之间获得你需要的任何信息