Coder19/interview_system
0
1// client.js2const signalingSocket = new WebSocket('ws://localhost:8765');3let localStream;4let remoteStream;5let peerConnection;6 7const localVideo = document.getElementById('localVideo');8const remoteVideo = document.getElementById('remoteVideo');9 10const iceServers = {11 iceServers: [12 { urls: 'stun:stun.l.google.com:19302' }, // Example STUN server13 { urls: 'turn:your.turn.server', username: 'user', credential: 'pass' } // Optional TURN server14 ]15};16 17async function startMedia() {18 const stream = await navigator.mediaDevices.getUserMedia({ audio: true, video: true });19 localStream = stream;20 localVideo.srcObject = stream;21 peerConnection = new RTCPeerConnection(iceServers);22 23 // Add local media tracks to peer connection24 stream.getTracks().forEach(track => peerConnection.addTrack(track, stream));25 26 // Handle remote stream27 peerConnection.ontrack = event => {28 remoteStream = event.streams[0];29 remoteVideo.srcObject = remoteStream;30 };31 32 // Handle ICE candidates33 peerConnection.onicecandidate = event => {34 if (event.candidate) {35 signalingSocket.send(JSON.stringify({ iceCandidate: event.candidate }));36 }37 };38 39 // Handle SDP offer/answer40 signalingSocket.onmessage = async (message) => {41 const data = JSON.parse(message.data);42 43 if (data.sdp) {44 if (data.sdp.type === 'offer') {45 await peerConnection.setRemoteDescription(new RTCSessionDescription(data.sdp));46 const answer = await peerConnection.createAnswer();47 await peerConnection.setLocalDescription(answer);48 signalingSocket.send(JSON.stringify({ sdp: peerConnection.localDescription }));49 } else if (data.sdp.type === 'answer') {50 await peerConnection.setRemoteDescription(new RTCSessionDescription(data.sdp));51 }52 } else if (data.iceCandidate) {53 await peerConnection.addIceCandidate(new RTCIceCandidate(data.iceCandidate));54 }55 };56}57 58async function makeCall() {59 await startMedia();60 61 // Create and send SDP offer to server62 const offer = await peerConnection.createOffer();63 await peerConnection.setLocalDescription(offer);64 signalingSocket.send(JSON.stringify({ sdp: peerConnection.localDescription }));65}66 67makeCall(); // Initiate the WebRTC connection68 