3

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

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

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

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

navigator.mediaDevices.enumerateDevices().then(
    devices => {
        // build list of options
    }
);

我存储了deviceId每个选项,并使用它来显示来自该相机的供稿,效果很好。

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

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

4

1 回答 1

8

在深入挖掘对象之后,我最终能够发现以下工作可以deviceId从流中获取:

stream.getVideoTracks()[0].getSettings().deviceId

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

于 2019-09-26T17:32:13.747 回答