WebRTC は、ブラウザ間の音声およびビデオ通信のための標準プロトコルと API を提供するオープン ソース プロジェクトです。 WebRTC を使用すると、プラグインやアプリケーションをインストールしなくても、ブラウザ間でリアルタイムの音声およびビデオ通信を実現できます。 WebRTC は、ビデオ会議、オンライン カスタマー サービス、監視システム、ゲームのライブ ブロードキャストなどのシナリオで使用できます。
この記事では、PHP と Node.js を使用して、WebRTC に基づいたオーディオおよびビデオ通信システムを開発する方法について説明します。
WebRTC には 3 つの主要な API が含まれています:
WebRTC は、STUN、TURN、ICE などのプロトコルを使用してネットワークへの侵入を実現し、NAT やファイアウォールなどのネットワーク制限を克服し、ポイントツーポイント接続を実現します。接続を確立するプロセスでは、まず STUN サーバーを通じて IP アドレスとポート番号を取得し、次に相手にデータを送信する必要があります。失敗した場合は、TURN サーバーを使用してデータが転送されます。
PHP フレームワーク Laravel を使用して、強力なデータベース、RESTful API、および WebSocket サポートを提供する WebRTC サーバーを構築することを選択できます。
まず、Composer と PHP をインストールし、次に Composer を使用して Laravel をインストールします:
composer global require "laravel/installer"
Laravel を使用して新しいプロジェクトを作成します:
laravel new webrtc-server
Laravel の組み込み Web サーバーを実行します:
php artisan serve
ブラウザで http://localhost:8000 にアクセスすると、Laravel のデフォルトのようこそページが表示されます。
WebRTC や Socket.IO などの依存関係をインストールするには、Node.js と npm を使用する必要があります。 Node.js と npm をインストールした後、次のコマンドを実行して依存関係をインストールします:
npm install webrtc npm install socket.io
Node.js サーバーを作成し、起動時に WebSocket 接続リクエストをリッスンします:
const socketIo = require('socket.io') const http = require('http') const server = http.createServer((request, response) => { response.writeHead(200) response.end('WebRTC signaling server ') }) const io = socketIo(server) io.on('connection', (socket) => { console.log(`Client ${socket.id} connected`) socket.on('message', (data) => { console.log(`Client ${socket.id} sent message: ${JSON.stringify(data)}`) socket.broadcast.emit('message', data) }) }) server.listen(3000, () => { console.log('Server started on port 3000') })
WebRTC オーディオおよびビデオ通信を実装するには、クライアントで MediaStream および RTCPeerConnection API を使用する必要があります。
まず、ローカル カメラとマイクの MediaStream を取得します:
navigator.mediaDevices.getUserMedia({ audio: true, video: true }).then(stream => { // 本地摄像头和麦克风MediaStream })
次に、相手の WebSocket アドレスに基づいて RTCPeerConnection オブジェクトを作成し、ローカル MediaStream を送信チャネルに追加します:
const peer = new RTCPeerConnection({ iceServers: [{ urls: 'stun:stun.l.google.com:19302' }] }) peer.addStream(localStream) ...
次に、ポイントツーポイント接続の確立を開始します。接続が正常に確立されたら、相手のメディア ストリームを再生チャネルに追加します。
peer.createOffer().then(offer => { peer.setLocalDescription(offer).then(() => { socket.emit('message', { type: 'offer', sdp: offer }) }) }) socket.on('message', (data) => { if (data.type === 'offer') { peer.setRemoteDescription(new RTCSessionDescription(data)).then(() => { peer.createAnswer().then(answer => { peer.setLocalDescription(answer).then(() => { socket.emit('message', { type: 'answer', sdp: answer }) }) }) }) } else if (data.type === 'answer') { peer.setRemoteDescription(new RTCSessionDescription(data)) } else if (data.type === 'candidate') { peer.addIceCandidate(new RTCIceCandidate(data.candidate)) } }) peer.onaddstream = (event) => { remoteVideo.srcObject = event.stream }
最後に、ICE 候補アドレスを送信します。相手へ:
peer.onicecandidate = (event) => { if (event.candidate) { socket.emit('message', { type: 'candidate', candidate: event.candidate }) } }
PHP と Node.js を使用して WebRTC ベースの音声およびビデオ通信システムを開発することは複雑ではありません。 WebRTC と関連 API の基本的な知識を習得すると、完全なシステムを迅速に構築できます。同時に、Laravel や Socket.IO などの強力なフレームワークとライブラリにより、開発効率が迅速に向上し、より安定した高品質のオーディオおよびビデオ通信アプリケーションを実現できます。
以上がPHP と Node.js を使用して WebRTC オーディオおよびビデオ通信システムを開発するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。