我正在使用Flutter制作一个视频通话应用程序,我目前正在使用以下代码获取视频流:
Future<MediaStream> _getLocalVideoStream(dynamic navigator) async {
_loadCamerasInfo();
return navigator.mediaDevices.getUserMedia({
"video": {"deviceId":"0"},
"audio": false
});
}
这应该会打开后置摄像头,但前置摄像头却被打开了,我还检查了所有的媒体设备,如下所示:
List<MediaDeviceInfo> deviceInfo =
await navigator.mediaDevices.enumerateDevices();
迭代deviceInfo
中每个项目的deviceId属性将得到以下值:0,1,2,3
,这意味着0
应该对应于其中一个摄像头,但无论我在_getLocalVideoStream
函数中使用此列表中的哪个ID,都会使用相同的默认前置摄像头。
我如何纠正这个问题,以便我可以在设备的不同摄像头之间循环?(我正在一个真实的的Android设备上测试这个问题)
1条答案
按热度按时间8zzbczxx1#
首先,当你使用
navigator.mediaDevices.enumerateDevices();
时,它会返回所有的mediaDevices,包括麦克风,耳机和摄像头,所以deviceId0可能不是摄像头,而是麦克风。其次,当你列出你的限制:
这不是设备ID的约束,这意味着它可能会忽略您对设备ID的请求,而只是选择它找到的第一个视频设备。您可以修改约束,如下所示:
使用确切的关键字将强制它使用该ID。
此外,如果您不想搜索特定的deviceId并使用它。您可以使用一个有用的关键字“facingMode”,这主要适用于移动的设备。它可以用于设置您想要的相机类型的首选项。例如面向用户或面向环境。请看下面的示例: