WebRTC の概要

Sep 04, 2024 am 07:00 AM

Introduction to WebRTC

インストールとコードガイド

WebRTC (Web Real-Time Communication) は、Web ブラウザーやモバイル アプリのシンプルな API を介してリアルタイム通信を可能にするオープンソース テクノロジーです。中間サーバーを必要とせずにピア間でオーディオ、ビデオ、データを直接共有できるため、ビデオ会議、ライブ ストリーミング、ファイル共有などのアプリケーションに最適です。

このブログでは、次のトピックについて詳しく説明します:

  1. WebRTC とは何ですか?
  2. WebRTC の主な機能
  3. WebRTC のインストール
  4. 基本的な WebRTC アプリケーションの構築
  5. コードを理解する
  6. 結論

WebRTCとは何ですか?

WebRTC は、Web ブラウザー間のリアルタイムのオーディオ、ビデオ、およびデータ通信を可能にする一連の標準とプロトコルです。これには、いくつかの重要なコンポーネントが含まれています:

  • getUserMedia: ユーザーのデバイスからオーディオおよびビデオ ストリームをキャプチャします。
  • RTCPeerConnection: ピアツーピア接続を管理し、オーディオとビデオのストリーミングを処理します。
  • RTCDataChannel: ピア間のリアルタイムのデータ転送を可能にします。

WebRTC の主な機能

  1. リアルタイム通信: 遅延を最小限に抑えた低遅延通信。
  2. ブラウザの互換性: ほとんどの最新の Web ブラウザ (Chrome、Firefox、Safari、Edge) でサポートされています。
  3. プラグインは不要: 追加のプラグインやソフトウェアなしでブラウザで直接動作します。
  4. 安全: 安全な通信のために暗号化を使用します。

WebRTC のインストール

WebRTC はクライアント側のテクノロジーであり、特定のサーバーのインストールは必要ありません。ただし、HTML および JavaScript ファイルを提供するには Web サーバーが必要です。ローカル開発の場合は、単純な HTTP サーバーを使用できます。

前提条件

  • Node.js: ローカルサーバーをセットアップします。
  • 最新の Web ブラウザ: Chrome、Firefox、Safari、または Edge。

ローカルサーバーのセットアップ

  1. Node.js のインストール:nodejs.org から Node.js をダウンロードしてインストールします。

  2. プロジェクト ディレクトリの作成: ターミナルを開き、プロジェクトの新しいディレクトリを作成します。

    mkdir webrtc-project
    cd webrtc-project
    
  3. Node.js プロジェクトを初期化する:

    npm init -y
    
  4. HTTP サーバーをインストールします:

    npm install --save http-server
    
  5. プロジェクト ファイルを作成します:

    • index.html
    • main.js

次の内容を含むindex.html ファイルを作成します:

```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>
```

基本的な WebRTC アプリケーションの構築

簡単なピアツーピアのビデオ通話アプリケーションを作成します。この例では、2 つのブラウザ タブを使用してピア接続をシミュレートします。

コードの説明

  1. ローカル ビデオのキャプチャ: getUserMedia を使用して、ユーザーのカメラからビデオをキャプチャします。

  2. ピア接続の作成: ローカル ピアとリモート ピアの間にピア接続を確立します。

  3. オファーと回答を交換: SDP (セッション記述プロトコル) を使用して接続の詳細を交換します。

  4. ICE 候補の処理: ICE 候補を交換して接続を確立します。

次の内容を含む main.js ファイルを作成します:

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);

コードを理解する

  1. メディア キャプチャ: navigator.mediaDevices.getUserMedia はローカル ビデオ ストリームをキャプチャします。
  2. ピア接続セットアップ: RTCPeerConnection はピア接続を管理します。
  3. オファーとアンサー: SDP のオファーとアンサーは、接続のネゴシエーションに使用されます。
  4. ICE 候補: ICE 候補は、ピア間の接続を確立するために使用されます。

以上がWebRTC の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

高度なJavaScriptスコープとコンテキスト 高度なJavaScriptスコープとコンテキスト Jul 24, 2025 am 12:42 AM

JavaScriptの範囲は、グローバル、機能、およびブロックレベルの範囲に分割される変数のアクセシビリティ範囲を決定します。コンテキストは、この方向を決定し、関数呼び出し方式に依存します。 1.スコープには、グローバルスコープ(どこでもアクセス可能)、関数スコープ(関数内でのみ有効)、およびブロックレベルのスコープ(letとconstは{}内で有効です)が含まれます。 2。実行コンテキストには、変数オブジェクト、スコープチェーン、およびこの値が含まれます。これは、通常の関数におけるグローバルまたは未定義を指します。メソッドコールはコールオブジェクトを指し、コンストラクターは新しいオブジェクトをポイントし、call/apply/bindで明示的に指定することもできます。 3。閉鎖とは、外部スコープ変数へのアクセスと記憶の関数を指します。それらはしばしばカプセル化とキャッシュに使用されますが、引き起こす可能性があります

JavaScriptを使用して、安全なサンドボックス付きIFRAMEを構築します JavaScriptを使用して、安全なサンドボックス付きIFRAMEを構築します Jul 16, 2025 am 02:33 AM

JavaScriptを使用して安全なSandbox iframeを作成するには、最初にHTMLのSandbox属性を使用して、スクリプトの実行、ポップアップウィンドウ、フォームの提出など、iFrameの動作を制限します。第二に、必要に応じて許可を緩和するために、許可を緩和するなどの特定のトークンを追加することにより。次に、PostMessage()を組み合わせて安全なクロスドメイン通信を実現しながら、メッセージソースとデータを厳密に検証します。最後に、ソースを確認しない、CSPなどをセットアップしないなど、一般的な構成エラーを避け、オンラインになる前にセキュリティテストを実行します。

JSで選択したラジオボタンの値を取得するにはどうすればよいですか? JSで選択したラジオボタンの値を取得するにはどうすればよいですか? Jul 18, 2025 am 04:17 AM

選択したラジオボタン値を取得するための2つのコアメソッドがあります。 1. QuerySelectorを使用して選択したアイテムを直接取得し、入力[name = "your-radio-name"]を使用します:選択した要素を取得し、その値属性を読み取ります。最新のブラウザに適しており、簡潔なコードがあります。 2。document.getElementsbyNameを使用して、ループノデリストを介して最初にチェックされた無線を見つけて見つけ、その値を取得します。これは、古いブラウザーと互換性がある、またはプロセスの手動制御が必要なシナリオに適しています。さらに、名前属性の綴り、選択されていない状況の処理、およびコンテンツの動的な負荷に注意を払う必要があります

JavaScriptの並行性パターンのマスター:Webワーカーvs. Javaスレッド JavaScriptの並行性パターンのマスター:Webワーカーvs. Javaスレッド Jul 25, 2025 am 04:31 AM

JavaScriptのWebworkersとJavathreadsの同時処理には本質的な違いがあります。 1。JavaScriptは、単一スレッドモデルを採用しています。 Webworkersは、ブラウザによって提供される独立したスレッドです。これは、UIをブロックしないがDOMを操作できない時間のかかるタスクを実行するのに適しています。 2。Javaは、複雑な同時ロジックとサーバー側の処理に適した、スレッドクラスを通じて作成された言語レベルからの実際のマルチスレッドをサポートしています。 3。ウェブワーカーは、PostMessage()を使用してメインスレッドと通信します。これは非常に安全で孤立しています。 Javaスレッドはメモリを共有できるため、同期の問題に注意する必要があります。 4。ウェブワーカーは、画像処理などのフロントエンドの並列コンピューティングにより適しています。

Vue 3 CompositionAPI vs. OptionsAPI:詳細な比較 Vue 3 CompositionAPI vs. OptionsAPI:詳細な比較 Jul 25, 2025 am 03:46 AM

VUE3のCompositapiは、複雑なロジックとタイプの導出により適しており、OptionsAPIはシンプルなシナリオや初心者に適しています。 1。OptionsAPIは、データやメソッドなどのオプションに従ってコードを整理し、明確な構造を持っていますが、複雑なコンポーネントは断片化されています。 2。CompusitionAPIは、セットアップを使用して関連ロジックを集中させます。これは、メンテナンスと再利用を助長します。 3。CompusitionAPIは、混合性機能を介して競合のないパラメーター化可能な論理再利用を実現します。これは、混合物よりも優れています。 4。CoputionAPIは、TypeScriptとより正確なタイプの派生をより適切にサポートしています。 5。2つのパフォーマンスとパッケージングのボリュームに大きな違いはありません。 6。

Javaデバッガーの原則を利用して、複雑なJavaScriptアプリケーションの高度なデバッグ技術 Javaデバッガーの原則を利用して、複雑なJavaScriptアプリケーションの高度なデバッグ技術 Jul 17, 2025 am 01:42 AM

複雑なJavaScriptアプリケーションをデバッグするには、体系的な使用ツールが必要です。 1.ブレークポイントと条件付きブレークポイントを設定して、条件に応じて、関数入力、ループ、非同期コールバック、フィルターなどの疑わしいプロセスを傍受します。 2.ブラックボクシング機能がサードパーティライブラリの干渉をブロックできるようにします。 3.デバッガーステートメントを使用して、環境判断に基づいてデバッグエントリを制御します。 4.コールスタックを介してコールリンクをトレースし、実行パスと変数ステータスを分析し、それにより問題の根本原因を効率的に見つけます。

JavaScriptのタイプ強制ルールの調査 JavaScriptのタイプ強制ルールの調査 Jul 21, 2025 am 02:31 AM

タイプキャストとは、JavaScriptの1つのタイプの値を別のタイプに自動的に変換する動作です。一般的なシナリオには次のものが含まれます。1。オペレーターを使用する場合、一方が文字列である場合、反対側も「5」などの文字列に変換されます。結果は「55」です。 2。ブールのコンテキストでは、非ブールの値は、空の文字列、0、ヌル、未定義などのブール型に暗黙的に変換されます。 3. Nullは数値操作に参加し、0に変換され、未定義はNANに変換されます。 4.暗黙の変換によって引き起こされる問題は、number()、string()、boolean()などの明示的な変換関数によって回避できます。これらのルールをマスターすることは役立ちます

JSで日付をフォーマットする方法は? JSで日付をフォーマットする方法は? Jul 20, 2025 am 12:10 AM

JavaScriptのフォーマット日付は、ネイティブメソッドまたはサードパーティライブラリを使用して実装できます。 1.ネイティブの日付オブジェクトのステッチ:GetFullyear、GetMonth、GetDate、その他の方法を介して日付部分を取得し、軽量のニーズに適しており、サードパーティのライブラリに依存しないYyyy-MM-DDおよびその他の形式に手動でスプライスします。 2。TolocaledAtestringメソッドの使用:地元の習慣に応じてMM/DD/YYYY形式などの出力を出力できます。 3. day.jsやdate-fnsなどのサードパーティライブラリを使用:頻繁な操作に適した簡潔な構文とリッチ関数を提供します。

See all articles