iTa*_*MaR 3 javascript localization webrtc getusermedia
我使用“faceingMode”约束来在两个摄像头之间切换,但我无法完全确定用户端是否有“环境”摄像头(后置摄像头)..这还不足以计数enumerateDevices 函数返回的 Promise 的“videoinput”。
我尝试搜索它,发现的只是使用视频 MediaTrack 标签并搜索包含“face back”字符串,该字符串在所有浏览器(例如 IOS)中似乎并不恒定。
我确信一定有更好的方法:)
这里有第二个答案。对于我正在做的事情来说,前置( facingMode:'user')和后置( )摄像头的选择是一个问题。facingMode:'environment'
.getUserMedia()如果您有相机的 开放流,则可以知道您正在使用哪个相机。stream.getTracks[0].getCapabilities()返回一个带有facingMode:'user'orfacingMode:'environment'字段的对象。但是您必须已经向特定设备打开一个流才能获得此信息。
以下是我在移动设备测试场中使用多个设备时发现的结果。device这些是生成的条目的顺序.enumerateDevices()。
tl;dr:在 iOs 设备上,前置摄像头是列表中的第一个视频输入设备,后置摄像头是第二个。 在 Android 设备上,前置摄像头的device.label值中包含字符串“front”,而后置摄像头的值包含字符串“back”。
device.label项目全部本地化为当前选择的国家语言。device.kind:'videoinput'。以下是我从我尝试过的每台 iOS 设备上获得的设备标签列表(auf Deutsch):\n您可以在 iPhone 上告诉您\xe2\x80\x99re
\nnavigator.userAgent.indexOf(' iPhone ') >= 0 \nRun Code Online (Sandbox Code Playgroud)\n您可以在 iPad 上告诉您\xe2\x80\x99re
\n typeof navigator.maxTouchPoints === 'number' \n && navigator.maxTouchPoints > 2\n && typeof navigator.vendor === 'string'\n && navigator.vendor.indexOf('Apple') >= 0\nRun Code Online (Sandbox Code Playgroud)\n请注意,iPad Safari 现在撒谎并声称它是英特尔 Mac。它显示了这个用户代理字符串:
\n\n\nMozilla/5.0(Macintosh;Intel Mac OS X 10_15_6)AppleWebKit/605.1.15(KHTML,如 Gecko)版本/14.0.1 Safari/605.1.15
\n
Android 设备:“device.label”项目未本地化。
\n我查看的设备有不同的 device.label 列表。但我发现的相机都有字符串front或back在 device.label 中。
运行 Android 11 的 Pixel 3A 具有此设备列表。
\n运行 Android 9 的三星 SM-A205F 拥有这些设备。
\n这列举了两种不同的前置自拍摄像头。第一个提供比第二个更高的分辨率。
\n运行 Android 6.0.1 的三星 SM-G925I
\n顺便说一下,结果并.getSupportedConstraints()没有多大帮助:iOS 和 Android 都给出了facingMode:true.
| 归档时间: |
|
| 查看次数: |
8291 次 |
| 最近记录: |