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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码
! j4 H3 a1 X5 d  p8 H! j. L
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);
    5 N, \$ u8 \4 M$ F! t! P6 ~" ?6 [
  2. $client=array();- [# s1 Y/ w8 h5 S- D. g3 f
  3. $serv->on("open",function($serv,$req)use($client){; B% \, j( I+ x0 B. R7 ?- M- e. }
  4.         //echo 'connect'.$req->fd;
    ) H# U" u) I% V5 {+ g; d9 s9 F
  5.         $client[]=$req;
    0 c' L& a9 M  X. }. D
  6.         //var_dump($client);
    4 e; `2 k2 P% W4 `7 c) A
  7.         $serv->push($req->fd,'aa');4 V2 M2 A# W# ^4 r+ U2 V
  8. });
    ) t. B, b0 V; D' ]4 t: }! B

  9. ! ^/ H& X5 t! p: N# ]
  10. $serv->on("message",function($serv,$frame)use ($client){4 @+ u% Y* D; e- z
  11.         /*var_dump($frame->data);
    2 h5 `& d: G- M+ v5 C! K  Z
  12.         foreach($client as $key =>$val){2 c, f: R2 ?( O1 H3 k! v7 O" J2 T
  13.                 $serv->push($val->fd,'aa');- ?7 w% O4 B% @% S! B3 r
  14.         }*/  ~2 O2 X8 {* N  f3 O% E
  15.         $client=$serv->connection_list();
    ) L1 E6 g, X# \2 F0 }* Y4 G" }
  16.         var_dump($client);' w& k+ R: l7 ^4 h: j4 U# n/ U
  17.         foreach($client as $key =>$val){
    7 V6 X  \' d5 X2 j' _
  18.                 if($val!=$frame->fd){
    . ~( V, m% H( |* `  I1 P9 n  G
  19.                         $serv->push($val,$frame->data);4 ^/ B6 \3 J3 p/ z8 \
  20.                 }0 C# M/ l6 p1 O& D1 h
  21.         }6 Q) F# ~* [5 a. B  G
  22.         
    ) k3 B/ x3 T, c) _; V' Q( ]
  23. });
    4 p! U4 \9 K5 H8 r- K7 H0 r

  24. * @7 d1 M' O" h, r% w0 s+ q1 n( h
  25. $serv->on("close",function($serv,$fd){. `" @% o" w0 b7 @- c" _" @
  26.         echo 'close';
    ) N( ]4 C, j) [+ _: O+ E
  27. });
    , I! \0 J" r& O- D3 {1 e
  28. / w4 X+ B! }7 L& P" h: D
  29. $serv->start();
    9 i" Z* y( s, B3 e0 g" h! p

  30. ) q1 {3 N" M7 J- |2 f
复制代码
主播客户端
* o7 f4 R* U7 M2 j( ^6 m
  1. <!doctype html>' a0 L  R8 Q; i* [2 o
  2. <html>' V- G+ \/ R7 J% s$ u2 `( L3 [* N
  3. <head>8 B9 W- S5 u! L5 o$ l
  4. <meta charset="utf-8">+ ?2 C: D* P! _& O3 a8 t

  5. 7 r* }3 x5 P; Z1 N& H
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    ( r& t& D3 D0 ]& D; x; I) O
  7. <title>404</title>
    2 j9 E# I) t! |# j% T3 U! x+ j
  8. <style>; L+ H. i! t& f, {
  9.         body{6 y  y. |; b: z7 @$ t, H9 @
  10.                 background-color:#444;
    % e4 f! l* M2 W# r, Z
  11.                 font-size:14px;6 s- [4 q, s' K6 G+ D8 H
  12.         }
    2 P! {" K* W! |4 Q- j) j4 k
  13.         h3{0 i8 i( [+ P4 S  g; o
  14.                 font-size:60px;6 H( t1 |9 ?7 P$ w/ u
  15.                 color:#eee;) v' G8 a. ]4 t9 O+ \$ i$ l
  16.                 text-align:center;
    5 C) p7 o! l$ `4 ^, _
  17.                 padding-top:30px;- W- r' q+ H1 M5 R5 N
  18.                 font-weight:normal;, Y- ?, k  E5 t' S
  19.         }+ }6 x' f5 T. p) G' e- A7 R4 e
  20. </style>6 _* C4 Q! b; a  i/ {! [4 c
  21. </head>; Y# X2 f3 s) Y. F, S
  22. ( V+ \0 u  X1 \4 b- G8 L
  23. <body>
    & \5 A: z; f7 c4 x
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>: Y) R3 X  [1 F, o9 t$ ?
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>$ z: O2 K7 z" F: T* h# _' d* n
  26. <canvas width="400" id="canvas2" height="400" ></canvas>6 I5 x) H) U3 `# _
  27. <script>1 h' C" S5 c5 {6 G
  28. var video=document.getElementById('video');& W0 [, L; F- \0 u, {  x
  29. var canvas=document.getElementById('canvas');
    + E7 `! o( ?3 {% \9 x
  30. var canvas2=document.getElementById('canvas2');
    * X1 }" a' K% d0 i* b
  31. var context=canvas.getContext('2d');
    ' ?3 t7 a* ]. n/ J
  32. var context2=canvas2.getContext('2d');  J5 D0 Q3 r+ D" [  }
  33. function draw(){9 |0 z' t- _% M. x2 }3 d  ^# f
  34.         context.drawImage(video,0,0,400,400);7 Y4 Z  Q! C) z. o
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));, \6 v7 j$ \6 ~; A6 y8 {
  36.         setTimeout(draw,800);
    7 V9 g; D# n. s  \6 M
  37. }
    / w! ^7 B: ]" }4 `3 H! }5 R
  38. 0 }8 {  L% c- o7 r: u6 b  ^9 L9 F
  39. //客户端跟服务端通讯& ^! k) N1 L' @' l1 K
  40. if (window.MozWebSocket)
    5 K, a( s3 L3 N/ Y7 u; X
  41. {' c% X- F& Y' M' v; q
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");: R3 C1 t4 V9 Z0 ~' z  `2 j$ X
  43. } else
    " e8 c6 e9 z4 c/ f, o# l
  44. {% Q% M4 o. S' h/ P2 i+ s
  45.         ws = new WebSocket("ws://182.61.42.187:9501");; P- \% y4 F( G0 |. v6 u
  46. }
    * H/ s2 W) I( `% ~, h! N8 o  ?

  47. % ^# T, R( T: |- i" [& V6 |" N. X
  48. ws.onopen=function(event){
    ) v0 m8 F9 l! ~' {6 @
  49.         alert('连接成功');1 @) u( M2 i* X/ P$ `- N3 m
  50.         ws.binaryType = 'arraybuffer';
    8 Z- m- Z3 w; p7 F* k' k
  51.         draw();
    8 G& \$ ?; s. J8 v" Y" D9 d
  52. }# _, w) q( N% x/ Z' a
  53. ws.onmessage=function(event){
    ! o. E1 i0 Y& G2 ~
  54.         //alert(event.data);
      N+ W- I2 |- c
  55.         //ws.send(event.data+"client");2 e: j2 Q* [' `+ e' h# N
  56.         qrCodeImg = new Image();1 O# m+ ?* N7 z7 H
  57.         qrCodeImg.src = event.data;
    ; a% u+ T: M2 b6 j3 I, }6 v
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);
    1 V# A1 K% W- x( G7 U9 ^
  59.         8 y% I4 @4 }2 q& @
  60. }) t! ]) b6 e; V, p3 [6 ]* p
  61. ws.onclose=function(event){& U0 [; l" g0 q8 i' @
  62.         alert('close');
    3 n7 D0 u: ]: M. g) P, E' I
  63. }
    # p) V* y! I& a# U  `% |/ e
  64. ws.onerror=function(event){
    2 C  O/ \1 L4 [$ `* {& j, Y
  65.         alert('error');
    ' Z6 y7 A3 w8 W* m9 P8 o
  66. }3 z- t( I  ?+ r+ _6 ~1 y
  67. //video,标签模拟视频
    2 H4 e2 Z5 ^- D+ x. U8 p  U6 }$ j

  68. ! m, K7 M1 ~- S  H9 Y0 d( D, O
  69. </script>1 _. S9 c- P6 G& N$ V
  70. </body>
    ) `0 C% n9 _9 g2 L  K$ J4 d
  71. </html>, p, C; A; L' a- F1 n: Q

  72. 8 R8 |; }" r# x& H! B8 L# u. L
复制代码
客户端:2 T" j# Y) a- K7 t& K$ J" r( L# _  u
  1. <html>. Z+ F( I' `- M1 z. Y  I# N3 ^# H/ m
  2. <head>; U/ B- b3 b0 m4 E! y+ h
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">, @. W) b) l- {, a* v! q- w9 |
  4. <title>客户端直播页面</title>5 |  g5 A* n! e* [# d3 x- o
  5. </head>
    6 g1 v7 T. f8 _$ K: b
  6. <body>( }6 S% j& @' C+ k
  7. <img id="receiver" style="width:720px;height:480px">- l# l% G( D) U, J# c+ p
  8. ) H/ k6 p" H" d% F
  9. <script type="text/javascript" charset="utf-8">
    1 E, ^" Y+ r1 i& c
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");
    ( i* E# S* P/ ^: i
  11. var image = document.getElementById('receiver');
    ) j. n" _) W. a6 R) Q7 v. `
  12. receiver_socket.onmessage = function(data) {
    ! K/ P- |! R3 F! F6 l9 c2 T
  13.         console.log(data.data);
    $ j  Y9 y8 G, I8 j+ I
  14.         image.src = data.data;
    $ D3 K  j# ]  R$ C  S" u
  15. }& y: U! r& F# u% E9 R- q
  16. </script>
    . j4 x. T6 i  _6 u7 @- w3 Z( P
  17. </body>3 I: }4 }2 |3 f! \( n
  18. </html>, A1 v0 J1 A; l
  19. 4 Q5 f7 Q. H4 N' b9 l# A- b
复制代码

0 X7 \- v3 d' D* x
. n" }% n( c, q, w6 }, k6 ]
9 G, M, [7 H" M& y
& A# R' z3 ~* p- ~- t1 D! d
1 Y4 K4 F. A, B8 @* e; r1 N8 O6 ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-9-29 04:49 , Processed in 0.117772 second(s), 22 queries .

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