管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
伪直播功能Websocket服务器+ ?4 |3 f2 l I
- socket 通信技术就是两台联网的计算机之间交换数据的技术,这就是 socket 的全部内容了吗?是的!socket 编程远比想象中的简单很多,阅读完这套简明的入门教程你就能胜任简单的 socket 编程了。
复制代码 创建websockt服务代码如下 - error_reporting(-1); 0 R8 u$ m B* C" G0 R! K2 s( c, M
- //创建socket服务
( g6 q# p( J8 a0 O$ @ - $ws = new swoole_websocket_server("0.0.0.0", 9502);4 B" u0 X9 p" ?8 w
- //监听WebSocket连接打开事件& L4 O. x5 [$ E8 U4 a
- $ws->on('open', function ($ws, $request) {
4 G# W, R0 c$ y0 s5 R - var_dump($request->fd, $request->get, $request->server);
! U" B4 ]7 t+ P" T - $ws->push($request->fd, "hello, welcome\n");
- a& u, k& s+ e% t - });5 I. o" h: W. m: Q+ v
- ( M! y5 [# T- s7 ]3 g
- //监听WebSocket消息事件6 a/ F; l0 U* k0 ~9 o, V
- $ws->on('message', function ($ws, $frame) {
/ A$ Q* ]! W# p D' p! V0 S" Q - //推送消息给所有用户
& h1 `' x; T; x* _& I1 a5 W: x - foreach($ws->connections as $fd){7 f# O$ T0 o1 V$ J& @' ^: N! {
- $ws->push($fd, $frame->data);0 r9 M8 J/ `7 h/ K
- }' d$ U2 g9 t J7 A% M" v
- });" A9 }: i" |9 `. u0 D0 m
- - W6 v, ? i) S+ D0 \
- //监听WebSocket连接关闭事件
6 y) }$ W2 A; ]) N - $ws->on('close', function ($ws, $fd) {
: z2 J# K8 C) z - echo "client-{$fd} is closed\n";3 g. I" W% i$ N' P Y
- });) B) e% Z' _7 ?- S: I0 Q
- //启动服务: F' R- f4 a( X
- $ws->start();
2 b. u" A. {6 k. T& O Z - * T2 n; I% E, \1 H
复制代码
! g: s- X* ?' Y+ l8 G: DWebsocket客户端- socket 通信技术就是两台联网的计算机之间交换数据的技术,这就是 socket 的全部内容了吗?是的!socket 编程远比想象中的简单很多,阅读完这套简明的入门教程你就能胜任简单的 socket 编程了。
复制代码 创建websocket客户端
& `: A* W& x6 w: P代码如下 - //连接服务器0 {' c; A! I/ E2 F2 [& U0 ^
- const socket = new WebSocket('ws://lm.com:9502');+ t+ o8 G4 e. b4 R) s
- //Connection opened# u- [ i$ e7 F
- socket.addEventListener('open', function (event) {- Z- }! @6 o+ g! d* h& Z. ?6 l, B
- //发送消息给服务器
- M2 H: t0 i l* d$ U, @1 [7 h. J - socket.send('Hello Server! im websockt');
' D8 i" f/ |+ H% a+ Z" E+ p9 I - });" h# t6 e; W4 I2 N% f1 V
- // Listen for messages% w$ S% M- Q z$ |% A f
- socket.addEventListener('message', function (event) {$ N# T/ Z" e9 c# m( C0 b8 u; Z9 t
- //接收服务器返回信息
3 [" @$ S5 ?8 E - console.log('Message from server ', event.data); M! K0 l! `3 `) E/ V
- });
, z. f4 J& |# }: p$ a. @
" u4 A$ B! i/ H% h' L! t
复制代码 伪直播主播页面7 k% R5 ~1 s' j( o4 D0 o e
html - <body>( U+ D0 [& a9 |. r
- <video id="myVideo" src="./video/tikto.mp4" style="height:auto;width: 350px;" controls=true muted=true></video>/ P! l" C I" ^$ S7 v2 ~) A
- <canvas id="myCanvas" width="350" height="700" style="border:1px solid #d3d3d3;">
7 Z( j0 t/ |, _% T, @ - 画布
. i& [' \3 \" ]) J+ G, B# _ - </canvas>4 g; h' X+ O- n! n* @) n& O
- <img src="" id="videoImage" width="350" height="700">
% w$ Y9 [# `, H6 w! |/ d% h3 j - <button onclick="aphla()" style="height: 50px;width: 50px;">播放</button>
! Z/ e* L) O; W' D: i - <button onclick="vdStop()" style="height: 50px;width: 50px;">暂停</button>+ i. T3 L2 b8 X+ K' m' h7 ^5 i
- </body>" R9 {/ \7 h' F0 v' C$ A
复制代码javascript - var v = document.getElementById("myVideo");3 n7 H3 j6 |8 n" P
- var c = document.getElementById("myCanvas");
2 i- B- K' [" V) r - // var c = document.createElement("canvas");. g. Z8 ?# Q, X/ m; ]$ x l( S# _
- var img = document.getElementById("videoImage");- ~9 B% l+ I5 {5 ?: n
- ctx = c.getContext('2d');8 E5 u" |# e8 D5 C% y, q
- var dataUrl;
; h, B3 i# @ ]7 y - const socket = new WebSocket('ws://xxxx.com:9502');
. D1 L& c# J! a - //Connection opened. D7 i+ `7 G, {/ \
- socket.addEventListener('open', function (event) {; @6 ~" i( `: t7 G) l
- // socket.send('Hello Server! im websockt');7 g8 u5 _* X; V$ w
- });( w/ o5 R( V9 r% j; [
- // Listen for messages$ F& b! C% i Z4 }$ c9 S5 c* |; q
- socket.addEventListener('message', function (event) {6 U! S& ]+ B8 g( C( n3 v
- console.log('Message from server ', event.data);: t2 r4 [- G& A( a6 V. f
- img.src = event.data;
5 _' r8 _, |$ j" Q1 E4 f - });6 V7 ^/ y7 s/ n# @; [/ G) o
$ y ~& `! y% X5 a9 a$ r# R- function playVideo() {! }; I( f7 p/ ~
- ctx.drawImage(v, 0, 0, 350, 700);
$ e& K- |5 O* D7 o" w, p# Z' S - dataUrl = c.toDataURL("image/png");
! H8 u. `4 b: w: I p8 r5 g+ q* C - // img.src = dataUrl;
7 Z5 d, S6 O7 y! ^ - socket.send(dataUrl);
$ y* S0 g! D4 h$ c - }
: Z+ V. G3 K4 |$ ]: P% C - var tick;' Z7 s& j1 g5 H; P$ d
- function aphla() {" n4 }2 Q) d) C& r1 {
- tick = setInterval(function () {. H; q# M2 u* g l0 N+ {! Y
- playVideo();
. A% {. C7 j$ H9 ]9 P3 V - }, 1);! p- s* N q& K+ c4 ?
- }
3 G" X6 c1 G* H8 \+ {" L6 M - function vdStop() {: j' |* Q( f& I1 ~0 `
- clearInterval(tick);" b; ~4 \8 z; b: d) Y6 W; \
- }* I# g. r# `" {* ~: k' ?2 v% o
复制代码 用户页面, Z+ g$ t) a% ~( ?" B' P
html - <img src="" id="liveImg">
复制代码javascript - var img = document.getElementById("liveImg");
; X, d* h: l" h' ^ - const socket = new WebSocket("ws://lm.com:9502");# B+ d% v% ]# o$ z4 W
- // u! R8 C' w C$ D# `$ J
- socket.addEventListener('open',function(){- z8 \- ^' V \
- socket.send('Hello Server! Im live.html');; ]7 Z3 `+ q" x, j
- });$ z5 u9 _+ q7 f G
- // Listen for messages
4 D% C0 B7 @- D/ q$ [. I) a - socket.addEventListener('message', function (event) {
+ h. h* s6 J6 Y! q3 j) o - //图片地址1 r" N. I& @9 b. n5 G
- img.src = event.data;
4 e c5 i9 s. E q, q - });- p1 V% Q1 d3 l5 m. I) x
复制代码真直播应是通过rtmp推流实现的,本次功能仅作为swoole框架的一个案例用法
+ e& s$ x4 Y+ q
9 I1 w1 ~( Y6 L) J' M. G# J |
|