WebRTC (Web Real-Time Communication) ist eine Open-Source-Technologie, die Echtzeitkommunikation über einfache APIs in Webbrowsern und mobilen Apps ermöglicht. Es ermöglicht den direkten Austausch von Audio, Video und Daten zwischen Kollegen, ohne dass ein Zwischenserver erforderlich ist, und eignet sich daher perfekt für Anwendungen wie Videokonferenzen, Live-Streaming und Dateifreigabe.
In diesem Blog befassen wir uns mit den folgenden Themen:
WebRTC ist eine Reihe von Standards und Protokollen, die eine Echtzeit-Audio-, Video- und Datenkommunikation zwischen Webbrowsern ermöglichen. Es umfasst mehrere Schlüsselkomponenten:
WebRTC ist eine clientseitige Technologie und erfordert keine spezielle Serverinstallation. Sie benötigen jedoch einen Webserver, um Ihre HTML- und JavaScript-Dateien bereitzustellen. Für die lokale Entwicklung können Sie einen einfachen HTTP-Server verwenden.
Node.js installieren: Laden Sie Node.js von nodejs.org herunter und installieren Sie es.
Erstellen Sie ein Projektverzeichnis: Öffnen Sie ein Terminal und erstellen Sie ein neues Verzeichnis für Ihr Projekt.
mkdir webrtc-project cd webrtc-project
Node.js-Projekt initialisieren:
npm init -y
HTTP-Server installieren:
npm install --save http-server
Erstellen Sie Ihre Projektdateien:
Erstellen Sie eine index.html-Datei mit folgendem Inhalt:
```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>WebRTC Example</title> </head> <body> <h1>WebRTC Example</h1> <video id="localVideo" autoplay muted></video> <video id="remoteVideo" autoplay></video> <script src="main.js"></script> </body> </html> ```
Wir erstellen eine einfache Peer-to-Peer-Videoanrufanwendung. In diesem Beispiel werden zwei Browser-Registerkarten verwendet, um die Peer-Verbindung zu simulieren.
Lokales Video aufnehmen: Verwenden Sie getUserMedia, um Videos von der Kamera des Benutzers aufzunehmen.
Peer-Verbindung erstellen: Stellen Sie eine Peer-Verbindung zwischen den lokalen und Remote-Peers her.
Angebot und Antwort austauschen: Verwenden Sie SDP (Session Description Protocol), um Verbindungsdetails auszutauschen.
Behandeln Sie ICE-Kandidaten: Tauschen Sie ICE-Kandidaten aus, um die Verbindung herzustellen.
Erstellen Sie eine main.js-Datei mit folgendem Inhalt:
const localVideo = document.getElementById('localVideo'); const remoteVideo = document.getElementById('remoteVideo'); let localStream; let peerConnection; const serverConfig = { iceServers: [{ urls: 'stun:stun.l.google.com:19302' }] }; const constraints = { video: true, audio: true }; // Get local video stream navigator.mediaDevices.getUserMedia(constraints) .then(stream => { localStream = stream; localVideo.srcObject = stream; setupPeerConnection(); }) .catch(error => { console.error('Error accessing media devices.', error); }); function setupPeerConnection() { peerConnection = new RTCPeerConnection(serverConfig); // Add local stream to the peer connection localStream.getTracks().forEach(track => peerConnection.addTrack(track, localStream)); // Handle remote stream peerConnection.ontrack = event => { remoteVideo.srcObject = event.streams[0]; }; // Handle ICE candidates peerConnection.onicecandidate = event => { if (event.candidate) { sendSignal({ 'ice': event.candidate }); } }; // Create an offer and set local description peerConnection.createOffer() .then(offer => { return peerConnection.setLocalDescription(offer); }) .then(() => { sendSignal({ 'offer': peerConnection.localDescription }); }) .catch(error => { console.error('Error creating an offer.', error); }); } // Handle signals (for demo purposes, this should be replaced with a signaling server) function sendSignal(signal) { console.log('Sending signal:', signal); // Here you would send the signal to the other peer (e.g., via WebSocket) } function receiveSignal(signal) { if (signal.offer) { peerConnection.setRemoteDescription(new RTCSessionDescription(signal.offer)) .then(() => peerConnection.createAnswer()) .then(answer => peerConnection.setLocalDescription(answer)) .then(() => sendSignal({ 'answer': peerConnection.localDescription })); } else if (signal.answer) { peerConnection.setRemoteDescription(new RTCSessionDescription(signal.answer)); } else if (signal.ice) { peerConnection.addIceCandidate(new RTCIceCandidate(signal.ice)); } } // Simulate receiving a signal from another peer // This would typically be handled by a signaling server setTimeout(() => { receiveSignal({ offer: { type: 'offer', sdp: '...' // SDP offer from the other peer } }); }, 1000);
Das obige ist der detaillierte Inhalt vonEinführung in WebRTC. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!