管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
伪直播功能Websocket服务器
) H ^, F4 L/ H: B% }: i( m3 `1 Z0 b- socket 通信技术就是两台联网的计算机之间交换数据的技术,这就是 socket 的全部内容了吗?是的!socket 编程远比想象中的简单很多,阅读完这套简明的入门教程你就能胜任简单的 socket 编程了。
复制代码 创建websockt服务代码如下 - error_reporting(-1);
& M6 D. ~+ f, J w' T5 x/ ]* U - //创建socket服务
: g8 m1 H h1 T) l o+ n - $ws = new swoole_websocket_server("0.0.0.0", 9502);
6 ~5 m* k$ M9 }: P: K, y: _ - //监听WebSocket连接打开事件2 l; ^% }5 z) }8 p1 R8 ]* z" H
- $ws->on('open', function ($ws, $request) {/ J+ T/ N5 R% y' e# @
- var_dump($request->fd, $request->get, $request->server);5 L9 U! k# N2 a* y
- $ws->push($request->fd, "hello, welcome\n");; l' I& T' e! j. P
- });! z! X/ c. s) |
7 u6 v, Y. L O& D7 L# o- //监听WebSocket消息事件
) ]7 g# M1 N5 J2 n - $ws->on('message', function ($ws, $frame) {. s. O e5 Q, X$ d# A* E B0 x
- //推送消息给所有用户7 ~5 ~7 k# G8 S* S; E3 Q
- foreach($ws->connections as $fd){8 D0 q/ U. N1 s7 g# G1 U
- $ws->push($fd, $frame->data);
) o3 ?+ |0 ]; j& j$ F - }
! V- Z% @4 |9 r: v& w# M. e - });& v, ]6 n$ d) E& o0 A
- , M* o" S$ c) `" R8 B% p
- //监听WebSocket连接关闭事件
+ W+ A) S+ ^6 e% w/ w4 y( ~6 \ - $ws->on('close', function ($ws, $fd) {
. V. D4 Y5 X: s - echo "client-{$fd} is closed\n";( w$ |' E0 Q3 g. Q5 J
- });' W3 V& u6 |7 F# {5 v7 s( c3 ~
- //启动服务- R8 ]- ]7 W/ ^9 H9 E3 U
- $ws->start();
7 h( u& @; ?( B5 \ - 1 P8 r; y9 x% Y, g4 |, t5 N
复制代码 * I9 V# N% U6 W: F
Websocket客户端- socket 通信技术就是两台联网的计算机之间交换数据的技术,这就是 socket 的全部内容了吗?是的!socket 编程远比想象中的简单很多,阅读完这套简明的入门教程你就能胜任简单的 socket 编程了。
复制代码 创建websocket客户端+ l+ J& f3 r" u/ l, }4 u$ F
代码如下 - //连接服务器/ ]2 |5 q) Q) v; k$ ]
- const socket = new WebSocket('ws://lm.com:9502');
2 z, x% M2 ~* E# _1 `% b+ F - //Connection opened2 g9 |2 b5 z, l( @6 ^7 g: k
- socket.addEventListener('open', function (event) {
% `; C. m2 A) _9 n6 n% P - //发送消息给服务器
$ c5 H# L1 l% m9 k - socket.send('Hello Server! im websockt');4 a2 T5 Q) y) P9 L0 }6 ~ l, I
- });$ l4 u/ Y! @0 X8 l& z( |1 k$ ?
- // Listen for messages
- x/ f' o; j: g - socket.addEventListener('message', function (event) {- c" g0 G5 V" N
- //接收服务器返回信息
: Q( ?+ N9 r4 z8 a# H - console.log('Message from server ', event.data);
+ {5 h2 u; f6 f9 q - });, t( O7 [: o! v& f+ S6 A& R5 I
2 K( _- {/ ~* [) `: K) `
复制代码 伪直播主播页面% p8 ^9 d$ _+ M% z( i# d
html - <body>
+ c0 L6 W9 Z8 c - <video id="myVideo" src="./video/tikto.mp4" style="height:auto;width: 350px;" controls=true muted=true></video>
" p( u1 L8 S' Z/ E& C+ S+ _ - <canvas id="myCanvas" width="350" height="700" style="border:1px solid #d3d3d3;">1 Z+ Z# P2 [5 Y. N2 K2 o% _* `' g. ^
- 画布# y% L3 I& N6 x: q7 y6 H
- </canvas>' t2 P$ l- `3 `4 i. `) O I
- <img src="" id="videoImage" width="350" height="700">. d! p' Z, j) Y9 N4 s
- <button onclick="aphla()" style="height: 50px;width: 50px;">播放</button>* P0 l' V6 U. Q; I
- <button onclick="vdStop()" style="height: 50px;width: 50px;">暂停</button>9 ^, \+ h- b* q8 _* ~
- </body>
/ T, \( {/ U) ?0 v
复制代码javascript - var v = document.getElementById("myVideo");
( w; U- Z$ H S% Q. r2 B: \ - var c = document.getElementById("myCanvas");! z n5 d& k5 f1 c
- // var c = document.createElement("canvas");
. z! q) O4 n9 F/ o, n. H - var img = document.getElementById("videoImage");
8 n7 _/ O# Q7 S- l+ z" h2 _+ }8 n - ctx = c.getContext('2d');
: J# d' Z; w( I' h1 F - var dataUrl;$ Q) O, p- ]3 O0 }
- const socket = new WebSocket('ws://xxxx.com:9502');4 v" D. R% E& f2 l3 K9 ?
- //Connection opened
: C2 F1 G7 G) P- v& ]8 p$ M - socket.addEventListener('open', function (event) {
' [+ {3 w7 L! B# ^/ C' I3 n - // socket.send('Hello Server! im websockt');9 T2 G1 e7 `, }- m ?) S
- });$ g2 w! F7 s) n. C h2 ~ I
- // Listen for messages; i0 M. P2 X) K& [7 @6 `" U
- socket.addEventListener('message', function (event) {
5 C9 x5 n1 e3 L4 w' l - console.log('Message from server ', event.data);* A# p- w/ s8 W8 R/ `: r& K- r
- img.src = event.data;
: b0 k e! ]" m7 g - });
$ A# i! {1 O7 B
/ ^$ [( \2 E8 h& i% ^7 r- function playVideo() {
( O1 A+ A8 M" a7 I8 a7 S - ctx.drawImage(v, 0, 0, 350, 700);: l" p1 \1 |& {% m
- dataUrl = c.toDataURL("image/png");& H8 d8 l0 F( i5 S
- // img.src = dataUrl; A+ s5 O* y/ f6 L) T' Y! _
- socket.send(dataUrl);
! X+ W- L$ Y; F( d6 K1 C" A - }
6 {( Z6 F- k4 a4 z - var tick;. e, e. M: Q4 r. b" k) j
- function aphla() {( E- ]7 x3 o! g4 T: b1 ~
- tick = setInterval(function () {
. L) ]! E: @9 n' O - playVideo();7 s3 `3 i! C( M. y' ^ h
- }, 1);
5 f7 A5 \9 F+ P3 ^ - }) m; p) T$ w, q
- function vdStop() {
2 T) Q! G6 ?) K2 F. {0 [/ R5 p - clearInterval(tick);) _& x9 N1 h. j) ~5 ?5 j2 s
- }+ ^( B/ p- x _; V
复制代码 用户页面: }! \. M1 ]) {2 b8 B" X
html - <img src="" id="liveImg">
复制代码javascript - var img = document.getElementById("liveImg");
1 _" k J2 H& a" C4 K - const socket = new WebSocket("ws://lm.com:9502");
R f, d( T* [5 P! U - //
2 V) S0 ]: b9 K8 x4 x& B8 N - socket.addEventListener('open',function(){# p6 t# i) k7 F( a6 b7 ?
- socket.send('Hello Server! Im live.html');
' J0 |. Z X1 X5 X( P. @5 J - });
8 R- O$ F% I* p3 d - // Listen for messages6 P- F: l1 f/ V6 y
- socket.addEventListener('message', function (event) {, H/ W1 |6 f9 ]! {9 o% }! x# |4 `
- //图片地址
) a- M9 N5 ?3 |% W - img.src = event.data;$ d7 d4 T3 F4 G. d
- });
% x; _5 w- K/ ^* D4 @( O8 k
复制代码真直播应是通过rtmp推流实现的,本次功能仅作为swoole框架的一个案例用法 ! P2 g& l8 |' ?7 j
- y) b: s; O0 `& k8 p. D' _
|
|