web123456

WebRTC real-time communication: the secret to building efficient web video calls

// Get local audio and video streams navigator.mediaDevices.getUserMedia({ video: true, audio: true }) .then(stream => { // Show local video stream document.getElementById('localVideo').srcObject = stream; // Create an RTCPeerConnection instance const pc = new RTCPeerConnection({ iceServers: [{ urls: 'stun::19302' }] // Use a public STUN server }); // Add local stream to connection stream.getTracks().forEach(track => pc.addTrack(track, stream)); // Create an offer pc.createOffer({ offerToReceiveVideo: true }) .then(offer => { // Set local description and send an offer pc.setLocalDescription(offer); // Send an offer through the signaling server sendSignalingMessage('video-offer', offer); }); // Handle remote description pc.setRemoteDescription = new RTCSessionDescription({ type: 'answer', sdp: 'remote_sdp_answer' }); // Listen to remote streams pc.ontrack = event => { document.getElementById('remoteVideo').srcObject = event.streams[0]; }; // Process ICE candidates pc.onicecandidate = event => { if (event.candidate) { sendSignalingMessage('new-ice-candidate', event.candidate); } }; }); // Send signaling messages function sendSignalingMessage(type, data) { const message = JSON.stringify({ type, ...data }); // Send signaling messages via WebSocket websocket.send(message); }