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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码- T+ i2 U5 H- t9 h4 C
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);
    ; {7 ^( }; G5 ]" \/ @' r" o; [
  2. $client=array();! m; Z8 p& Z) T) ?" m
  3. $serv->on("open",function($serv,$req)use($client){
    0 G7 E6 v* \5 S9 d: U4 e
  4.         //echo 'connect'.$req->fd;
    " q) P( C, @/ d, ?. {
  5.         $client[]=$req;
    8 ^, Y4 w6 C' Q7 @5 @
  6.         //var_dump($client);. y* R' G& ]" G6 e' B
  7.         $serv->push($req->fd,'aa');* B; Z- Z3 l" {# }( U, N
  8. });/ V( M: k  v- ]  d
  9. . f. Z  o0 J, g
  10. $serv->on("message",function($serv,$frame)use ($client){
    4 r3 Z% i2 q6 Q5 y$ i
  11.         /*var_dump($frame->data);
    ) d5 a- E# g! }- A
  12.         foreach($client as $key =>$val){
    8 J$ C) M. d: U' ^
  13.                 $serv->push($val->fd,'aa');, c, O5 I. h2 y. b% t
  14.         }*/0 J% n2 F1 Z& v
  15.         $client=$serv->connection_list();. k4 ?1 R6 W: S, u& r0 Y; p& \
  16.         var_dump($client);! s" \: T; }% U# l( K
  17.         foreach($client as $key =>$val){
    0 f( p5 X; L1 E2 ?+ f* r+ U
  18.                 if($val!=$frame->fd){1 J) n9 A7 C- N( [% m* m
  19.                         $serv->push($val,$frame->data);
    0 b) @3 E* m5 O6 \4 t$ R
  20.                 }
    : N/ y# M. ]1 S% t8 E
  21.         }
    3 ?+ l3 @) u4 ^0 P- s6 t
  22.         
    ! I# t0 g3 P9 W
  23. });7 R* `  l- P( c* J

  24. 6 \' p+ O1 k9 B7 p& D& d6 n6 O
  25. $serv->on("close",function($serv,$fd){* z% X% Z: U, ^* M0 P% c* M
  26.         echo 'close';
    - g3 [' d% z& L
  27. });
    $ ~6 m0 e; L; Y: U6 ^) Y5 z
  28. ) g5 Y3 x" O6 a$ H2 k( q
  29. $serv->start();9 H: W; d* A6 N) u3 B. F
  30. 2 _( ]6 V% K( U8 T) R) p, w
复制代码
主播客户端- V6 M+ B& E+ M1 U) Z8 E
  1. <!doctype html>
    . u5 U) U% C1 t% }7 T; ]5 m( Z% l
  2. <html>
    : P0 f. Y- U. `( S5 @( f  {& [2 v
  3. <head>0 y3 M7 ]6 L+ l
  4. <meta charset="utf-8">7 I# w& r& G" W- l6 B& B$ ?
  5. & `. y: C5 r( R0 Q, N5 K) C6 p
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    7 M' G7 N  k+ @
  7. <title>404</title>
    8 R0 o6 E; c5 q" \
  8. <style>
    7 B( t4 K* d7 E' ^; J; t
  9.         body{- r  A& H2 Y8 k% e: \
  10.                 background-color:#444;8 E' ?  j8 c. j( ~" b+ ~
  11.                 font-size:14px;
    , g: J0 }  G! Y' X1 u0 d
  12.         }0 y, S$ u. ^9 R
  13.         h3{' ?3 k3 Z: E4 g
  14.                 font-size:60px;0 K9 j8 ]1 q' M6 C* ^$ D
  15.                 color:#eee;
    9 ^, j: ]) F% W# m! I
  16.                 text-align:center;5 e! ?2 B  `# |4 N
  17.                 padding-top:30px;5 [" b: V1 E9 s0 Q
  18.                 font-weight:normal;5 z% |2 N! H9 n% b/ |, ]
  19.         }
    . O8 p( p3 f+ R- R: L% W
  20. </style>
    ; M1 Z, t6 H0 J# w6 e- \
  21. </head>9 C' R" {% O/ L4 Y. z# W9 A
  22. , e: S. x7 D* T5 y6 w6 I
  23. <body>6 d) y1 d! m3 O8 G5 N+ w  j
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video># t4 f0 U2 w0 D2 y$ w, n. N
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>% o; d! ~7 r" u, u3 c+ G, c) X( [! n
  26. <canvas width="400" id="canvas2" height="400" ></canvas>5 u4 @4 u2 \; {  k- D7 T" ]3 \
  27. <script>. b, H' v8 e5 d
  28. var video=document.getElementById('video');
    5 V! m5 Y9 P. w- O5 u. F% D" ~* n
  29. var canvas=document.getElementById('canvas');* U1 S2 K4 o7 g8 r! ^- f
  30. var canvas2=document.getElementById('canvas2');: V+ v4 N9 o* x) n) E+ d
  31. var context=canvas.getContext('2d');
    % z5 T0 h4 j* l5 |
  32. var context2=canvas2.getContext('2d');( H2 A( j- u% p
  33. function draw(){
    ) ]/ O1 l0 J) i% V+ P, ?+ O
  34.         context.drawImage(video,0,0,400,400);
    : z4 ?& }$ o& R6 X* J
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
    8 P  i5 l4 T, t8 @  {
  36.         setTimeout(draw,800);
    8 b9 U/ {( @- a
  37. }
    8 }$ e' S1 n2 a& c$ _' g' f4 b

  38. # }0 v6 b! W, d8 w3 W
  39. //客户端跟服务端通讯  x& U0 n$ ?7 {( |6 p
  40. if (window.MozWebSocket)% k6 w* K& \% T
  41. {
    2 O! e# s: t1 E3 j) c  e, P, _
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");
    & @, B) a1 R3 \( d) u- d! S* X/ N
  43. } else
    . V: K  Y1 E9 b# X& \; }  T  m
  44. {7 I$ c7 S; D' U/ V4 A# B! _- }
  45.         ws = new WebSocket("ws://182.61.42.187:9501");5 @+ v: U1 p# F( o3 z: W
  46. }$ P" E. q( ], L6 q* E3 X' ^' p# W8 m
  47. 5 G! H; u& r+ m( Q
  48. ws.onopen=function(event){& E" K( ?7 T7 W9 V* K' G; C: w
  49.         alert('连接成功');, w! h# s- S: t
  50.         ws.binaryType = 'arraybuffer';/ P% X3 Z  ?7 d
  51.         draw();( x( L9 L; H( Z! U2 H# p+ G
  52. }
    + R* G4 `" W" g1 x6 X' E0 ^7 ]* g
  53. ws.onmessage=function(event){* ]' B9 U0 M2 [& S
  54.         //alert(event.data);5 Z$ I. l2 i* N- ^# X2 f* Y) {
  55.         //ws.send(event.data+"client");- K( d2 n; F& \8 c. L( C1 b
  56.         qrCodeImg = new Image();* z9 p: G& S# \- E2 E5 t+ g: K0 H. I
  57.         qrCodeImg.src = event.data;
    , I3 O* g# d% e6 H+ Z, N/ T% n  H1 `
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);
    % F* H, i" I6 g1 _6 l
  59.         6 `- |' R$ R0 M7 B6 T( ~
  60. }
    % v2 T5 _5 }0 z/ r
  61. ws.onclose=function(event){
    ; m2 n3 u- ]1 o* G" N
  62.         alert('close');
    ) O" V. i; T( X; j: L( \( [" j  g
  63. }  h4 K; ]! m4 t7 m# x; B
  64. ws.onerror=function(event){7 \# A" `& F$ ?. J
  65.         alert('error');
    + l# j4 p: \( Y& N) h! a( n
  66. }2 ]' r& n" c6 }6 F7 i. S$ s- x
  67. //video,标签模拟视频5 i( s8 Y$ s) O! T+ [6 ~
  68. ; |% P- n- B7 u' B0 ?& j
  69. </script>2 K( `* c4 r7 ^& Y
  70. </body>
    : U# B( l" o4 l' b
  71. </html>
    ! ?& S+ e- h: I& o: U: B
  72. - }' P% q  n, J& ^1 ?
复制代码
客户端:9 I+ f; z& F  P: I/ D- H9 _+ f
  1. <html>$ i" w2 e  q1 [  ^0 q2 P$ X3 Z: e
  2. <head>) r7 |# H7 r. k/ O4 Q0 j
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">
    / j' Y6 ?) {6 d6 `4 c4 l& |' H9 v* P
  4. <title>客户端直播页面</title>2 R' P8 b, Y/ m, J" V! L8 l
  5. </head>
    + r2 \1 Y/ A6 i2 h3 f& L, k9 P
  6. <body>
      a$ u2 n7 ?7 f& W
  7. <img id="receiver" style="width:720px;height:480px">8 ~& q" |1 @3 P$ W
  8. 5 _+ A" ?6 N2 [* c+ f: L
  9. <script type="text/javascript" charset="utf-8">
    , M  A, x! |% Q
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");4 q' u( v. i! L& C
  11. var image = document.getElementById('receiver');; q: E1 d- M# h  m8 J
  12. receiver_socket.onmessage = function(data) {
    * k4 m" m* F* Q; w: z. g
  13.         console.log(data.data);
    1 W; `  m8 X! k( q/ A: Z% a9 G
  14.         image.src = data.data;
    0 }# R0 q/ B8 e* y
  15. }
    : W) P$ v7 l+ W8 |- ^
  16. </script>% J1 T- Z6 B4 Z! E
  17. </body>* X, T1 Y3 ]+ Y: H3 x6 n- v
  18. </html>
    + n3 D1 Q6 S: r! \7 E* p; T

  19. + \6 B# y5 p2 ^( e
复制代码

* U( d5 T7 G# x' i2 Z" A( Y$ j1 E
  Y- b4 h1 {9 e7 F+ t' V! X7 {- R( N! H1 M+ Q& e  A+ v
/ o( L' Q9 ?9 R/ s5 C4 n, L
3 m+ \4 U7 s+ _$ _* N

& `: y& ]8 S& z9 ^
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-16 18:44 , Processed in 0.061253 second(s), 20 queries .

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