管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
伪直播功能Websocket服务器5 p( ~3 {% i; T1 D3 ]$ w
- socket 通信技术就是两台联网的计算机之间交换数据的技术,这就是 socket 的全部内容了吗?是的!socket 编程远比想象中的简单很多,阅读完这套简明的入门教程你就能胜任简单的 socket 编程了。
复制代码 创建websockt服务代码如下 - error_reporting(-1); - W( h) J7 }3 u8 Z$ H
- //创建socket服务# a0 X4 L7 @/ U- R. G( U
- $ws = new swoole_websocket_server("0.0.0.0", 9502);+ E* ]/ M/ R& I* [: o
- //监听WebSocket连接打开事件
_* y( A; U5 x5 c$ F - $ws->on('open', function ($ws, $request) {/ _/ A2 K, K& m) l* v
- var_dump($request->fd, $request->get, $request->server);, f- H- O# C3 q' Y2 o: Z
- $ws->push($request->fd, "hello, welcome\n");
1 C k0 j) x# H7 O* N1 a( A/ g+ P - });) k4 f% A1 D& ]% [* m
- ; w/ q* ^3 S6 ^. _; X' s
- //监听WebSocket消息事件
* w% A! P4 P$ P7 }, E - $ws->on('message', function ($ws, $frame) {: H% _( q7 E; l+ Q! ]
- //推送消息给所有用户
4 T( S8 T; t* h6 j& G - foreach($ws->connections as $fd){
: z- d# \$ O% M6 S+ T s - $ws->push($fd, $frame->data);9 x; g/ {' R* j- u# o' O
- }
& h0 b8 |1 i! M8 v* U, M - });+ j, r: t- E$ ]4 e0 W) Y+ l+ ]# U5 L
5 ?& {; ~. P* g. w2 }% d* m% a- //监听WebSocket连接关闭事件
6 k- a' [+ Q# d) {! {6 g+ F. A" j6 ~ - $ws->on('close', function ($ws, $fd) {4 k, B( C% z' {, ^2 U2 G
- echo "client-{$fd} is closed\n";. P8 N$ F- o Y1 k
- });, q! J% D9 H( `# F) H( u
- //启动服务
" n- p2 e5 a" B+ d+ L6 D - $ws->start();( \% T6 H. T+ n- w% s
- . D9 c% W( c7 n
复制代码 9 M! U& C* F( L4 y# E1 i
Websocket客户端- socket 通信技术就是两台联网的计算机之间交换数据的技术,这就是 socket 的全部内容了吗?是的!socket 编程远比想象中的简单很多,阅读完这套简明的入门教程你就能胜任简单的 socket 编程了。
复制代码 创建websocket客户端
! i/ b7 o( B* c* j1 Z) p" q4 u- J- G代码如下 - //连接服务器# f" ^2 ]" `, F3 l/ h% f
- const socket = new WebSocket('ws://lm.com:9502');7 `9 |0 \& K) n/ t' r
- //Connection opened
5 f2 n7 }* B& v2 ?4 H: A2 W - socket.addEventListener('open', function (event) {
$ p- `+ F) [0 L% J; F - //发送消息给服务器
d4 }, O6 _" L" w - socket.send('Hello Server! im websockt'); e8 G, D: O, H; N, q- Y( G6 f
- });7 s# |8 m2 W" u s* a1 A, } R9 M1 m9 x* S
- // Listen for messages; [5 Z3 P! f9 A( L
- socket.addEventListener('message', function (event) {4 S7 o. x% L3 y; P
- //接收服务器返回信息
/ V+ V, w8 V& d3 w3 Z - console.log('Message from server ', event.data);
3 ?3 j/ b; B- G3 g ], C - });3 x' k# K) w1 x8 N
- ! }3 [9 t% z! O: [- @& P* P
复制代码 伪直播主播页面
3 ]2 `1 G& J' o& N1 rhtml - <body>+ i* B* ^$ y/ f% u9 G
- <video id="myVideo" src="./video/tikto.mp4" style="height:auto;width: 350px;" controls=true muted=true></video>
, c1 N! Y* L2 X; K0 Z0 K1 ^ - <canvas id="myCanvas" width="350" height="700" style="border:1px solid #d3d3d3;">8 [, I# l. s6 A$ @ h
- 画布
2 Q+ w3 H- `7 {: d' w - </canvas>* c' N/ g1 B! i! _
- <img src="" id="videoImage" width="350" height="700">2 E3 C# w" B3 {. a, m2 f
- <button onclick="aphla()" style="height: 50px;width: 50px;">播放</button>: H$ O: D7 R' ~+ z. q* M% I- t
- <button onclick="vdStop()" style="height: 50px;width: 50px;">暂停</button>
4 J4 K$ P, y9 ]: | w: T) L - </body>7 ~* g2 P- m7 e1 @8 D
复制代码javascript - var v = document.getElementById("myVideo");
7 l+ e+ e% M' A - var c = document.getElementById("myCanvas");
9 b9 _2 B. G+ b8 R - // var c = document.createElement("canvas");# x B/ p9 c3 h9 b' S! G' t. m
- var img = document.getElementById("videoImage");4 `, y/ A6 @& ~: z
- ctx = c.getContext('2d');
9 x# J5 h6 H" K" Z - var dataUrl;
% ]0 f0 J i! i) o - const socket = new WebSocket('ws://xxxx.com:9502');
! {. O( O' @4 b0 ~; {6 ] - //Connection opened
* b: t0 F0 p' W* Q - socket.addEventListener('open', function (event) { l1 y; R/ M" O
- // socket.send('Hello Server! im websockt');
) G& Y8 G0 v6 |# _ - });
8 L- Y' U' y# b( e Q* I - // Listen for messages
+ i2 C, f$ K' i7 u0 N - socket.addEventListener('message', function (event) {
, C1 D. T! [" p! O - console.log('Message from server ', event.data);9 m% z- u% F3 N
- img.src = event.data;% T. e) y M4 `
- });1 H1 p1 l, r8 H& G& X7 U
1 ~- X4 }9 q1 R7 O; Y- A4 }- function playVideo() {
0 k9 C$ ~+ ^; ?5 t - ctx.drawImage(v, 0, 0, 350, 700);
) \$ @' \# F- V. d$ D - dataUrl = c.toDataURL("image/png");
- T3 E* a/ E* R- q6 \ - // img.src = dataUrl;
0 \8 f' c G2 I' |; v& v b3 |0 I0 I - socket.send(dataUrl);! B6 x+ A# H, T5 x9 h) h
- }
1 o2 b& t3 r$ e6 f" D - var tick;" [: b/ L& g3 b* N. P# `
- function aphla() {
& z/ m$ p, c$ a - tick = setInterval(function () {( _# x8 g- s* B! p' s
- playVideo();
, ]7 R0 @& Q" h5 r( G3 ~# H R8 O - }, 1);
7 X& G/ P) B6 B7 g" K - }
H- ?& N8 Y2 [/ i G - function vdStop() {
! t" M5 T$ ^& B - clearInterval(tick);
* K0 J: x/ C1 G2 Y - }+ ~& m% V' Z& H/ J' e. w. d
复制代码 用户页面
. F8 r) c( ?# ]: Chtml - <img src="" id="liveImg">
复制代码javascript - var img = document.getElementById("liveImg");0 x- a D/ u. `5 X; r) |
- const socket = new WebSocket("ws://lm.com:9502");
c! p: v- y% X; Z4 v P; a/ O# Y - //
, P3 a1 Z( M8 ?7 X& t/ m9 ^ - socket.addEventListener('open',function(){
/ A" k) C$ t) T. f$ Z3 [7 o1 Q - socket.send('Hello Server! Im live.html');
* @% P- j- B! X$ u( V - });
8 l( ]9 k4 _# B: j& u5 m4 o* D) a - // Listen for messages
1 ` ]3 a& z; @/ R - socket.addEventListener('message', function (event) {
; Q% ]6 y# ]/ y - //图片地址
: Q) _8 a% Q$ X - img.src = event.data;1 M/ s7 d% ~5 x4 Z' n1 b
- });+ Y2 \4 Y, ]8 z- s
复制代码真直播应是通过rtmp推流实现的,本次功能仅作为swoole框架的一个案例用法 ( k( z% g# H4 @) Q( p; }4 d
4 o+ k) W& o( H" g k4 I. R" D) c |
|