WebRTC Принудительно запускает стерео в Chrome, отредактировав конфигурацию sdp

#javascript #audio #webrtc #streaming #sdp

Вопрос:

Я пытаюсь реализовать обходной путь для того, что кажется известной проблемой во всех браузерах, кроме firefox, где аудиопоток WebRTC понижен до моно со стерео.

По-видимому, это происходит из-за того, что описание локального сеанса по умолчанию имеет значение stereo=0 в согласованном файле конфигурации sdp, который создается на основе ограничений потока.

Я включил следующие ограничения:

     audio: { deviceId: audioSource ? { exact: audioSource } : undefined,
      channelCount:2, 
      echoCancellation: false, // disabling audio processing
      googAutoGainControl: false,
      googNoiseSuppression: false,
      googHighpassFilter: false
    },
 

а затем я пытаюсь добавить необходимое исправление в файл sdp, прежде чем устанавливать локальное описание, используя процесс, называемый SDP munging https://webrtcglossary.com/sdp-munging/:

   peerConnection
    .createOffer({ offerToReceiveAudio: true, offerToReceiveVideo: false })
    .then( desc => desc.sdp=desc.sdp.replace('useinbandfec=1','useinbandfec=1; stereo=1'))
    .then(desc => peerConnection.setLocalDescription(desc))
    .then(() => socket.emit("offer", id, peerConnection.localDescription));
 

ошибка, которую я получаю :

трансляция.js:53 Не поймано (в обещании) Ошибка типа: Не удалось выполнить «setLocalDescription» в «RTCPeerConnection»: Предоставленное значение не относится к типу «RTCSessionDescriptionInit».

Это исправление было рекомендовано рядом источников по этой теме, но каждый раз, когда я пытаюсь изменить файл до установки локального описания, я получаю сообщение об ошибке типа, что это больше не описание RTCSESSION

Я надеюсь, что я неправильно выполняю работу SDP и что есть лучший способ сделать это

Комментарии:

1. решением было использовать асинхронную функцию : async function run() { const offer = await peerConnection.createOffer(); offer.sdp = offer.sdp.replace('useinbandfec=1', 'useinbandfec=1; stereo=1; sprop-stereo=1') await peerConnection.setLocalDescription(offer)