Правильная обработка SDPOffer при renegotiation от SFU
This commit is contained in:
@@ -81,30 +81,7 @@ export function CallProvider(props : CallProviderProps) {
|
||||
*/
|
||||
let packet = new PacketIceServers();
|
||||
send(packet);
|
||||
|
||||
//debug
|
||||
|
||||
setInterval(async () => {
|
||||
if(callState == CallState.ACTIVE){
|
||||
if(peerConnectionRef.current){
|
||||
const stats = await peerConnectionRef.current.getStats();
|
||||
stats.forEach((report) => {
|
||||
|
||||
if (report.type === "inbound-rtp" && !report.isRemote) {
|
||||
const kind = (report as any).kind || (report as any).mediaType;
|
||||
const bytesReceived = (report as any).bytesReceived ?? 0;
|
||||
const packetsReceived = (report as any).packetsReceived ?? 0;
|
||||
const packetsLost = (report as any).packetsLost ?? 0;
|
||||
|
||||
console.log(
|
||||
`[inbound ${kind}] bytesReceived=${bytesReceived}, packetsReceived=${packetsReceived}, packetsLost=${packetsLost}`
|
||||
);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}, 2000);
|
||||
}, [callState, peerConnectionRef]);
|
||||
}, []);
|
||||
|
||||
usePacket(28, async (packet: PacketIceServers) => {
|
||||
let iceServers = packet.getIceServers();
|
||||
@@ -130,7 +107,7 @@ export function CallProvider(props : CallProviderProps) {
|
||||
}, []);
|
||||
|
||||
usePacket(27, async (packet: PacketWebRTC) => {
|
||||
if(!activeCall || callState != CallState.WEB_RTC_EXCHANGE){
|
||||
if(callState != CallState.WEB_RTC_EXCHANGE && callState != CallState.ACTIVE){
|
||||
/**
|
||||
* Нет активного звонка или мы не на стадии обмена WebRTC сигналами, игнорируем
|
||||
*/
|
||||
@@ -178,18 +155,18 @@ export function CallProvider(props : CallProviderProps) {
|
||||
* SFU сервер отправил нам оффер, например при renegotiation, нам нужно его принять и
|
||||
* отправить ответ (ANSWER)
|
||||
*/
|
||||
const sdp = JSON.parse(packet.getSdpOrCandidate());
|
||||
await peerConnectionRef.current?.setRemoteDescription(new RTCSessionDescription(sdp));
|
||||
let answer = await peerConnectionRef.current?.createAnswer();
|
||||
await peerConnectionRef.current?.setLocalDescription(answer);
|
||||
let answerSignal = new PacketWebRTC();
|
||||
answerSignal.setSignalType(WebRTCSignalType.ANSWER);
|
||||
answerSignal.setSdpOrCandidate(JSON.stringify(answer));
|
||||
send(answerSignal);
|
||||
info("Received WebRTC offer, set remote description and sent answer");
|
||||
return;
|
||||
const sdp = JSON.parse(packet.getSdpOrCandidate());
|
||||
await peerConnectionRef.current?.setRemoteDescription(new RTCSessionDescription(sdp));
|
||||
let answer = await peerConnectionRef.current?.createAnswer();
|
||||
await peerConnectionRef.current?.setLocalDescription(answer);
|
||||
let answerSignal = new PacketWebRTC();
|
||||
answerSignal.setSignalType(WebRTCSignalType.ANSWER);
|
||||
answerSignal.setSdpOrCandidate(JSON.stringify(answer));
|
||||
send(answerSignal);
|
||||
info("Received WebRTC offer, set remote description and sent answer");
|
||||
return;
|
||||
}
|
||||
}, [activeCall, sessionKeys, callState]);
|
||||
}, [activeCall, sessionKeys, callState, roomIdRef]);
|
||||
|
||||
usePacket(26, async (packet: PacketSignalPeer) => {
|
||||
const signalType = packet.getSignalType();
|
||||
|
||||
Reference in New Issue
Block a user