您尚未登录,请登录后浏览更多内容! 登录 | 立即注册

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 9828|回复: 0
打印 上一主题 下一主题

[swoole] PHP大道至简之Swoole伪直播功能

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:50:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
伪直播功能Websocket服务器- Z9 ^6 g" `# [5 N8 c
  1. socket 通信技术就是两台联网的计算机之间交换数据的技术,这就是 socket 的全部内容了吗?是的!socket 编程远比想象中的简单很多,阅读完这套简明的入门教程你就能胜任简单的 socket 编程了。
复制代码
创建websockt服务

代码如下

  1. error_reporting(-1);  0 k- t9 s. k% N  z
  2. //创建socket服务
    * R- x: ?' v2 C$ N
  3. $ws = new swoole_websocket_server("0.0.0.0", 9502);( O4 g2 d: \6 C% j. a7 i
  4. //监听WebSocket连接打开事件& k( q' c1 [( f' }9 m: H
  5. $ws->on('open', function ($ws, $request) {1 n' w  N+ i5 n8 k  X0 V
  6.      var_dump($request->fd, $request->get, $request->server);3 \' T5 s( j9 p1 M! S0 K
  7.      $ws->push($request->fd, "hello, welcome\n");3 T# @) O; p# p
  8. });# ~. z! d; Y% Y* V! ~+ ?
  9. ! x/ k# L+ H( F) A1 H
  10. //监听WebSocket消息事件
      K' o0 }, g& }9 Q/ @6 m" E2 L
  11. $ws->on('message', function ($ws, $frame) {: F) a" f0 `2 a' n3 b  A
  12.     //推送消息给所有用户
    0 x9 D8 l7 h2 Z8 a
  13.     foreach($ws->connections as $fd){- B3 O$ |# M4 E
  14.         $ws->push($fd, $frame->data);" r, c4 h+ L) J5 }7 M% L6 K
  15.     }
    ' O, T9 ~( y: R1 b7 Y
  16. });% V1 r5 {; O# U! B
  17.   O2 x+ R1 g; K$ T
  18. //监听WebSocket连接关闭事件2 G1 h- n* ~6 g
  19. $ws->on('close', function ($ws, $fd) {1 q: n8 G: ?" T6 q8 H: b8 A
  20.     echo "client-{$fd} is closed\n";
    ; T" `' m5 s5 Y* j5 P
  21. });" F2 g/ {% a* l$ R' z
  22. //启动服务
    3 P9 q" b# N* m& `& m
  23. $ws->start();
    2 K# z2 y; u" Q
  24. ! t% ^" J: D( x) m4 q+ l& S/ U
复制代码

- L5 k6 `1 L- Y/ F- S' c5 I' ^$ BWebsocket客户端
  1. socket 通信技术就是两台联网的计算机之间交换数据的技术,这就是 socket 的全部内容了吗?是的!socket 编程远比想象中的简单很多,阅读完这套简明的入门教程你就能胜任简单的 socket 编程了。
复制代码
创建websocket客户端& B/ D5 A0 A1 k9 Q# b. @2 V5 h! c3 o

代码如下

  1. //连接服务器' P& b" S+ }7 D; o
  2.     const socket = new WebSocket('ws://lm.com:9502');( ]4 T: r9 v# l& J5 k7 B- _2 x
  3.     //Connection opened
    $ F; \% P( I- _7 V
  4.     socket.addEventListener('open', function (event) {( u, [( Z+ Y; z( p$ b+ r
  5.             //发送消息给服务器! g: w: W+ P" B% P% [
  6.         socket.send('Hello Server! im websockt');
    & c3 i8 e" e# G6 A8 C- x
  7.     });
    9 v4 m4 x0 y* n0 f) I( {( |0 ]
  8.     // Listen for messages9 g. l! j+ X; v; ^; Y! z: i
  9.     socket.addEventListener('message', function (event) {
    1 F. p0 e# @: n. O9 x
  10.             //接收服务器返回信息  f- [3 w5 C: F
  11.         console.log('Message from server ', event.data);
    1 q8 H% f/ B) r( R9 J
  12.     });
    , Y1 A7 A. Q# M: k4 ~0 j
  13. # \( G9 d1 @- L8 g+ X
复制代码
伪直播主播页面" P, }8 T% W  o! W5 Y: M/ y$ Z! R

html

  1. <body>
    ( ~% s9 H/ @8 L1 q7 X
  2.     <video id="myVideo" src="./video/tikto.mp4" style="height:auto;width: 350px;" controls=true muted=true></video>3 B' _7 \3 I0 T+ F9 y
  3.     <canvas id="myCanvas" width="350" height="700" style="border:1px solid #d3d3d3;">
    ! r  M7 P/ q' n- o6 `, }( T
  4.         画布
    4 D3 x1 T1 G( {7 _, w0 i( Y
  5.     </canvas>7 J0 ?' d# e2 b+ e* b
  6.     <img src="" id="videoImage" width="350" height="700">, x& U' y% w3 k
  7.     <button onclick="aphla()" style="height: 50px;width: 50px;">播放</button>; J& g, B$ u2 v0 ~- E+ N9 m! W
  8.     <button onclick="vdStop()" style="height: 50px;width: 50px;">暂停</button>
    * i0 O+ \9 {- E
  9. </body>
    . }! j8 C0 A. e" H, @, ]
复制代码

javascript

  1.     var v = document.getElementById("myVideo");
      |9 v: G) \. S$ I4 B$ @# v: n
  2.     var c = document.getElementById("myCanvas");/ _  p1 ~/ \- D5 g% t% B; {
  3.     // var c = document.createElement("canvas");
    % `, m% f9 Y) I/ ~
  4.     var img = document.getElementById("videoImage");  W7 J3 a7 {- |% \% X
  5.     ctx = c.getContext('2d');
    9 c4 T" }* x9 }! }4 S) F
  6.     var dataUrl;
    & H. o& B' e2 t- ?0 A
  7.     const socket = new WebSocket('ws://xxxx.com:9502');) D/ x$ E) k. }0 {8 \# Q; B4 f
  8.     //Connection opened& s! C1 [) |0 f1 a5 E
  9.     socket.addEventListener('open', function (event) {
      d  G7 l! A/ D; W% H& Q
  10.         // socket.send('Hello Server! im websockt');
    " C! p8 l0 U# ?
  11.     });; K% ?5 u- F: b3 q
  12.     // Listen for messages
    + ~9 }- P$ b) o% ^) E
  13.     socket.addEventListener('message', function (event) {9 L( E, i' v4 _1 r
  14.         console.log('Message from server ', event.data);0 p& N0 b% T8 z" r+ }
  15.         img.src = event.data;0 M/ P% X4 n$ ^1 B, K
  16.     });* c4 ?+ ^! E2 M0 v

  17.   _* V" t% H* [: a' Q8 D
  18.     function playVideo() {/ Q/ x+ b. R/ N4 b2 b& y" o
  19.         ctx.drawImage(v, 0, 0, 350, 700);1 V$ a' r/ I1 G! w
  20.         dataUrl = c.toDataURL("image/png");
    9 ^0 I* T5 R7 z4 L5 w9 k9 A
  21.         // img.src = dataUrl;3 |- C3 @1 U7 o# |0 Y1 G
  22.         socket.send(dataUrl);
    - Y% L% _# ^4 \. s- R
  23.     }: _! ?- [! i1 S. E
  24.     var tick;
    6 C# g+ p2 R: _, x4 ?# {, l" d1 ]
  25.     function aphla() {
    " }# e6 k' }7 P% g. t( m
  26.         tick = setInterval(function () {" Q$ R" U$ ~" t2 k7 T
  27.             playVideo();
      T' S; O* S8 X" _! C) c% e
  28.         }, 1);
    % J6 P' p( ^# u  j
  29.     }; z9 T: e) K, C+ e# w& X
  30.     function vdStop() {
    0 G% s/ `0 W2 _7 U+ ~) N; ]$ f$ o
  31.         clearInterval(tick);: z$ v0 S- j: q3 [. H, Q
  32.     }
    9 m. o& e" P1 q
复制代码
用户页面/ Y& h8 v( O" o7 v8 p$ k3 D

html

  1. <img src="" id="liveImg">
复制代码

javascript

  1. var img = document.getElementById("liveImg");) v' m$ X( L2 q7 o& X8 y+ Z
  2.     const socket = new WebSocket("ws://lm.com:9502");) N- F2 w  M) M4 r) U% @
  3.     //
    8 _; n( G* m8 A7 X, v. u4 E
  4.     socket.addEventListener('open',function(){9 i& g) X- h* H! `* i
  5.      socket.send('Hello Server! Im live.html');
    ' Q9 i) D$ d6 `
  6.     });. x+ G8 o: a1 W5 o
  7.      // Listen for messages% G0 G. F) H, ^. \6 h
  8.     socket.addEventListener('message', function (event) {! k8 t# J) G) _2 t/ a3 ]2 ^- k" Z
  9.         //图片地址
    0 K1 B, U* N6 H- q  ^! i( }6 G
  10.         img.src = event.data;
    ( b9 x) ~5 S  ~! e2 S; _3 R9 c
  11.     });
    9 T3 R6 T% _) t3 h0 l: f- s
复制代码

真直播应是通过rtmp推流实现的,本次功能仅作为swoole框架的一个案例用法


% j3 x( O' g, \# O, j/ R6 G5 f) e& |. l, z, \5 F
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-20 02:03 , Processed in 0.170298 second(s), 19 queries .

Copyright © 2001-2024 Powered by cncml! X3.2. Theme By cncml!