Chrome: воспроизводить звук на двух выходах с помощью HTMLAudioElement.setSinkId - PullRequest
3 голосов
/ 08 июня 2019

Я хочу воспроизвести одно и то же аудио MediaStream на двух разных устройствах вывода аудио со следующим кодом:

const audio0 = new Audio('/audio.mp3')
audio0.play()

const stream = audio0.captureStream()

const audio1 = new Audio()
audio1
  .setSinkId('552a19eb3a0e0c496c1967d4d503f1fe78f66eb213b3bea48ba5b2f672bb1241')
  .then(() => {
    console.log('audio1 setSinkId was successful', audio1.sinkId)
  })
  .catch(err => {
    console.log('audio1 setSinkId failed', err.name, err.message)
  })
audio1.srcObject = stream

Вызов setSinkId выполнен успешно, и audio1.sinkId настроен на правильный идентификатор устройства * 1005.* (внутренние динамики), однако, в результате получается, что audio0 и audio1 воспроизводятся на устройстве 'default' (парные наушники Bluetooth).

Я ожидаю, что audio0 будет воспроизводиться на устройстве по умолчанию, а audio1 должно воспроизводиться на другом, указанный в deviceId 'ID'.

Любопытно, что если я setSinkId audio0 для воспроизведения на устройстве '[ID]' и просто позволяю audio1 воспроизводиться по умолчанию, он работает, я слышу звук на обоих устройстваходновременно.

const audio0 = new Audio('/audio.mp3')
.setSinkId('552a19eb3a0e0c496c1967d4d503f1fe78f66eb213b3bea48ba5b2f672bb1241')
  .then(() => {
    console.log('audio0 setSinkId was successful', audio0.sinkId)
  })
  .catch(err => {
    console.log('audio0 setSinkId failed', err.name, err.message)
  })
audio0.play()

const stream = audio0.captureStream()

const audio1 = new Audio()
audio1.srcObject = stream
...