我使用导航器函数-navigator.mediaDevices.enumerateDevices()
在我的移动的浏览器应用程序中获取媒体设备列表。
navigator.mediaDevices.enumerateDevices().then(function(devices) {
console.log("devices", devices);
});
我得到的音频输入和音频输出设备对象值交换如下:
[
{
"deviceId": "default",
"kind": "audioinput",
"label": "Default",
"groupId": "41a111f571a1171ca91c5428d2ad8806a66bb6d7c5812f779161151a706641a1"
},
{
"deviceId": "bbf2c347dbfc70b9e37b16be622c4973a74269c7f53d4162adab0c09614514d1",
"kind": "audioinput",
"label": "Speakerphone",
"groupId": "e8dc20cc0a8dd33f65085c2f06bb8424105eb230c54237c343b8f8ff960559f3"
},
{
"deviceId": "704cd1e8449390f5bb3fd1615a7637753f4ad019d4e6bb3f7c36690f58f2536d",
"kind": "audioinput",
"label": "Headset earpiece",
"groupId": "1f2f370cbbe3f57fe3a8e901dc8f82c8d751f690520c261b293b1480e7959218"
},
{
"deviceId": "38f008a97b8fd5ff8d367c336fcb7120fdc499375fb44459980d60395516b955",
"kind": "videoinput",
"label": "camera2 1, facing front",
"groupId": "3b073bb17b0c56c5f8e6f143d6eeebcbfac5ec2ebc8ff2bc852f66745a63c591"
},
{
"deviceId": "bbf2c347dbfc70b9e37b16be622c4973a74269c7f53d4162adab0c09614514d1",
"kind": "videoinput",
"label": "camera2 0, facing back",
"groupId": "5a8b08633d9b089d234fc7bb0d67fae394e90a4f7948128562251d17408d99d4"
},
{
"deviceId": "default",
"kind": "audiooutput",
"label": "Default",
"groupId": "default"
}
]
我已经在其他三个安卓移动的浏览器上试过了,它也在交换这些设备上的值。在PC上它工作正常。为什么它在手机浏览器上交换这些值?
此外,我已经检查了这个网页,以验证-webrtc input-output devices,在这里它显示扬声器在音频输入设备列表中,你可以看到下面的截图。
2条答案
按热度按时间q5iwbnjs1#
我知道这是旧的,但我有同样的问题,newsets Chrome,Android 12.我已经测试了https://webrtc.github.io/samples/src/content/devices/input-output/和在Chrome音频输入被列为输出和输出作为输入.所以我得到作为输入:
作为输出,我得到:
在FireFox的同一部手机上,它工作正常。当然,我不能选择输出,因为FF不支持它,但输入只列出了标准,这是它应该的。
4uqofj5v2#
这可能与您无法在Android设备上设置HTML元素的sinkId有关(https://caniuse.com/?search=setsinkid)。而且,我假设在您的情况下,免提电话指的是系统默认音频(包括内部系统扬声器和相关的麦克风),并且您的耳机也有麦克风,因此也显示为输入。因此,在这种情况下,似乎你需要得到用户媒体再次与免提电话设备,这将导致输入来自内部麦克风,但似乎输出也得到设置为免提电话输出。
另请注意,为什么默认设备的groupId与单独列出的设备的实际groupId不同是一个麻烦,因为不容易弄清楚默认设备实际上是哪一个。