Обработка треков и IceCandidates
This commit is contained in:
@@ -92,10 +92,27 @@ export function CallProvider(props : CallProviderProps) {
|
||||
* Другая сторона отправила нам ICE кандидата для установления WebRTC соединения
|
||||
*/
|
||||
const candidate = JSON.parse(packet.getSdpOrCandidate());
|
||||
console.info(candidate);
|
||||
await peerConnectionRef.current?.addIceCandidate(new RTCIceCandidate(candidate));
|
||||
info("Received WebRTC ICE candidate and added to peer connection");
|
||||
return;
|
||||
}
|
||||
if(signalType == WebRTCSignalType.OFFER){
|
||||
/**
|
||||
* 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;
|
||||
}
|
||||
}, [activeCall, sessionKeys, callState]);
|
||||
|
||||
usePacket(26, async (packet: PacketSignalPeer) => {
|
||||
@@ -201,6 +218,34 @@ export function CallProvider(props : CallProviderProps) {
|
||||
{ urls: 'stun:stun.l.google.com:19302' }
|
||||
]
|
||||
});
|
||||
/**
|
||||
* Подписываемся на ICE кандидат
|
||||
*/
|
||||
peerConnectionRef.current.onicecandidate = (event) => {
|
||||
if(event.candidate){
|
||||
let candidateSignal = new PacketWebRTC();
|
||||
candidateSignal.setSignalType(WebRTCSignalType.ICE_CANDIDATE);
|
||||
candidateSignal.setSdpOrCandidate(JSON.stringify(event.candidate));
|
||||
send(candidateSignal);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Соединение установлено, можно начинать звонок, переходим в активное состояние звонка
|
||||
*/
|
||||
peerConnectionRef.current.onconnectionstatechange = () => {
|
||||
console.info("Peer connection state changed: " + peerConnectionRef.current?.connectionState);
|
||||
if(peerConnectionRef.current?.connectionState == "connected"){
|
||||
setCallState(CallState.ACTIVE);
|
||||
info("WebRTC connection established, call is active");
|
||||
}
|
||||
}
|
||||
|
||||
peerConnectionRef.current.ontrack = (event) => {
|
||||
/**
|
||||
* При получении медиа-трека с другой стороны
|
||||
*/
|
||||
console.info("TRACK RECV!!!!!");
|
||||
}
|
||||
/**
|
||||
* Запрашиваем Аудио поток с микрофона и добавляем его в PeerConnection, чтобы другая сторона могла его получить и воспроизвести,
|
||||
* когда мы установим WebRTC соединение
|
||||
|
||||
Reference in New Issue
Block a user