Workerman 開発: WebSocket プロトコルに基づいたビデオ ライブ ブロードキャスト システムを?qū)g裝する方法
Nov 07, 2023 am 11:25 AMWorkerman は、非同期ノンブロッキング I/O を通じて數(shù)千萬の同時接続を?qū)g現(xiàn)できる高性能 PHP フレームワークです。リアルタイム通信、高同時実行に適しています。サーバーやその他のシナリオ。この記事では、Workerman フレームワークを使用して、サービスの構(gòu)築、ライブ ビデオ ストリームのプッシュと受信の実裝、フロントエンド ページの表示などを含む、WebSocket プロトコルに基づくライブ ビデオ システムを開発する方法を紹介します。
1. サーバーを構(gòu)築します
1. Workerman 依存関係パッケージをインストールします:
次のコマンドを?qū)g行して Workerman 依存関係パッケージをインストールします:
composer require workerman/workerman
2サービスの作成 End
workerman.php ファイルをサーバー コードとして作成します。コードは次のとおりです。
<?php use WorkermanWorker; use WorkermanLibTimer; require_once __DIR__ . '/vendor/autoload.php'; // 創(chuàng)建一個Worker監(jiān)聽2345端口,使用websocket協(xié)議通訊 $worker = new Worker("websocket://0.0.0.0:2345"); // 啟動4個進程對外提供服務(wù) $worker->count = 4; // 客戶端連接時觸發(fā) $worker->onConnect = function($connection) { echo "New client connected! "; }; // 客戶端請求時觸發(fā) $worker->onMessage = function($connection, $data) { if(strpos($data, 'start') === 0) { // 該客戶端請求直播視頻流 $connection->send(getVideoStream()); // 啟動定時器,每秒向客戶端發(fā)送一份視頻流 $timer_id = Timer::add(1, function()use($connection){ $connection->send(getVideoStream()); }); // 將定時器ID綁定到連接上,方便后續(xù)停止定時器 $connection->timer_id = $timer_id; } else if(strpos($data, 'stop') === 0) { // 該客戶端停止請求直播視頻流 Timer::del($connection->timer_id); } else { // 其他請求,直接返回響應(yīng) $connection->send("Hello, $data!"); } }; // 客戶端斷開連接時觸發(fā) $worker->onClose = function($connection) { // 清除定時器 Timer::del($connection->timer_id); echo "Client disconnected! "; }; // 以下是獲取直播視頻流的代碼,可以替換為你自己的視頻流獲取代碼 function getVideoStream() { $fp = fopen("videos/video.mp4", "rb"); $chunk_size = 1024*1024; // 每次讀取1MB $buffer = ""; while(!feof($fp)) { $buffer .= fread($fp, $chunk_size); ob_flush(); flush(); } fclose($fp); return $buffer; } // 運行worker Worker::runAll();
上記のコードでは、worker という名前の Worker オブジェクトを作成し、ポート 2345 をリッスンして、WebSocket プロトコルを使用して通信します。 onMessage コールバック関數(shù)で、クライアントが「開始」メッセージを送信する場合、それはクライアントがライブ ビデオ ストリームを要求していることを意味します。 getVideoStream 関數(shù)を通じてビデオ ストリームを取得し、タイマーを使用してビデオ ストリーム データを毎秒クライアントにプッシュします。クライアントが「停止」メッセージを送信した場合、それはクライアントがライブ ビデオ ストリームの要求を停止し、接続に対応するタイマーを閉じることを意味します。他のリクエストは応答を直接返します。
2. ビデオ ファイルの作成
ルート ディレクトリに videos フォルダーを作成し、その中に video.mp4 という名前のビデオ ファイルを追加します。このビデオ ファイルは、獨自のライブ ビデオ ストリームと置き換えることができます。
3. サーバーを起動します
workerman.php が存在するディレクトリをコマンド ラインに入力し、次のコマンドを?qū)g行してサーバーを起動します:
php workerman.php start
成功したら起動時、サーバーはポート 2345 でリッスンしており、クライアントからのリクエストを受信できます。
2. クライアントの実裝
1.socket.io と video.js の導(dǎo)入
クライアント機能の実裝には、socket.io と video.js の 2 つのライブラリを使用します。 . これら 2 つのライブラリを HTML ページに導(dǎo)入する必要があります。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Video live demo</title> <style> video { width: 800px; height: 600px; } </style> </head> <body> <h1>Video live demo</h1> <button id="start">Start live</button> <button id="stop">Stop live</button> <br/><br/> <video id="video-player" class="video-js vjs-default-skin"></video> <script src="https://cdn.bootcss.com/socket.io/3.1.3/socket.io.js"></script> <link href="https://cdn.bootcss.com/video.js/7.15.4/video-js.min.css" rel="stylesheet"> <script src="https://cdn.bootcss.com/video.js/7.15.4/video.min.js"></script> <script> var socket = io('http://localhost:2345'); var player = videojs('video-player'); // 點擊開始按鈕,向服務(wù)端發(fā)起請求獲取視頻流 document.querySelector('#start').addEventListener('click', function() { socket.send('start'); }); // 點擊結(jié)束按鈕,停止請求視頻流 document.querySelector('#stop').addEventListener('click', function() { socket.send('stop'); player.pause(); }); // 收到服務(wù)端推送的視頻流數(shù)據(jù),開始播放視頻 socket.on('message', function(data) { player.src({ type: 'video/mp4', src: URL.createObjectURL(new Blob([data], { type: 'video/mp4' })) }); player.play(); }); </script> </body> </html>
上記のコードでは、開始ボタン、終了ボタン、ビデオ プレーヤーを含む単純な HTML ページを作成しました。開始ボタンをクリックすると、「開始」メッセージがサーバーに送信され、ビデオ ストリームを要求します。終了ボタンをクリックすると、「停止」メッセージがサーバーに送信され、ビデオ ストリームの要求を停止し、ビデオの再生を一時停止します。サーバーによってプッシュされたビデオ ストリーム データを受信すると、URL.createObjectURL 関數(shù)を使用してビデオ ストリーム URL を作成し、再生のためにその URL を video.js プレーヤーに渡します。
2. クライアントを開始します
ブラウザで上記の HTML ページにアクセスし、開始ボタンをクリックしてライブ ビデオ ストリームの再生を開始します。ビデオ ストリームの要求を停止し、ビデオの再生を一時停止するには、[停止] ボタンをクリックします。
概要
Workerman フレームワークと WebSocket プロトコルを使用すると、高性能、低遅延のビデオ ライブ ブロードキャスト システムを簡単に実裝できます。 Workerman は、非同期ノンブロッキング I/O サポートを提供し、數(shù)百萬の接続が同時にアクセスされるシナリオを迅速に処理できるため、リアルタイム通信、高同時実行サーバー、その他の分野に大きな利便性をもたらします。この記事では、Workerman の非同期通信機能を使用して、サーバーとクライアントの間でリアルタイム ビデオ ストリームをプッシュおよび受信し、ライブ ブロードキャスト システムをよりスムーズかつ効率的にします。
以上がWorkerman 開発: WebSocket プロトコルに基づいたビデオ ライブ ブロードキャスト システムを?qū)g裝する方法の詳細內(nèi)容です。詳細については、PHP 中國語 Web サイトの他の関連記事を參照してください。

ホットAIツール

Undress AI Tool
脫衣畫像を無料で

Undresser.AI Undress
リアルなヌード寫真を作成する AI 搭載アプリ

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

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中國語版
中國語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

WebSocketとJavaScript:リアルタイム監(jiān)視システムを?qū)g現(xiàn)するためのキーテクノロジー はじめに: インターネット技術(shù)の急速な発展に伴い、リアルタイム監(jiān)視システムは様々な分野で広く利用されています。リアルタイム監(jiān)視を?qū)g現(xiàn)するための重要なテクノロジーの 1 つは、WebSocket と JavaScript の組み合わせです。この記事では、リアルタイム監(jiān)視システムにおける WebSocket と JavaScript のアプリケーションを紹介し、コード例を示し、その実裝原理を詳しく説明します。 1.WebSocketテクノロジー

golangWebSocket と JSON の組み合わせ: データ送信と解析の実現(xiàn) 現(xiàn)代の Web 開発では、リアルタイムのデータ送信がますます重要になっています。 WebSocket は雙方向通信を?qū)g現(xiàn)するために使用されるプロトコルで、従來の HTTP リクエスト/レスポンス モデルとは異なり、WebSocket を使用すると、サーバーがクライアントにデータをアクティブにプッシュできます。 JSON (JavaScriptObjectNotation) は、簡潔で読みやすいデータ交換用の軽量形式です。

PHP と WebSocket: リアルタイム データ転送のベスト プラクティス方法 はじめに: Web アプリケーション開発では、リアルタイム データ転送は非常に重要な技術(shù)要件です。従來の HTTP プロトコルは要求応答モデルのプロトコルであり、リアルタイムのデータ送信を効果的に実現(xiàn)できません。リアルタイム データ送信のニーズを満たすために、WebSocket プロトコルが登場しました。 WebSocket は、単一の TCP 接続上で全二重通信を行う方法を提供する全二重通信プロトコルです。 Hと比べて

WebSocket と JavaScript を使用してオンライン音聲認(rèn)識システムを?qū)g裝する方法 はじめに: 技術(shù)の継続的な発展により、音聲認(rèn)識技術(shù)は人工知能の分野の重要な部分になりました。 WebSocket と JavaScript をベースとしたオンライン音聲認(rèn)識システムは、低遅延、リアルタイム、クロスプラットフォームという特徴があり、広く使用されるソリューションとなっています。この記事では、WebSocket と JavaScript を使用してオンライン音聲認(rèn)識システムを?qū)g裝する方法を紹介します。

インターネット技術(shù)の継続的な発展により、リアルタイム通信は日常生活に欠かせないものになりました。 WebSocket テクノロジーを使用すると、効率的で低遅延のリアルタイム通信を?qū)g現(xiàn)できます。また、インターネット分野で最も広く使用されている開発言語の 1 つである PHP も、対応する WebSocket サポートを提供します。この記事では、PHP と WebSocket を使用してリアルタイム通信を?qū)g現(xiàn)する方法と、具體的なコード例を紹介します。 1. WebSocket とは何ですか? WebSocket は単一の

Java と WebSocket を使用してリアルタイム株価プッシュを?qū)g裝する方法 はじめに: インターネットの急速な発展に伴い、リアルタイム株価プッシュは投資家の注目の 1 つとなっています。従來の株式市場のプッシュ方式では、遅延が大きい、更新速度が遅いなどの問題があり、投資家にとって最新の株式市場情報をタイムリーに入手できないことは、投資判斷の誤りにつながる可能性があります。 Java と WebSocket に基づくリアルタイムの株価プッシュはこの問題を効果的に解決し、投資家が最新の株価情報をできるだけ早く入手できるようにします。

インターネット技術(shù)の継続的な発展に伴い、リアルタイムビデオストリーミングはインターネット分野における重要なアプリケーションとなっています。リアルタイムのビデオ ストリーミングを?qū)g現(xiàn)するための主要なテクノロジには、WebSocket と Java が含まれます。この記事では、WebSocket と Java を使用してリアルタイムのビデオ ストリーミング再生を?qū)g裝する方法を紹介し、関連するコード例を示します。 1. WebSocket とは WebSocket は、単一の TCP 接続で全二重通信を行うためのプロトコルであり、Web 上で使用されます。

この記事では、どちらも信頼できるデータ配信方法である Server Sent Events (SSE) と WebSocket を比較します。通信方向、基盤となるプロトコル、セキュリティ、使いやすさ、パフォーマンス、メッセージ構(gòu)造、使いやすさ、テストツールを含む 8 つの側(cè)面で分析します。これらの側(cè)面の比較は次のように要約されます。 カテゴリ サーバー送信イベント (SSE) WebSocket の通信方向 単方向 雙方向 基礎(chǔ)となるプロトコル HTTP WebSocket プロトコルのセキュリティ HTTP と同じ 既存のセキュリティの脆弱性 使いやすさ セットアップが簡単 セットアップが複雑 パフォーマンスが速い メッセージ送信速度が高い メッセージ処理の影響を受けるおよび接続管理 メッセージ構(gòu)造 プレーンテキストまたはバイナリ 使いやすさ 広く利用可能 WebSocket の統(tǒng)合に役立つ
