Android 移动浏览器 - navigator.mediaDevices.enumerateDevices 方法返回交换的音频输入和输出设备值

问题描述 投票:0回答:3

我正在使用导航器功能 -

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"
  }
]

我已经在其他三个 Android 移动浏览器中尝试过此操作,它也会交换这些设备中的值。在 PC 上它工作正常。为什么它在移动浏览器中交换这些值?

此外,我还检查了此网页以验证 - webrtc 输入输出设备,这里它在音频输入设备列表中显示扬声器,如下面的屏幕截图所示。

javascript android google-chrome webrtc mobile-development
3个回答
1
投票

可能与您无法在Android设备上的HTML元素上设置sinkId有关(https://caniuse.com/?search=setsinkid)。而且,我假设在您的情况下,免提电话指的是系统默认音频(包括内部系统免提电话和关联的麦克风),并且您的耳机也有麦克风,因此也显示为输入。因此,在这种情况下,似乎您需要使用扬声器设备再次获取用户媒体,这将导致输入来自内部麦克风,但似乎输出也设置为扬声器输出。

另外说明一下,为什么默认的 groupId 与单独列出的设备的实际 groupId 不同是很麻烦的,因为不太容易找出默认值实际上是哪个设备。


0
投票

我知道这是旧的,但我有同样的问题,新闻集 Chrome,Android 12。我已经测试过 https://webrtc.github.io/samples/src/content/devices/input-output/ 在 Chrome 中,音频输入被列为输出,输出被列为输入。 所以我得到的输入是:

  • 标准
  • 免提电话
  • 耳机听筒

作为输出,我得到:

  • 标准

在同一部手机上的 FireFox 中运行正常。当然,我不能选择输出,因为 FF 不支持它,但输入只是列出标准,因为它应该。


0
投票

这是 Android 的一个错误:https://bugs.chromium.org/p/chromium/issues/detail?id=1255478#c11

我报告了这个问题,并一直在向 Google 团队提供反馈,但他们似乎并没有积极修复它。

© www.soinside.com 2019 - 2024. All rights reserved.