管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
伪直播功能Websocket服务器7 m K5 @: ^/ m, d: r6 _
- socket 通信技术就是两台联网的计算机之间交换数据的技术,这就是 socket 的全部内容了吗?是的!socket 编程远比想象中的简单很多,阅读完这套简明的入门教程你就能胜任简单的 socket 编程了。
复制代码 创建websockt服务代码如下 - error_reporting(-1);
$ o8 ~+ \& O, g* R" d5 N - //创建socket服务 G5 d$ I* V; F9 D( e1 R
- $ws = new swoole_websocket_server("0.0.0.0", 9502);+ o4 Z% \* g: }* Q
- //监听WebSocket连接打开事件
% H* N+ g, ?7 t" b+ y - $ws->on('open', function ($ws, $request) {8 X; E* Q" p! ^- o
- var_dump($request->fd, $request->get, $request->server);
9 N7 L1 T! U+ H% u, C4 {1 } - $ws->push($request->fd, "hello, welcome\n");# a. _1 }/ }6 v9 q/ X1 A
- });
4 V+ d- P l' v2 b' o2 ?7 w# B
% G1 o! c! i% A' e" k* G- //监听WebSocket消息事件
, J8 S+ x: T! n& F8 _& U - $ws->on('message', function ($ws, $frame) {5 I4 c' H; e/ u& ], ~, d0 W
- //推送消息给所有用户
! |5 T# z' u- j; S) `' g$ Y" e - foreach($ws->connections as $fd){: h4 P0 `' C9 [) s
- $ws->push($fd, $frame->data);
2 h. H& X) J" T3 q1 e1 V0 _ - }
+ o8 Q7 B3 e; ~6 Z - });) ~8 h% u. q( B
- 3 Q6 _9 h( v% D ^
- //监听WebSocket连接关闭事件0 q9 S. l K( I: a" Y9 Q* ^
- $ws->on('close', function ($ws, $fd) {
! a* J8 a7 b( i2 ]) Z$ _ - echo "client-{$fd} is closed\n";& R8 \" {. b( A2 ~# R5 {4 ]
- });
: o. B* u( H( p8 t8 @ - //启动服务: K7 C0 |# I7 C: q! f5 h
- $ws->start();8 d3 H, N0 X3 z! t# }5 z
7 x+ m c) U. i$ ~" R2 h( X2 F. Q
复制代码
2 O* x* {9 k! m& s8 i R8 xWebsocket客户端- socket 通信技术就是两台联网的计算机之间交换数据的技术,这就是 socket 的全部内容了吗?是的!socket 编程远比想象中的简单很多,阅读完这套简明的入门教程你就能胜任简单的 socket 编程了。
复制代码 创建websocket客户端+ M/ q% Y$ g/ O* H# ?
代码如下 - //连接服务器1 W6 ?8 d& K4 u& r' h* ^8 w9 b+ x1 K
- const socket = new WebSocket('ws://lm.com:9502');
+ G' P' I1 {3 l3 z - //Connection opened% v8 h% ~4 Y% s5 k1 t/ S
- socket.addEventListener('open', function (event) {
" Q+ y* [! Q2 p: I6 q6 ~: |4 b - //发送消息给服务器/ W0 q0 |5 _8 r; e1 C2 c. F8 N4 M
- socket.send('Hello Server! im websockt');
# D$ O* m$ G9 p. M - });0 d1 j3 B: j; V
- // Listen for messages$ }3 x: M$ R+ F2 T. U+ B
- socket.addEventListener('message', function (event) {
z, q" L) a% d9 W - //接收服务器返回信息( [, t% g" F% r% E; e% M3 x* }
- console.log('Message from server ', event.data);. [3 p) s0 \$ j7 J2 e
- });$ ~* X( f# ~9 o( M' R$ f ~
6 x+ R% z( v0 |& G
复制代码 伪直播主播页面- I4 d5 Y- r, G; k+ B
html - <body>
2 d; `1 v0 L' B- `6 p; o, _( \# ] - <video id="myVideo" src="./video/tikto.mp4" style="height:auto;width: 350px;" controls=true muted=true></video>
5 s" N% t! j+ p - <canvas id="myCanvas" width="350" height="700" style="border:1px solid #d3d3d3;">
5 v s" d$ `+ f) Y' [" I - 画布9 d5 K, O' I' l. c8 S/ d5 D
- </canvas>+ p$ a$ O; q1 |( k
- <img src="" id="videoImage" width="350" height="700">8 x; m9 \6 }/ q# |3 D/ L
- <button onclick="aphla()" style="height: 50px;width: 50px;">播放</button>
3 x+ S, a) o a3 C, D8 } - <button onclick="vdStop()" style="height: 50px;width: 50px;">暂停</button>
# X" R2 V& D* a/ N* }, G( M0 o9 V - </body>/ U3 A0 ^" z) q2 h0 X, w
复制代码javascript - var v = document.getElementById("myVideo");
2 k2 I! e) V2 J' h$ v - var c = document.getElementById("myCanvas");5 y, _2 k: Y/ j k2 I
- // var c = document.createElement("canvas");
9 \4 g! D3 _3 ~7 S* e i3 W* i( ~ w0 g - var img = document.getElementById("videoImage"); j* p$ j. l4 b2 W! f% o, A+ X
- ctx = c.getContext('2d');: Y8 _/ P7 W1 G
- var dataUrl;
( i/ w* O& T3 P! v- }5 i# ^ - const socket = new WebSocket('ws://xxxx.com:9502');
_" l# \# J" g - //Connection opened
. j9 Z1 R% w6 S: P. W0 ^ - socket.addEventListener('open', function (event) {% j6 v2 x2 A) {- n$ C
- // socket.send('Hello Server! im websockt');
' l( M2 j5 u3 d* i - });) t9 k! V6 z; F. l6 c; }
- // Listen for messages( W& Q+ K2 z, K2 ?, n4 _! @; p/ b* Q3 F
- socket.addEventListener('message', function (event) {
' q; }) ^2 Y$ |0 D1 e - console.log('Message from server ', event.data);3 |) x. ^: A( {0 n1 C; Z
- img.src = event.data;
7 \1 Q" b5 ^% R% K) ~# t, K - });
2 n1 D) c- R/ ~6 ]0 @# E0 E* u7 Q - + ]' M. F( r! G' ~
- function playVideo() {
* I& k0 E. v/ M- Q - ctx.drawImage(v, 0, 0, 350, 700);9 ` s7 a; D2 e( ~+ r2 F
- dataUrl = c.toDataURL("image/png");+ |" T: K5 |# H5 ?. L
- // img.src = dataUrl;
- z/ D' ]5 \# p0 C1 y0 q - socket.send(dataUrl);
! ?# b) M: v! K* S/ ?% G3 m - }4 `! b) L( M# Q
- var tick;
3 |! q4 q2 r1 ?) b3 f - function aphla() {) _! C. m, |* u! P) z: a9 i
- tick = setInterval(function () {
P! V, z4 {7 E4 l# _+ W( R p% ` u - playVideo();$ \5 r: ^& a) q4 G, S. n
- }, 1);
! d' A9 o% i' }- y, \4 R% { - }5 u% R+ @9 [1 z1 ]* e
- function vdStop() {3 u8 Y' B6 s6 b# ]) H8 n5 D
- clearInterval(tick);6 q0 Y# _' X4 P' X1 W
- }2 L2 m3 {0 m' F& @6 R# h" @1 g( C
复制代码 用户页面8 X& K: C% x' B! E- ?, Z
html - <img src="" id="liveImg">
复制代码javascript - var img = document.getElementById("liveImg");; m9 c O. |: n$ M: S0 O
- const socket = new WebSocket("ws://lm.com:9502");
0 \+ a$ ~4 v4 H/ m& _+ ?' r/ J - //
: B( A& H3 M! W - socket.addEventListener('open',function(){
# r8 r& a" A2 E8 Y; s - socket.send('Hello Server! Im live.html');; i) l4 {* C( G6 f
- });: j9 X! Z& ]' e: T( m
- // Listen for messages
~% q6 E1 Z( [ - socket.addEventListener('message', function (event) {5 S0 v9 W6 J$ S$ R1 s+ @: n
- //图片地址. }5 d" S, `; u" ^
- img.src = event.data;, p6 M( Y& V2 F d
- });" F5 r. F8 \* `. H y- Q* F3 h
复制代码真直播应是通过rtmp推流实现的,本次功能仅作为swoole框架的一个案例用法 ) R0 k; I8 i9 H: W
5 z' v* K/ R* |! \8 P
|
|