в этой функции
const connectToStreamer = async (streamerid) => {br /> if (StreamerId ===== asynconsensenenections.cordencenenection. {
console.log (
Код: Выделить всё
Skipping connection to ${streamerId}: Already connected or self< /code>);
return;
} < /p>
try {
const pc = new RTCPeerConnection(iceServers);
peerConnections.current[streamerId] = pc;
// Decide direction based on whether you're sending a stream
const isSendingStream = !!localStreamRef.current;
if (isSendingStream) {
localStreamRef.current.getTracks().forEach(track => {
pc.addTrack(track, localStreamRef.current); // send
});
} else {
pc.addTransceiver('video', { direction: 'recvonly' }); // receive
pc.addTransceiver('audio', { direction: 'recvonly' }); // receive
}
pc.ontrack = event => {
if (event.streams[0]) {
console.log(`Received stream from ${streamerId}:`, event.streams[0]);
setRemoteStreams(prev => new Map(prev).set(streamerId, event.streams[0]));
}
};
pc.onicecandidate = event => {
if (event.candidate) {
console.log(`Sending ICE candidate to ${streamerId}`);
socket.emit('ice-candidate', { target: streamerId, candidate: event.candidate });
}
};
pc.oniceconnectionstatechange = () => {
socket.emit('Errorlogs','pc.oniceconnectionstatechange',`ICE connection state changed for ${streamerId}: ${pc.iceConnectionState}`);
console.log(`ICE state for ${streamerId}: ${pc.iceConnectionState}`);
if (pc.iceConnectionState === 'failed' || pc.iceConnectionState === 'disconnected') {
setTimeout(() => {
if (pc.iceConnectionState !== 'connected' && peerConnections.current[streamerId]) {
console.log(`Retrying connection to ${streamerId}`);
connectToStreamer(streamerId);
}
}, 5000);
} else if (pc.iceConnectionState === 'closed') {
delete peerConnections.current[streamerId];
setRemoteStreams(prev => {
const newStreams = new Map(prev);
newStreams.delete(streamerId);
return newStreams;
});
}
};
const offer = await pc.createOffer();
await pc.setLocalDescription(offer);
console.log(`Sending offer to ${streamerId}`);
socket.emit('offer', { target: streamerId, sdp: offer });
} catch (err) {
socket.emit('Errorlogs',err)
console.error(`Error connecting to streamer ${streamerId}:`, err);
delete peerConnections.current[streamerId];
}
hte host присоединился к всем пользователям потокам, и все пользователи показывают друг друга в этих комнатах
Подробнее здесь: https://stackoverflow.com/questions/796 ... sconnected
Мобильная версия