


Développement Workerman?: Comment implémenter un système de diffusion vidéo en direct basé sur le protocole WebSocket
Nov 07, 2023 am 11:25 AMWorkerman est un framework PHP haute performance qui peut atteindre des dizaines de millions de connexions simultanées via des E/S asynchrones non bloquantes. Il convient à la communication en temps réel, aux serveurs à haute concurrence et à d'autres scénarios. Dans cet article, nous présenterons comment utiliser le framework Workerman pour développer un système vidéo en direct basé sur le protocole WebSocket, y compris la création de services, la mise en ?uvre du push et de la réception de flux vidéo en direct, l'affichage des pages frontales, etc.
1. Construisez le serveur
1. Installez le package de dépendances Workerman?:
Exécutez la commande suivante pour installer le package de dépendances Workerman?:
composer require workerman/workerman
2 Créez le serveur
Créez un fichier Workerman.php en tant que code de notre serveur. . Le code est le suivant :
<?php use WorkermanWorker; use WorkermanLibTimer; require_once __DIR__ . '/vendor/autoload.php'; // 創(chuàng)建一個(gè)Worker監(jiān)聽2345端口,使用websocket協(xié)議通訊 $worker = new Worker("websocket://0.0.0.0:2345"); // 啟動(dòng)4個(gè)進(jìn)程對(duì)外提供服務(wù) $worker->count = 4; // 客戶端連接時(shí)觸發(fā) $worker->onConnect = function($connection) { echo "New client connected! "; }; // 客戶端請(qǐng)求時(shí)觸發(fā) $worker->onMessage = function($connection, $data) { if(strpos($data, 'start') === 0) { // 該客戶端請(qǐng)求直播視頻流 $connection->send(getVideoStream()); // 啟動(dòng)定時(shí)器,每秒向客戶端發(fā)送一份視頻流 $timer_id = Timer::add(1, function()use($connection){ $connection->send(getVideoStream()); }); // 將定時(shí)器ID綁定到連接上,方便后續(xù)停止定時(shí)器 $connection->timer_id = $timer_id; } else if(strpos($data, 'stop') === 0) { // 該客戶端停止請(qǐng)求直播視頻流 Timer::del($connection->timer_id); } else { // 其他請(qǐng)求,直接返回響應(yīng) $connection->send("Hello, $data!"); } }; // 客戶端斷開連接時(shí)觸發(fā) $worker->onClose = function($connection) { // 清除定時(shí)器 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; } // 運(yùn)行worker Worker::runAll();
Dans le code ci-dessus, nous créons un objet Worker nommé worker et écoutons le port 2345 pour communiquer en utilisant le protocole websocket. Dans la fonction de rappel onMessage, si le client envoie un message ? start ?, cela signifie que le client souhaite demander un flux vidéo en direct. Nous obtenons le flux vidéo via la fonction getVideoStream et utilisons une minuterie pour transmettre les données d'un flux vidéo au client chaque seconde. Si le client envoie un message "stop", cela signifie que le client arrête de demander le flux vidéo en direct, et nous fermons le timer correspondant à la connexion. D'autres requêtes renvoient directement des réponses.
2. Créer un fichier vidéo
Nous créons un dossier vidéos dans le répertoire racine et y ajoutons un fichier vidéo nommé video.mp4. Ce fichier vidéo peut être remplacé par votre propre flux vidéo en direct.
3. Démarrez le serveur
Allez dans le répertoire où se trouve Workerman.php sur la ligne de commande et exécutez la commande suivante pour démarrer le serveur :
php workerman.php start
Après un démarrage réussi, le serveur écoutera sur le port 2345 et pourra recevoir demandes du client. Demandé.
2. Implémentez le client
1. Introduisez socket.io et video.js
Nous utilisons deux bibliothèques, socket.io et video.js, pour implémenter les fonctions client. .
<!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'); // 點(diǎn)擊開始按鈕,向服務(wù)端發(fā)起請(qǐng)求獲取視頻流 document.querySelector('#start').addEventListener('click', function() { socket.send('start'); }); // 點(diǎn)擊結(jié)束按鈕,停止請(qǐng)求視頻流 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>
Dans le code ci-dessus, nous avons créé une page html simple comprenant un bouton de démarrage, un bouton de fin et un lecteur vidéo. Lorsque vous cliquez sur le bouton Démarrer, un message ? Démarrer ? est envoyé au serveur pour demander le flux vidéo. Lorsque vous cliquez sur le bouton de fin, un message ??stop?? est envoyé au serveur pour arrêter de demander le flux vidéo et mettre la lecture vidéo en pause. Lors de la réception des données du flux vidéo transmises par le serveur, nous utilisons la fonction URL.createObjectURL pour créer une URL de flux vidéo et transmettre l'URL au lecteur video.js pour la lecture.
2. Démarrez le client
Visitez la page html ci-dessus dans le navigateur et cliquez sur le bouton Démarrer pour lancer la lecture du flux vidéo en direct. Cliquez sur le bouton Arrêter pour arrêter de demander le flux vidéo et mettre la lecture vidéo en pause.
Résumé
En utilisant le framework Workerman et le protocole WebSocket, nous pouvons facilement mettre en ?uvre un système de diffusion vidéo en direct hautes performances et à faible latence. Workerman fournit une prise en charge des E/S asynchrones non bloquantes et peut gérer rapidement des scénarios dans lesquels des millions de connexions sont accessibles simultanément, ce qui apporte une grande commodité aux communications en temps réel, aux serveurs à haute concurrence et à d'autres domaines. Dans cet article, nous utilisons les capacités de communication asynchrone de Workerman pour transmettre et recevoir des flux vidéo en temps réel entre le serveur et le client, rendant ainsi le système de diffusion en direct plus fluide et plus efficace.
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!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

WebSocket et JavaScript : technologies clés pour réaliser des systèmes de surveillance en temps réel Introduction : Avec le développement rapide de la technologie Internet, les systèmes de surveillance en temps réel ont été largement utilisés dans divers domaines. L'une des technologies clés pour réaliser une surveillance en temps réel est la combinaison de WebSocket et de JavaScript. Cet article présentera l'application de WebSocket et JavaScript dans les systèmes de surveillance en temps réel, donnera des exemples de code et expliquera leurs principes de mise en ?uvre en détail. 1. Technologie WebSocket

La combinaison de golangWebSocket et JSON : réaliser la transmission et l'analyse des données Dans le développement Web moderne, la transmission de données en temps réel devient de plus en plus importante. WebSocket est un protocole utilisé pour établir une communication bidirectionnelle. Contrairement au modèle de requête-réponse HTTP traditionnel, WebSocket permet au serveur de transmettre activement des données au client. JSON (JavaScriptObjectNotation) est un format léger d'échange de données, concis et facile à lire.

PHP et WebSocket?: meilleures pratiques pour le transfert de données en temps réel Introduction?: Dans le développement d'applications Web, le transfert de données en temps réel est une exigence technique très importante. Le protocole HTTP traditionnel est un protocole de modèle requête-réponse et ne peut pas assurer efficacement la transmission de données en temps réel. Afin de répondre aux besoins de transmission de données en temps réel, le protocole WebSocket a vu le jour. WebSocket est un protocole de communication full-duplex qui permet de communiquer en full-duplex via une seule connexion TCP. Comparé à H

Comment utiliser WebSocket et JavaScript pour mettre en ?uvre un système de reconnaissance vocale en ligne Introduction : Avec le développement continu de la technologie, la technologie de reconnaissance vocale est devenue une partie importante du domaine de l'intelligence artificielle. Le système de reconnaissance vocale en ligne basé sur WebSocket et JavaScript présente les caractéristiques d'une faible latence, d'un temps réel et d'une multiplateforme, et est devenu une solution largement utilisée. Cet article explique comment utiliser WebSocket et JavaScript pour implémenter un système de reconnaissance vocale en ligne.

Comment utiliser Java et WebSocket pour mettre en ?uvre une cotation boursière en temps réel Introduction : Avec le développement rapide d'Internet, la cotation boursière en temps réel est devenue l'une des priorités des investisseurs. La méthode traditionnelle de poussée boursière présente des problèmes tels qu'un retard élevé et une vitesse de rafra?chissement lente. Pour les investisseurs, l'incapacité d'obtenir les dernières informations boursières en temps opportun peut entra?ner des erreurs dans les décisions d'investissement. La cotation boursière en temps réel basée sur Java et WebSocket peut résoudre efficacement ce problème, permettant aux investisseurs d'obtenir les dernières informations sur le cours des actions dès que possible.

Avec le développement continu de la technologie Internet, la communication en temps réel est devenue un élément indispensable de la vie quotidienne. Une communication en temps réel efficace et à faible latence peut être obtenue grace à la technologie WebSockets, et PHP, en tant que l'un des langages de développement les plus utilisés dans le domaine Internet, fournit également la prise en charge WebSocket correspondante. Cet article explique comment utiliser PHP et WebSocket pour établir une communication en temps réel et fournit des exemples de code spécifiques. 1. Qu'est-ce que WebSocket ?

Avec le développement continu de la technologie Internet, le streaming vidéo en temps réel est devenu une application importante dans le domaine Internet. Pour réaliser un streaming vidéo en temps réel, les technologies clés incluent WebSocket et Java. Cet article explique comment utiliser WebSocket et Java pour implémenter la lecture en streaming vidéo en temps réel et fournit des exemples de code pertinents. 1. Qu'est-ce que WebSocket ? WebSocket est un protocole de communication full-duplex sur une seule connexion TCP. Il est utilisé sur le Web.

Dans cet article, nous comparerons les événements envoyés par le serveur (SSE) et les WebSockets, qui sont tous deux des méthodes fiables pour fournir des données. Nous les analyserons sous huit aspects, notamment la direction de la communication, le protocole sous-jacent, la sécurité, la facilité d'utilisation, les performances, la structure des messages, la facilité d'utilisation et les outils de test. Une comparaison de ces aspects est résumée comme suit?: Catégorie événement envoyé par le serveur (SSE) Direction de communication WebSocket Unidirectionnel Bidirectionnel Protocole sous-jacent HTTP Sécurité du protocole WebSocket Identique à HTTP Failles de sécurité existantes Facilité d'utilisation Paramètres Paramètres simples Performances complexes Vitesse d'envoi rapide des messages Affecté par le traitement des messages et la gestion des connexions Structure du message Texte brut ou binaire Facilité d'utilisation Largement disponible Utile pour l'intégration de WebSocket
