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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码
; j/ {" Q, E5 X% g  G4 G
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);
    2 D! l" Q4 t# Q8 M2 H) ~  m
  2. $client=array();1 B, P" c1 S: G- y
  3. $serv->on("open",function($serv,$req)use($client){
    3 T6 T7 U1 \# Y, i$ r
  4.         //echo 'connect'.$req->fd;6 B- i; P+ _6 E# B9 o9 L
  5.         $client[]=$req;
      {3 g8 \* F3 a7 d6 N
  6.         //var_dump($client);1 ^8 W) f) a/ A* A6 Y
  7.         $serv->push($req->fd,'aa');
    $ e& p2 I$ k* q, R7 h$ e- z
  8. });
    . [; ]% p$ K! o7 G4 G2 R$ U, O4 E0 d7 p6 D

  9. / K0 E$ Y5 Z1 ~* [7 m% E7 Q+ v6 V
  10. $serv->on("message",function($serv,$frame)use ($client){
    + ~; C0 b5 g+ H9 m5 Y1 y" w
  11.         /*var_dump($frame->data);2 [4 w  L  [  B& u$ p5 U
  12.         foreach($client as $key =>$val){  j+ H6 v3 H0 T; a3 X& Z
  13.                 $serv->push($val->fd,'aa');
    7 G0 n7 E6 O! N
  14.         }*/" J1 k/ r' {5 Q
  15.         $client=$serv->connection_list();
    ! ?5 a- i+ h7 w4 z4 M9 x4 k
  16.         var_dump($client);$ M8 e% L; S1 d1 x- }5 ?
  17.         foreach($client as $key =>$val){
    + \& O2 h9 z4 }  Y2 b: i0 F" `" `
  18.                 if($val!=$frame->fd){
    ; t  j, j9 V- d" H" z; ]
  19.                         $serv->push($val,$frame->data);4 l. q" P- k! ?
  20.                 }
    * Q9 {& V; W6 @5 B0 j! F8 Z
  21.         }
    + O0 f4 e) H: j3 O+ e
  22.         
    7 r" w; N+ J' l) d6 g
  23. });
    3 [) y9 r5 L9 O0 m8 k( L

  24. ! X& `/ ^* a7 U) b4 R
  25. $serv->on("close",function($serv,$fd){
    ) I4 ~$ _* B3 Z# V6 D: K0 Q( h
  26.         echo 'close';1 ~  L0 H) K9 X/ `
  27. });! r8 _$ ]5 G: M& Q; X$ @

  28. 2 P' O* d6 P# f4 |/ A1 f
  29. $serv->start();8 ^5 F6 X, V5 Q: v. M7 ~1 p
  30. , S' l3 ?6 @% W* Z; k$ k0 ]- f
复制代码
主播客户端
6 E2 X  I2 C: S2 }6 U
  1. <!doctype html>
    ) d* v8 l+ s6 D* e8 l) J$ @
  2. <html>
    1 h# m/ @. J' o( V
  3. <head>! s# O  q' V  z/ V- k
  4. <meta charset="utf-8">
    0 ?# ?8 W4 t' H: K' v+ _9 P

  5. + q0 {' P7 H) n; h  K! v; ^
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    5 E3 e7 e- ]7 n9 R( @" r5 f
  7. <title>404</title>
    # h  e( R  d& F1 g9 u
  8. <style>+ X5 y0 e/ Z- e. x$ O2 H$ q, Z
  9.         body{3 ~) Y$ m9 `/ @  K% ?$ o
  10.                 background-color:#444;
    + Z9 g' \( G" k% E' t7 b1 _
  11.                 font-size:14px;
    / u: K' |8 W! Y+ _* |
  12.         }8 G3 c! W" l% A6 Z4 ]
  13.         h3{
    : q! I' a0 [2 @, H. U
  14.                 font-size:60px;0 L1 a0 |- c( G8 c
  15.                 color:#eee;; Q& _$ A' t1 S' y" f
  16.                 text-align:center;! t3 d! }; }5 e) M( E
  17.                 padding-top:30px;  H: Y" |6 B' |! q3 ~( y0 i1 G
  18.                 font-weight:normal;
    4 X* y" a* s7 ?" W2 m2 b5 n9 n
  19.         }
    * i% K& V2 `: Q* m$ x
  20. </style>
    $ v9 l6 z/ c+ ?" l
  21. </head>
      L" m$ }% C" n1 Q4 v/ A% i
  22. 0 _* p$ e4 L" s
  23. <body>1 z) p% |& M& @% N( a
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>5 e. V! w* m/ i3 }' s0 X. G
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas># u. x& l( P8 [) G4 `
  26. <canvas width="400" id="canvas2" height="400" ></canvas>1 B+ O' V1 E. O7 \' q9 t  ~
  27. <script>
    ) I' f& q9 N- M9 {) ]4 |9 p
  28. var video=document.getElementById('video');- ]5 c1 @' \9 q- B$ [  B; y
  29. var canvas=document.getElementById('canvas');1 |) W0 @# ?7 V- |+ V  }
  30. var canvas2=document.getElementById('canvas2');" H+ {; n4 }- k7 L. l
  31. var context=canvas.getContext('2d');
    , ^8 t8 |- C9 t# S; B
  32. var context2=canvas2.getContext('2d');* k1 q0 O+ Z' {" l
  33. function draw(){
    % W; w  T& X9 v. G7 F
  34.         context.drawImage(video,0,0,400,400);
    2 T: Y* f/ k% h- h; K
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
    1 r+ v  e- @6 i" E
  36.         setTimeout(draw,800);: N7 b1 ?& e% P' r! G# j$ ~
  37. }3 G& J7 ?9 F3 o9 n
  38. 9 l' y- |) E& w0 U# V) W0 J) X
  39. //客户端跟服务端通讯
    ( q' z/ F1 M# L/ t5 B  F4 @
  40. if (window.MozWebSocket)
    ! R( Q! d  E# s
  41. {
    ; F& W5 b7 c) W5 ~8 O2 P2 y5 `6 }2 y4 }
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");2 C: |  S* n' b& \! k
  43. } else+ Z$ T! K# }$ Q( i" f9 X
  44. {6 l, p8 o! `3 q$ g
  45.         ws = new WebSocket("ws://182.61.42.187:9501");
      _9 _7 r8 i; u6 z& ~) ^0 [2 {, q, Y
  46. }2 O  Y8 C! Z, `6 X' b

  47. / r- B$ S1 p2 y0 s' m" `( P
  48. ws.onopen=function(event){
    ( C0 O; D  s8 M( r  @
  49.         alert('连接成功');
    $ m: f, X* j1 x; O1 F- u
  50.         ws.binaryType = 'arraybuffer';
    ; S/ H; c2 R# x9 L$ T6 g, Z5 E
  51.         draw();
    + r. ]$ t2 V% c( R. S5 N9 X& f
  52. }
    / V6 T- z. {! G% R3 _+ U: c/ _2 y
  53. ws.onmessage=function(event){
    3 w# k& A; y% [" K5 R6 r# w
  54.         //alert(event.data);
    + D: B; A- i* a- ^6 t' z& n/ V
  55.         //ws.send(event.data+"client");
    1 w, F' b1 z( w# x  F9 [5 b. g% z( A
  56.         qrCodeImg = new Image();
    , v; ?9 ?) f, @, t) }
  57.         qrCodeImg.src = event.data;
    0 I' \: t8 ?% k! @
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);& M. h) U/ |+ z3 l6 g
  59.         
    3 v& r& i. S6 {' V, }. P' D4 _
  60. }  @: l, O  s8 s, ~+ b1 s
  61. ws.onclose=function(event){5 s) I; T# D( p  I! p* ~
  62.         alert('close');/ F6 _% H7 A3 r( {( x" ^; R+ i
  63. }+ U$ D' }2 H" u- b/ |& G$ K/ @  E1 y
  64. ws.onerror=function(event){
    ; F3 U( A+ I4 g3 F& c6 _( [- a
  65.         alert('error');9 o$ }' \, X1 J( b+ W
  66. }) A% x/ K5 a4 U3 a5 m( S& b
  67. //video,标签模拟视频
    1 K, G8 m, b8 ?$ Z9 \2 `2 v8 ^
  68. 1 O0 C* w5 m- A: l
  69. </script>1 B4 y7 O% {3 s' w  J9 L, d
  70. </body>; ^2 c2 ]3 f6 @( r9 V9 z5 T
  71. </html>
    # [  y% z. G- @

  72. ( k2 C7 ~+ G9 _; E( H* C8 H9 I
复制代码
客户端:
6 K) P- P* {7 J1 O% Q
  1. <html>
    / C$ b- Q4 X6 ?3 v
  2. <head>' Q, J4 ]. `7 i! r; X. R
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">
    & q" }% k, G& N; ]; C
  4. <title>客户端直播页面</title>( B7 ]% s; L, _! W0 d! ]( O4 w
  5. </head>
    8 c7 r/ q; R( _
  6. <body>5 ?6 x" B- T& k- }1 Z3 a, ]: @# j
  7. <img id="receiver" style="width:720px;height:480px">7 b, q( k- e2 }+ |( Z% G
  8. 6 }6 @( k) A9 H) B% r) x5 \1 }
  9. <script type="text/javascript" charset="utf-8">- D$ Y' b' ~2 K1 y. q3 h) R
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");0 s; B5 ]' Z/ G
  11. var image = document.getElementById('receiver');
    ( j- a* w) q* X" s( V4 ]: b
  12. receiver_socket.onmessage = function(data) {4 M4 ]. U7 I. y3 L) ?0 g
  13.         console.log(data.data);
    % I4 B) B( @, T+ x1 n4 y( e2 O
  14.         image.src = data.data;$ d8 [+ d8 M, Q# r9 z
  15. }/ h0 t  e  a$ G
  16. </script>
    # Y9 X9 G) {" [* A: e* G
  17. </body>$ p+ G) g. Z* ?5 q3 i9 I# ~1 E
  18. </html>, J* U/ v/ Z8 S+ }

  19. $ S8 W, t! a$ }# h% S- p# \
复制代码

, i2 D! h7 y# X* N1 Z* H0 Z9 t
( D0 }% i7 s2 v6 M2 H, m: q  ]" l2 {( i2 G

& e" M7 v4 }/ M
3 d0 L, e. N5 C. c9 \) M  |* y7 s& M/ p
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-18 13:16 , Processed in 0.118889 second(s), 19 queries .

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