Maison >interface Web >js tutoriel >Introduction à WebRTC
WebRTC (Web Real-Time Communication) est une technologie open source qui permet une communication en temps réel via de simples API dans les navigateurs Web et les applications mobiles. Il permet le partage d'audio, de vidéo et de données directement entre pairs sans avoir besoin d'un serveur intermédiaire, ce qui le rend parfait pour des applications telles que la vidéoconférence, la diffusion en direct et le partage de fichiers.
Dans ce blog, nous aborderons les sujets suivants :
WebRTC est un ensemble de normes et de protocoles qui permettent la communication audio, vidéo et de données en temps réel entre les navigateurs Web. Il comprend plusieurs éléments clés :
WebRTC est une technologie côté client et ne nécessite pas d'installation de serveur spécifique. Cependant, vous aurez besoin d'un serveur Web pour servir vos fichiers HTML et JavaScript. Pour le développement local, vous pouvez utiliser un simple serveur HTTP.
Installer Node.js : Téléchargez et installez Node.js depuis nodejs.org.
Créer un répertoire de projet : ouvrez un terminal et créez un nouveau répertoire pour votre projet.
mkdir webrtc-project cd webrtc-project
Initialiser un projet Node.js :
npm init -y
Installer le serveur HTTP :
npm install --save http-server
Créez vos fichiers de projet :
Créez un fichier index.html avec le contenu suivant :
```html 8b05045a5be5764f313ed5b9168a17e6 49099650ebdc5f3125501fa170048923 93f0f5c25f18dab9d176bd4f6de5d30e 1fc2df4564f5324148703df3b6ed50c1 4f2fb0231f24e8aef524fc9bf9b9874f b2386ffb911b14667cb8f0f91ea547a7WebRTC Example6e916e0f7d1e588d4f442bf645aedb2f 9c3bca370b5104690d9ef395f2c5f8d1 6c04bd5ca3fcae76e30b72ad730ca86d 4a249f0d628e2318394fd9b75b4636b1WebRTC Example473f0a7621bec819994bb5020d29372a 886e14ee2bf2e07562cf694bdd704993a6a9c6d3f311dabb528ad355798dc27d fc3cb8de349c32412815ef2a53a0fb7ca6a9c6d3f311dabb528ad355798dc27d e803653d6fd93b3996ebf69dd59af1622cacc6d41bbb37262a98f745aa00fbf0 36cc49f0c466276486e50c850b7e4956 73a6ac4ed44ffec12cee46588e518a5e ```
Nous allons créer une simple application d'appel vidéo peer-to-peer. Cet exemple utilisera deux onglets de navigateur pour simuler la connexion homologue.
Capturer une vidéo locale : utilisez getUserMedia pour capturer une vidéo de la caméra de l'utilisateur.
Créer une connexion homologue : établissez une connexion homologue entre les homologues locaux et distants.
Offre d'échange et réponse : utilisez SDP (Session Description Protocol) pour échanger les détails de connexion.
Gérer les candidats ICE : échangez des candidats ICE pour établir la connexion.
Créez un fichier main.js avec le contenu suivant :
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);
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!