管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
伪直播功能Websocket服务器0 R- k% m/ [6 Z* m! Z
- socket 通信技术就是两台联网的计算机之间交换数据的技术,这就是 socket 的全部内容了吗?是的!socket 编程远比想象中的简单很多,阅读完这套简明的入门教程你就能胜任简单的 socket 编程了。
复制代码 创建websockt服务代码如下 - error_reporting(-1);
! h6 p9 @# q9 k' U+ B - //创建socket服务
8 i" v. g. p; B$ b) D - $ws = new swoole_websocket_server("0.0.0.0", 9502);! J9 T9 L2 ?6 j+ \: `9 j$ M5 K1 [; K
- //监听WebSocket连接打开事件6 {6 h! R' z0 p4 @& }' v- b. c
- $ws->on('open', function ($ws, $request) {8 s1 {5 ~: P1 k
- var_dump($request->fd, $request->get, $request->server);
; q- G' x8 m0 {" f, u0 t - $ws->push($request->fd, "hello, welcome\n");
, Q; r$ D l t# |8 L - });5 ]" Y! N0 K: f. V! p' l+ q# ~
- 0 u4 B. p2 A- l2 h
- //监听WebSocket消息事件! F: a+ S6 I7 ~# [, _7 p/ h$ A
- $ws->on('message', function ($ws, $frame) {
& @. M- w2 c) F - //推送消息给所有用户# p, T! Q+ g3 `; M/ K, o6 {& u
- foreach($ws->connections as $fd){' t" w* \, X( A7 S, ]
- $ws->push($fd, $frame->data);
5 y9 Z% W2 n) X( ?6 ?; F' Z - }
- A1 [0 t" @& ~5 Y - });
* S1 ^" g* G- V7 t: j, F' b
. _& A! y: q8 f7 ~0 w- //监听WebSocket连接关闭事件
* V7 v) f/ W9 a) h& Y% T1 B - $ws->on('close', function ($ws, $fd) {
- l% K1 C8 `& M - echo "client-{$fd} is closed\n";
5 D) d; ^$ \/ t2 J - });
. j, }4 c! I# s - //启动服务9 y% ^% ]: r1 P7 f
- $ws->start();
- {9 a( _3 |# ?$ y0 L' W. t+ g
" V# [8 b0 | e3 Y" _1 ^
复制代码 ( j( P. ?, d7 L
Websocket客户端- socket 通信技术就是两台联网的计算机之间交换数据的技术,这就是 socket 的全部内容了吗?是的!socket 编程远比想象中的简单很多,阅读完这套简明的入门教程你就能胜任简单的 socket 编程了。
复制代码 创建websocket客户端
3 ~2 I {* D4 ]4 q" @5 o/ i3 J7 d代码如下 - //连接服务器
- e# W2 v0 t+ d7 u( Q0 v - const socket = new WebSocket('ws://lm.com:9502');( K+ K# O1 f6 ^' S( _, k3 `
- //Connection opened6 c/ K6 |$ ~0 o7 c$ {
- socket.addEventListener('open', function (event) {
; `1 O* D+ b' n6 S; R - //发送消息给服务器
2 v3 m3 ]6 Z5 k; y6 ~2 q8 Y! n# f - socket.send('Hello Server! im websockt');$ K7 f. u' s! M( D' O- W
- });; {+ n/ i1 _$ D. P |- S5 v
- // Listen for messages
% O* c, h4 b1 b - socket.addEventListener('message', function (event) { [, y9 n8 i8 W" u' f
- //接收服务器返回信息
8 D1 I) y6 o% E y3 J" K- J. D - console.log('Message from server ', event.data); V9 R5 C$ B; f$ W5 y. F8 {
- });2 x7 m' u( Z0 _4 A8 {
# A- D$ f; L% W
复制代码 伪直播主播页面3 u, {6 V6 |2 i8 v: C
html - <body>2 q. x" g& Q2 M' c- J+ j
- <video id="myVideo" src="./video/tikto.mp4" style="height:auto;width: 350px;" controls=true muted=true></video>
/ h' _8 M: O5 G7 H- `7 P - <canvas id="myCanvas" width="350" height="700" style="border:1px solid #d3d3d3;">
`% G+ [3 B+ M5 S: H) z6 S - 画布; d! z1 P" n0 W: [
- </canvas>
# W {9 E# Q9 e; ]. D( _0 u2 V - <img src="" id="videoImage" width="350" height="700">
7 K4 o% v1 u; F' N" d; O5 V' e - <button onclick="aphla()" style="height: 50px;width: 50px;">播放</button>& N; J- l+ M# z5 x! T$ l$ s$ @
- <button onclick="vdStop()" style="height: 50px;width: 50px;">暂停</button>7 a* C) O' J4 S( h
- </body>
( d* J6 A; Z8 \- \8 t7 @" V
复制代码javascript - var v = document.getElementById("myVideo");
& ^/ S& i" X* C' Q - var c = document.getElementById("myCanvas");* G, a/ [! H8 Z/ Y6 n
- // var c = document.createElement("canvas");% i( S+ `/ @' ^+ x
- var img = document.getElementById("videoImage");
4 q3 M3 G" X y3 ]1 n" v0 z# ~ - ctx = c.getContext('2d');6 i2 o( m1 V' ^# @2 U; B
- var dataUrl;
6 p! T! S- a) r [: O( B - const socket = new WebSocket('ws://xxxx.com:9502');. y: S' Q, j; H: ~: P
- //Connection opened
7 _ d: ]! p7 m. z z; r# O. M - socket.addEventListener('open', function (event) {
/ ?2 H9 o+ I5 k" y u - // socket.send('Hello Server! im websockt');
! r* ]( {, l5 R3 t+ k - });' ^ m5 L* j/ F$ F( K# J
- // Listen for messages
9 O$ `5 N( x3 ~4 R7 K - socket.addEventListener('message', function (event) {3 y7 n% C& n- A
- console.log('Message from server ', event.data);# f/ t( d# ^- j0 i
- img.src = event.data;- _% o: W) U: G- g4 ^/ D
- });
S. s% F W* G( X4 I - % V( q0 N$ N; B" ]8 H, r
- function playVideo() {" _8 ~: W$ d- d
- ctx.drawImage(v, 0, 0, 350, 700);3 F1 X1 G( R/ Z( O Q! l& C
- dataUrl = c.toDataURL("image/png");
# L. [) _: O4 |7 i& k( v - // img.src = dataUrl;" g7 n+ K9 u& b
- socket.send(dataUrl);3 p+ m, @4 k6 Z5 [
- }
. a5 B" }4 x0 ~) z - var tick; s% I( z) ]% H6 Z
- function aphla() {9 L8 N {6 r7 X$ U6 X2 ~/ `
- tick = setInterval(function () {
3 m+ i6 Z- |" ^7 c6 y - playVideo();
# V4 ]( q% R0 `4 v: |9 T - }, 1);- a1 [7 w J# T7 [
- }
. b! ~7 b! ~/ S9 ?' L6 `' J O - function vdStop() {& T4 e7 U& K4 M6 X
- clearInterval(tick);" n9 }3 J& K% J5 h
- }
, ^; m: y5 f1 F3 |
复制代码 用户页面
0 [, D; G8 L$ X2 d" D* W& F) @( E; ~html - <img src="" id="liveImg">
复制代码javascript - var img = document.getElementById("liveImg");3 G2 f Z9 n2 j
- const socket = new WebSocket("ws://lm.com:9502");
% h: C* K6 M; S - //
' i: s$ Z- Q6 F3 D F/ l2 G9 s6 j, ]& C" ~ - socket.addEventListener('open',function(){
% w( V: W1 `& l0 { - socket.send('Hello Server! Im live.html');( v. w/ J# I( D j/ r) I& C2 G* ^
- });
! _+ P! l4 n! z8 w - // Listen for messages( A/ T9 F8 d, t/ |. _. S# o. f
- socket.addEventListener('message', function (event) {
/ e8 M) s. W7 ]; Y - //图片地址! Y5 z# {0 r3 H5 ]& S5 U
- img.src = event.data;0 Y( }# V- U2 w6 o+ Z* A: \) J
- });
1 ]3 L1 R$ v) L3 P. s/ x
复制代码真直播应是通过rtmp推流实现的,本次功能仅作为swoole框架的一个案例用法 w5 Z5 h1 n1 d- ^ ^
$ s! ^2 D2 p4 {! U1 M) ?8 T |
|