ホームページ  >  記事  >  バックエンド開発  >  PHP と Node.js を使用して WebRTC オーディオおよびビデオ通信システムを開発する

PHP と Node.js を使用して WebRTC オーディオおよびビデオ通信システムを開発する

王林
王林オリジナル
2023-06-27 16:53:191466ブラウズ

WebRTC は、ブラウザ間の音声およびビデオ通信のための標準プロトコルと API を提供するオープン ソース プロジェクトです。 WebRTC を使用すると、プラグインやアプリケーションをインストールしなくても、ブラウザ間でリアルタイムの音声およびビデオ通信を実現できます。 WebRTC は、ビデオ会議、オンライン カスタマー サービス、監視システム、ゲームのライブ ブロードキャストなどのシナリオで使用できます。

この記事では、PHP と Node.js を使用して、WebRTC に基づいたオーディオおよびビデオ通信システムを開発する方法について説明します。

  1. WebRTC の基本

WebRTC には 3 つの主要な API が含まれています:

  • MediaStream: カメラやマイクなどのオーディオおよびビデオ デバイスにアクセスするために使用されます。 。
  • RTCPeerConnection: オーディオおよびビデオ データの送信を実現するためのポイントツーポイント接続を確立するために使用されます。
  • RTCDataChannel: テキストやファイルなどの非オーディオおよびビデオ データのポイントツーポイント送信に使用されます。

WebRTC は、STUN、TURN、ICE などのプロトコルを使用してネットワークへの侵入を実現し、NAT やファイアウォールなどのネットワーク制限を克服し、ポイントツーポイント接続を実現します。接続を確立するプロセスでは、まず STUN サーバーを通じて IP アドレスとポート番号を取得し、次に相手にデータを送信する必要があります。失敗した場合は、TURN サーバーを使用してデータが転送されます。

  1. PHP 開発環境の構築

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 のデフォルトのようこそページが表示されます。

  1. Node.js 開発環境の構築

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')
})
  1. WebRTCオーディオおよびビデオ通信の実装

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 })
  }
}
  1. 結論

PHP と Node.js を使用して WebRTC ベースの音声およびビデオ通信システムを開発することは複雑ではありません。 WebRTC と関連 API の基本的な知識を習得すると、完全なシステムを迅速に構築できます。同時に、Laravel や Socket.IO などの強力なフレームワークとライブラリにより、開発効率が迅速に向上し、より安定した高品質のオーディオおよびビデオ通信アプリケーションを実現できます。

以上がPHP と Node.js を使用して WebRTC オーディオおよびビデオ通信システムを開発するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。