#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)