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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码
0 M; J2 t3 X% ~9 M/ A/ V: F- ]
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);8 j9 m4 t4 |" X- q. c
  2. $client=array();& c0 t2 t9 y: R$ \
  3. $serv->on("open",function($serv,$req)use($client){  u  Q& H& w' q1 _2 @& r4 S
  4.         //echo 'connect'.$req->fd;- l( h5 p% ?/ @# z1 z8 u
  5.         $client[]=$req;7 l2 m2 I2 r$ ]2 d/ Y
  6.         //var_dump($client);6 y- G$ \, R1 _% J9 n
  7.         $serv->push($req->fd,'aa');. f) y& [6 S& _/ y. h
  8. });$ K) A' q2 F! U8 [
  9. 1 M; ~  U; P% {  X
  10. $serv->on("message",function($serv,$frame)use ($client){; q: }- i. D' u7 \, i- t8 z
  11.         /*var_dump($frame->data);1 D* h0 {5 _9 c- E
  12.         foreach($client as $key =>$val){( j1 ?' z5 m8 S8 d$ h3 [* \
  13.                 $serv->push($val->fd,'aa');
    1 t* C+ x9 n/ I0 l& v' q9 |
  14.         }*/
    ' n/ a; s5 }5 _' w' L$ m
  15.         $client=$serv->connection_list();2 \; R) d, g3 M. E
  16.         var_dump($client);9 Q7 R; I, ]7 l! {+ J. ^* l
  17.         foreach($client as $key =>$val){. J) x8 A/ P" j+ P6 w: b
  18.                 if($val!=$frame->fd){
    . j5 R" r1 O$ P% T: E0 j
  19.                         $serv->push($val,$frame->data);
    ' |# @  E* `8 H2 l6 Y& u7 n
  20.                 }9 t  U( I8 c: J; j" E" e- f* c
  21.         }
      v, ^# X# P, W
  22.         4 _* [) T) X( W7 L3 `
  23. });2 B: D9 \! i6 j
  24. 8 s2 F; _; F1 ]( W! f3 a
  25. $serv->on("close",function($serv,$fd){
    5 M% j7 [+ C( p: U+ o
  26.         echo 'close';
    4 N0 q( R) V# j; |5 g7 i
  27. });8 F0 l1 j4 C5 M9 e$ M

  28. + Z3 o7 c2 F# v4 x
  29. $serv->start();& N1 q. k4 Q- X- w$ P4 v
  30. ' ?. ^& N) M. C
复制代码
主播客户端
8 R9 f7 f% `/ f  b  X
  1. <!doctype html>2 `1 [* B( [# N8 P, v' ~5 w
  2. <html>( x$ H9 i2 F$ b
  3. <head>- I, t  q, p* S1 j
  4. <meta charset="utf-8">% b% _, T$ [6 o' C

  5. 4 f& A1 |7 i- }
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"># V2 [( j( d( e8 q5 p4 e. G! ?; A
  7. <title>404</title>
    ) g' e; V* ~& E! R3 q* y2 \+ Q
  8. <style>0 n  a; P7 O6 f8 ?+ ~& M& `3 J
  9.         body{
    / B8 J" c8 n* R2 q9 q, t5 ~
  10.                 background-color:#444;' g! G# R5 L, ?- v# S) v  u, A& o
  11.                 font-size:14px;
    8 [- I/ s( R  x( G  V# W
  12.         }
    6 L* c1 p& A; w2 e1 e1 M
  13.         h3{' z  S% Y! L/ p  @* V
  14.                 font-size:60px;  N2 Y" c) }1 s* O
  15.                 color:#eee;
    ! N1 P1 a2 ~, h4 x7 u0 e) k, F
  16.                 text-align:center;0 N" a" E/ N% p
  17.                 padding-top:30px;$ S' E1 P1 k1 |, f) N
  18.                 font-weight:normal;+ D9 c1 _3 }% p5 U9 Z
  19.         }
    / p+ b6 D# K3 d* `
  20. </style>
    * i$ j* O1 e; Y, w7 D' l$ T; }
  21. </head>
    4 H  m, \9 a7 S+ b
  22. 7 `. Y4 m2 V/ E$ s9 H4 ^
  23. <body>; o" _# [- p3 r  {9 M; f& w
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>
    2 V2 h9 B) K" o6 c) ?( a9 C
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>
    * p8 R/ v  B$ A9 X9 P# v
  26. <canvas width="400" id="canvas2" height="400" ></canvas>4 }  C) ]+ P! {7 r
  27. <script># _7 G  E+ o+ I0 x. t  ^6 b. }0 u  O
  28. var video=document.getElementById('video');
    0 |$ Z' `( m" R9 `0 z
  29. var canvas=document.getElementById('canvas');
    . p; M7 U4 X+ {- |9 ^( \- l; W
  30. var canvas2=document.getElementById('canvas2');5 a  H% y8 q  {& t
  31. var context=canvas.getContext('2d');! g3 d! Q$ J* T& B, l) }, r" I
  32. var context2=canvas2.getContext('2d');* t) p( X6 Z* ?, H' O# h
  33. function draw(){# z7 v- e2 \; H  `& J
  34.         context.drawImage(video,0,0,400,400);* t9 J6 i2 {* U% d9 Y
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));% _+ j% Z2 x7 j1 |- n) C
  36.         setTimeout(draw,800);  m! b. }" j0 F0 [5 n8 K! w! a
  37. }1 k3 I2 ]0 g. e8 y
  38. " z6 R& @; A  S; u7 A6 }! J! \
  39. //客户端跟服务端通讯( d, ?/ b! |( U7 }' y' ^
  40. if (window.MozWebSocket)
    ( n( T/ x" i8 ^
  41. {
    1 X1 k$ a2 U3 Y
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");
    6 @; z/ O7 f) T: y
  43. } else
    - Y5 i( ]' G" R/ a) D- e+ h' [
  44. {$ t7 i! R2 \# Z5 p7 z
  45.         ws = new WebSocket("ws://182.61.42.187:9501");
    " \/ }1 m- }9 L4 {# k
  46. }6 S7 M' z( T. z; G1 i4 x

  47. $ T: }: ]6 ~" ~) w
  48. ws.onopen=function(event){9 k8 |, i  Z. x0 O* D! N# C
  49.         alert('连接成功');$ I9 ], z: {& {+ P
  50.         ws.binaryType = 'arraybuffer';; L% M& c% W$ \. f7 h% w% J- @
  51.         draw();
    - ^* ^) q: D, e6 \0 D# R; U+ w
  52. }
    0 {+ V+ a1 J7 K1 g( i
  53. ws.onmessage=function(event){3 f8 [0 i  ?7 M) K5 O
  54.         //alert(event.data);
    * q1 I% r7 |8 I( n, Y
  55.         //ws.send(event.data+"client");
    & f( V$ l( l5 K& O
  56.         qrCodeImg = new Image();
    / F: P% D  H2 Y6 t
  57.         qrCodeImg.src = event.data;
    ( K# u0 C, R% U( d$ \$ i
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);
    : t7 V. a1 L) d6 X, T1 s/ M
  59.         ) M, {3 k* G" T, j4 T
  60. }/ W7 B) S) N2 o& x9 U
  61. ws.onclose=function(event){* ?, p6 _1 U" j5 T, g; {/ ~0 E
  62.         alert('close');1 P2 g' z9 x$ j2 B
  63. }, N/ k1 H7 o, F$ ]1 j0 E
  64. ws.onerror=function(event){
    - x  n: \! Q1 l. a  R( ]# n. j
  65.         alert('error');
    5 k  x  }2 a* @6 H; x0 K; K: A
  66. }# U- u0 h4 S0 w  E
  67. //video,标签模拟视频( J2 J) v+ P% |0 X! m& L6 ?5 X8 b8 Q3 E
  68. ) m" s' l( F  V* ^, R& s
  69. </script>
    / k4 N) @/ A/ o; c8 j( o
  70. </body>, `' m- m6 n/ f  |2 ?
  71. </html>
    : J% [9 Z5 P, X* l' [) z

  72. ' k+ P& K. r. Q! P0 V8 |
复制代码
客户端:& F4 I5 P, s, J4 }
  1. <html>
    . W4 M+ m- _+ R( P, |: _3 `
  2. <head>
    & X# C' I4 A* Z, @; I% h  ]( I
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">1 K1 X, Z% }) a9 }  z5 A
  4. <title>客户端直播页面</title>
    # }6 `* G3 `7 z3 g
  5. </head>
    2 a9 K3 a0 F' B0 i7 z1 w2 ~# U  ?
  6. <body>8 D9 e; E3 q! H% t$ ]; q5 r
  7. <img id="receiver" style="width:720px;height:480px">4 S  Q% E  s2 a/ Q
  8. 5 p# W1 ?/ v9 j# Y% ^+ i' s
  9. <script type="text/javascript" charset="utf-8">7 ^; [" I, ~" N
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");: i' m) P$ @, e7 P2 W1 S- g
  11. var image = document.getElementById('receiver');
    # s8 V% l& @' _2 `6 t: F
  12. receiver_socket.onmessage = function(data) {
    & a1 U' o6 W, E) A. L
  13.         console.log(data.data);7 d& f; b& V' Q4 k5 g5 c
  14.         image.src = data.data;; l2 \7 L/ B6 \" n% E4 ^
  15. }& @* i0 r% A1 D" P2 e0 S
  16. </script>: m3 `" z7 w' D$ k& _6 s9 ]
  17. </body>  k- H: Z& \* q9 }) q: m* i6 ?& |
  18. </html>
    1 K; @- d" \& A# M

  19. 3 O+ z* ?( u  H4 f6 C7 R7 K, z
复制代码
2 O1 b+ P/ T# X" [

5 t2 {% b! R3 b8 \" P3 e( j6 b  O  @% J) \

) E5 V" I: R: Y( S* i( C5 V& [( r' ~/ J8 X

+ |2 i' v! N6 Z8 a- _. {
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 01:13 , Processed in 0.109269 second(s), 19 queries .

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