确定具有指定面向模式的相机的设备 ID

the*_*oot 2 javascript navigator mediadevices

我正在编写代码以允许页面内select元素选择相机。默认相机应该是“环境”相机,而其余的应该在后面列出。

使用以下调用,我可以从适当的面向“环境”的摄像头流式传输视频:

navigator.mediaDevices.getUserMedia({ video: { facingMode: "environment"} }).then(function (stream) {
    // display stream on web page
    ...
});
Run Code Online (Sandbox Code Playgroud)

同样,我可以使用以下方法获取可用设备列表:

navigator.mediaDevices.enumerateDevices().then(
    devices => {
        // build list of options
    }
);
Run Code Online (Sandbox Code Playgroud)

我存储deviceId每个选项的 ,并使用它来显示来自那个运行良好的相机的提要。

但是,默认选择的选项不一定是“环境”相机。并且从返回的流对象getUserMedia似乎没有一种简单的方法来确定deviceId提供该流的设备。我似乎也找不到任何其他方法来确定面向“环境”的相机。

这是不可能的还是getDeviceIdForFacingMode我刚刚错过了某种功能?

the*_*oot 7

在进一步挖掘对象之后,我最终发现以下工作可以deviceId从流中获取:

stream.getVideoTracks()[0].getSettings().deviceId
Run Code Online (Sandbox Code Playgroud)

我认为在其他情况下,[0]如果出于某种原因,您的流涉及多个视频轨道,您可能需要小心,但就我而言,这很有效。一般来说,我希望您可以在stream.getVideoTracks()[i]( MediaStreamTrack ) 和stream.getVideoTracks()[i].getSettings()( MediaTrackSettings )之间获得所需的任何信息。