Tu ID de Peer: Esperando...
WebRTC permite la comunicación de video, audio y datos entre navegadores sin necesidad de un servidor
intermedio.
Para lograrlo, utilizamos RTCPeerConnection
para establecer una conexión entre dos pestañas y
BroadcastChannel
para intercambiar mensajes de señalización entre ellas.
navigator.mediaDevices.getDisplayMedia()
.
RTCPeerConnection
para gestionar la conexión WebRTC.BroadcastChannel
a otras pestañas.
BroadcastChannel
permite la comunicación entre pestañas abiertas en el mismo navegador.
En este caso, lo usamos para intercambiar la oferta, la respuesta y los candidatos ICE, lo que permite
establecer una conexión WebRTC sin necesidad de un servidor externo.
// Crear una conexión WebRTC
const peerConnection = new RTCPeerConnection();
// Crear un canal de comunicación entre pestañas
const signalingChannel = new BroadcastChannel('webrtc-signaling');
// Enviar oferta cuando se inicia la compartición
async function startConnection() {
const stream = await navigator.mediaDevices.getDisplayMedia({ video: true });
stream.getTracks().forEach(track => peerConnection.addTrack(track, stream));
const offer = await peerConnection.createOffer();
await peerConnection.setLocalDescription(offer);
signalingChannel.postMessage({ type: 'offer', offer });
}
// Manejar mensajes de la otra pestaña
signalingChannel.onmessage = async (event) => {
if (event.data.type === 'offer') {
await peerConnection.setRemoteDescription(new RTCSessionDescription(event.data.offer));
const answer = await peerConnection.createAnswer();
await peerConnection.setLocalDescription(answer);
signalingChannel.postMessage({ type: 'answer', answer });
}
};
Para más información sobre WebRTC y sus funcionalidades, puedes consultar la documentación oficial y ejemplos en: