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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole视频直播(记录用 未测试)

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码
! u% _' P+ F0 H: @
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);
    ' q/ I9 u) T) F4 ~4 U
  2. $client=array();
    & y6 a. e3 a" g4 T6 L' i) [' \% |
  3. $serv->on("open",function($serv,$req)use($client){7 P! ~: q  o* S) @
  4.         //echo 'connect'.$req->fd;* S- h8 o2 z) F7 p  Z% z' t
  5.         $client[]=$req;
    % s; T3 ?% v- X- d! K. J3 g" {6 M
  6.         //var_dump($client);: ], ]; D) U: L8 K
  7.         $serv->push($req->fd,'aa');4 Q6 U2 h) Y! Y* K/ J/ s) M
  8. });
    6 @& n5 S: |7 s1 q  Q- g

  9. / [- O: _% P3 g% l) a6 f2 _" Q
  10. $serv->on("message",function($serv,$frame)use ($client){$ R) B/ P4 x' d
  11.         /*var_dump($frame->data);1 o6 L( p( T3 S1 w, u" K- N
  12.         foreach($client as $key =>$val){5 Z% z: |2 D4 q8 Z2 h# Y
  13.                 $serv->push($val->fd,'aa');! v) _  ?3 p8 I) _7 m, i& x/ {
  14.         }*/
    % Q9 [- ]2 f6 G6 e" I, t
  15.         $client=$serv->connection_list();
    3 s1 r6 I) C- S" h9 @7 F# W
  16.         var_dump($client);8 ]4 Q5 v: H. l' z' U
  17.         foreach($client as $key =>$val){9 Q( \) Q9 m0 k+ z" T5 Y
  18.                 if($val!=$frame->fd){
    4 V) h% A1 `; [$ j6 b
  19.                         $serv->push($val,$frame->data);
    ! g8 l+ T5 H$ j
  20.                 }0 W; @2 I/ ~# B4 U* U& E
  21.         }
    0 z% `. u5 ~6 ~: {7 O, K% R
  22.         
    ) Y9 D5 n8 z& R7 K8 J" q7 l
  23. });: V& N% W) n$ ^) P  _  u! w1 m
  24. / ^. L  N- A. a0 P# y5 n
  25. $serv->on("close",function($serv,$fd){
    0 {$ J( n; V5 O. m. T
  26.         echo 'close';
    1 k/ a5 [8 C% X4 O
  27. });: e" n: U; ?4 C, }

  28. 4 r: L9 r# D( a; ?
  29. $serv->start();
    7 Q  l" Z! R; K

  30. # ~  e' q/ s$ m; |* U5 r
复制代码
主播客户端: O+ |* x! i8 g/ ~9 [5 G4 x: H; S
  1. <!doctype html>
    ) M, d% I1 e0 h
  2. <html>
    1 R4 G, x6 J( v8 K. \- B5 A& `/ Q
  3. <head>% n+ Q6 \7 j- D7 }7 Q. G
  4. <meta charset="utf-8"># G# f. @) K: z/ x0 z5 V& A- M$ z; R+ P- m

  5. " @6 Z2 {, l7 `6 J) _3 {* B
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">6 J/ M8 v0 h! j9 k9 t" M
  7. <title>404</title>
    % x* X8 s6 G. s8 x/ r. B" R
  8. <style>1 s7 A% U) n; D: o# f
  9.         body{
    0 q7 N; Y6 X  M% S8 b
  10.                 background-color:#444;: ?. g, L5 q0 m0 e# ]* S8 n. _
  11.                 font-size:14px;
    - U3 v3 K7 S' l. n6 N0 y3 w
  12.         }
    . [, r* X% n, G( _+ c* o7 ]
  13.         h3{/ I: U9 I# V& M  \4 E4 q  z: ~4 ?
  14.                 font-size:60px;; F3 V9 p5 y+ Z1 ^) ]4 O' f! L/ R
  15.                 color:#eee;
      a. W7 p/ `$ M4 g/ N& t$ e$ v* m( C
  16.                 text-align:center;
    , @! d& z( O3 J1 r
  17.                 padding-top:30px;
    & i: N9 y1 Y3 }  t) x/ K6 q
  18.                 font-weight:normal;
    # \3 j6 `# ]) q3 R7 G+ \
  19.         }
    % {; H. x1 ]9 l1 M% r* L' ]- h: s
  20. </style>
    ( K: @8 Q' Y6 m- e2 T9 _
  21. </head>
      ^- R  `9 V( c; e1 ], K
  22. * ~  \- S' n1 n/ v9 \7 Y) H1 ?7 [& @
  23. <body>
    % u! C+ s/ a8 `$ c
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>- `7 V( g3 x" T9 T
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>, x! u9 d+ v& x, P6 j3 B
  26. <canvas width="400" id="canvas2" height="400" ></canvas>
    & x5 C( O* c1 y0 n; _+ @
  27. <script>
    : [7 u  W) Q! G, k1 U
  28. var video=document.getElementById('video');
    3 j* _6 c+ a5 ?8 A, _) r: b3 q
  29. var canvas=document.getElementById('canvas');0 C) g5 C( K# _) b* R1 K
  30. var canvas2=document.getElementById('canvas2');
    4 u! u1 U( y9 q; p& a
  31. var context=canvas.getContext('2d');; k7 K% _; v3 V- J& s' j
  32. var context2=canvas2.getContext('2d');
    ' y, K) m' U# i3 J8 N
  33. function draw(){
    * Y& I& \3 C0 E8 F$ \
  34.         context.drawImage(video,0,0,400,400);
    # }( {2 }7 K5 n% f3 m. I
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));1 C5 f2 m8 Y0 z7 ~
  36.         setTimeout(draw,800);% b% l7 |0 r$ R0 _
  37. }' _7 R3 j; o' X

  38. . {; T3 R5 d% C7 t1 J; Q
  39. //客户端跟服务端通讯/ i( b. x' @' T7 M- v. [8 l
  40. if (window.MozWebSocket)$ t- H$ Y( f2 _9 A3 j
  41. {
    ' R# n2 D* c6 d0 s4 d9 w
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");( _7 P+ S: n- O9 u: m$ _" N
  43. } else( D9 }1 \& E% b3 n5 \4 [! B
  44. {# b8 u" _2 _/ ^  m
  45.         ws = new WebSocket("ws://182.61.42.187:9501");4 N- s( m) w) _2 y: V$ ]% ?/ ^
  46. }
    ! S4 C* d* y& k7 J2 I/ x
  47. , `( w& m# q- H# a
  48. ws.onopen=function(event){
    0 N, |3 S8 v+ G* x5 l; e
  49.         alert('连接成功');
      K9 \2 d, u' V' _* l
  50.         ws.binaryType = 'arraybuffer';: f: ^# b$ j+ P# {  ~
  51.         draw();
    " A( n" c7 `; M; F
  52. }
    " A6 Y, e9 e) y. }, H/ ]
  53. ws.onmessage=function(event){
    % p; B( a9 U& A1 j8 ?
  54.         //alert(event.data);& h. l5 \9 G- h$ ?+ C
  55.         //ws.send(event.data+"client");
    1 Y3 b. a! z- u$ f+ F0 q
  56.         qrCodeImg = new Image();6 a. o$ f9 u8 z( w
  57.         qrCodeImg.src = event.data;- L9 k4 a' n$ X, Y5 g, s2 Q
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);
      z8 ?5 _7 E. i9 x9 Y4 x" j) k* N
  59.         # X1 H2 X( f5 k$ p' U( M
  60. }
    ! k6 H- _/ U1 @2 {: e$ Q) D
  61. ws.onclose=function(event){
    ' B1 O- q3 y4 F8 c7 M3 `8 {6 v
  62.         alert('close');
    1 |4 K- P  i# {. A  M, u) T
  63. }
    7 c" R0 Y% j' d1 }
  64. ws.onerror=function(event){
    " e' y. N3 v2 Z  L; b0 Z2 H* F
  65.         alert('error');
    ! ~" k2 |7 B; B4 e" ~! i
  66. }
    , i/ Y0 y9 C% \
  67. //video,标签模拟视频; T6 ^4 E9 {5 J! N
  68. 8 E3 P7 j$ ^6 u% P  D1 b  q4 L7 C
  69. </script>
    * E: y; I+ }3 B  u; y# F$ Z. z
  70. </body>
    " t2 p" v. J  C9 U- g; [& ^
  71. </html>- [' Q; |$ f0 U- x5 h, c5 H8 v

  72. 1 S$ u* k8 D$ q& i8 y5 {6 [" |
复制代码
客户端:2 Z6 _7 S3 \# \( }, Y
  1. <html># U6 C2 v( Q" `( y
  2. <head>* q( F) S) Y$ d$ w& E/ D# o# k  x
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">
    ! |! b+ q$ W# r
  4. <title>客户端直播页面</title>5 J. M/ h1 Q& |0 q2 F7 \
  5. </head>, T& M; B. d  H6 u) x/ q
  6. <body>
    . a; {7 {5 w/ {$ [: ?# z
  7. <img id="receiver" style="width:720px;height:480px">
    . H& P- I& \: v# R% M$ G
  8. 5 U- E* b0 B1 c7 |5 R8 F
  9. <script type="text/javascript" charset="utf-8">  J- u0 n" h7 P. _0 y( |
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");
    $ P2 \! _3 y( F5 }( h: @
  11. var image = document.getElementById('receiver');1 a* l4 g9 _+ c' d- F9 V! I+ U  M
  12. receiver_socket.onmessage = function(data) {
    ! e0 L9 W% M" t2 b
  13.         console.log(data.data);
    8 W( K  s; g) n5 P$ ^
  14.         image.src = data.data;/ U1 d& A7 l6 B9 g
  15. }
    2 ?* z0 i8 ?. b/ X  l
  16. </script>- K0 Q6 ~" N  }- N! V. I" N
  17. </body>
    ( J! U! S$ i# X5 s6 k4 O. w$ V
  18. </html>
    ! X! k( R5 y6 V3 _  _

  19. 3 Y0 T2 \  p$ g
复制代码

" j: g2 r+ ^/ _( N) M& T1 r; }2 O  c2 I% w1 t# j
$ `" T% v% a7 Q! O, ^

0 r$ l3 a% u0 i  }  h3 J& v) p- L3 y8 u6 {3 J1 I
  Y( C/ v- h* v7 l3 p( q- x1 c/ g& d
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-1-30 13:03 , Processed in 0.056307 second(s), 19 queries .

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