Я строю приложение SIP/WEBRTC с SIP.JS, и я внедрил поток переподключения и пересмотра для того, когда пользователь меняет сети в середине вызова (например, Wi-Fi → Mobile Data). Тем не менее, я сталкиваюсь с критической проблемой: < /p>
проблема < /strong> < /p>
[*] После изменения сети: < /p>
< /li>
< /li>
Принят. < /p>
< /li>
Сеанс остается активным (без ошибок). < /p>
< /li>
Но ни одна из сторон не слышна. безупречно. Аудио возобновляется правильно после перезапуска льда. const renegotiate = (session: JsSIP.RTCSession): Promise => {
return new Promise((resolve, reject) => {
if (!session) return reject("No session to renegotiate");
console.info("Starting renegotiation with ICE restart...");
session.renegotiate(
{
rtcOfferConstraints: {
offerToReceiveAudio: 1,
offerToReceiveVideo: 0,
iceRestart: true,
},
},
() => resolve(),
(err) => reject(err)
);
});
};
< /code>
in peerconnection.OniceConnectionStateChange я называю renegotiate (), если подключение к льду «отключено» или «не удалось». После этого звук возобновляется на обоих концах. const localStream = sdh.localMediaStream;
if (localStream) {
const audioTrack = localStream.getAudioTracks()[0];
if (audioTrack) {
pc.getSenders().forEach(sender => {
if (sender.track?.kind === 'audio') {
sender.replaceTrack(audioTrack);
}
});
}
}
< /code>
< /li>
Перезагрузить лед с повторным инвитом: < /p>
const offer = await pc.createOffer({ iceRestart: true });
await pc.setLocalDescription(offer);
await session.invite({
requestDelegate: {
onAccept: response => {
console.log('Re-INVITE accepted');
setupRemoteMedia(session, false);
},
onReject: () => {
console.warn('Re-INVITE rejected');
}
},
sessionDescriptionHandlerOptions: {
constraints: { audio: true, video: false }
}
});
< /code>
< /li>
< /ol>
re-invite принимается, сигнализация и состояние льда в порядке, но звук не получен или отправлено. "Connected". Stun: stun.l.google.com: 19302. < /p>
< /li>
предоставляются разрешения; Устройства для медиа действительно. ^0.21.2
[*]JsSIP: 3.10.0
[*]Browsers: Chrome (latest), Edge
[*]App: Next.js + WebRTC
< /ul>
что я хочу знать < /strong> < /p>
Любые известные обходные пути или лучшие практики для обработки сети изменение + восстановление звука в sip.js? />
библиотека < /th>
reconnect < /th>
oudio восстановлен < /th>
< /tr>
< /thead>
jssip < /td> /> Да < /td>
Да < /td>
< /tr>
td>sip.js
Да < /td>
нет < /td>
< /tr>
< /td>
< /td>
< /tr>
< /td>
< /tr>
>
Подробнее здесь: https://stackoverflow.com/questions/797 ... s-in-jssip