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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码- z2 R1 t3 U% m" T
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);
    % a1 R5 k9 U# y/ Y5 S
  2. $client=array();
    7 k- A4 r4 E# }4 L0 d5 K8 q
  3. $serv->on("open",function($serv,$req)use($client){% Z* A. m+ W! A# F+ ~
  4.         //echo 'connect'.$req->fd;8 Z: N) E8 S6 [# w4 X9 \7 n
  5.         $client[]=$req;
    : T: G3 l3 i0 m. h
  6.         //var_dump($client);1 P; v6 \( m9 k. i/ E/ H. r" }. Y
  7.         $serv->push($req->fd,'aa');2 T; y  z- H+ C& b
  8. });
    & c* y  b2 ~  N

  9. , B! g4 c+ U3 L6 ?: G
  10. $serv->on("message",function($serv,$frame)use ($client){
    ( F% I+ @4 [, I1 J. j9 o/ P7 O
  11.         /*var_dump($frame->data);2 p* u6 l; U9 ^2 g
  12.         foreach($client as $key =>$val){& [- C: b2 |+ r  ~2 @# {) Q
  13.                 $serv->push($val->fd,'aa');
    1 z' u- W6 }& M& S
  14.         }*/
    4 z# _; N2 o& E6 e: h  ?' z
  15.         $client=$serv->connection_list();$ B9 n1 H( _) c/ `* {& A$ j
  16.         var_dump($client);
    1 [; Q" Z7 J3 O
  17.         foreach($client as $key =>$val){7 p( F* \4 X# @
  18.                 if($val!=$frame->fd){
    3 V" U& O" b; j" O* ^( Q" Y
  19.                         $serv->push($val,$frame->data);2 H: n2 `" \( b: S* U. u# |' ~( @2 o
  20.                 }
    & W4 t" J1 B+ R. v
  21.         }
    : x9 a5 L7 `2 ^4 d4 [% b- j
  22.         
    8 R8 C4 k. b; y1 B0 t6 y( y
  23. });2 A, H; g" {. Z  P- y
  24. 1 O5 s6 S6 |  j- e! l
  25. $serv->on("close",function($serv,$fd){
    - ^1 ~4 h- n$ d" o6 z
  26.         echo 'close';
    8 T/ ^) z  v* ]$ V( e+ y2 [
  27. });
    & A$ s' N0 O! }. t6 ?7 P
  28. ; g3 Z; h% X- C: ]  M; ]- X
  29. $serv->start();
    . \  `+ g1 A' h7 }  }- y& j

  30. * ~( M9 J$ a" z; q" W8 l" f, B
复制代码
主播客户端+ Q& J( B/ E" ~8 w( w
  1. <!doctype html>  q0 i  y% Z; X8 I' I1 s0 _
  2. <html># P0 S5 I1 c5 b- E+ y+ E+ F
  3. <head>
    ) S6 k# ~: R: O# o. Z4 X3 E
  4. <meta charset="utf-8">$ O; X, I* b5 q1 l. Y

  5. ; u3 b- j  s) d' m. `
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    ( z8 z# [( r& j4 }7 _  D
  7. <title>404</title>. s2 g' V9 w* R7 v! \" B
  8. <style>
    , [, w& `% z- g8 s) l# z
  9.         body{$ [0 V# y  ]0 z# E% I1 P' R
  10.                 background-color:#444;
    1 F8 T/ ^. ~9 k; r! q2 P
  11.                 font-size:14px;# w1 U* x4 E9 o7 a: |0 J
  12.         }
    # y$ y0 s0 j" h7 D5 k
  13.         h3{" O% B. ], z2 W
  14.                 font-size:60px;
    8 |. M# e% S4 ~8 `
  15.                 color:#eee;
    5 t' z) c6 F0 [0 Q$ H6 A
  16.                 text-align:center;4 |  X  i% t7 c6 c; Z- I  Z6 X
  17.                 padding-top:30px;: ?$ v+ A8 r6 y
  18.                 font-weight:normal;
    " [. s) e2 ~; L% s
  19.         }# X; A# m- Z0 r' Y' J$ M' \
  20. </style>
    & F+ t. `$ ?8 Z* e" ]
  21. </head>
    2 O9 g+ Y7 P  ^9 E3 B1 |( L( w# b( {

  22. ' H( g* T2 {' s- W2 K$ ~
  23. <body>' \; C, U4 h9 j( [% t( ]
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>, k; X* C1 n3 _! l: C( u& w8 b
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>
    " o: G0 ^: f. B& j/ e
  26. <canvas width="400" id="canvas2" height="400" ></canvas>5 ]1 Y' p) E- u
  27. <script>0 I- b5 z6 c% b5 {& B! E  j0 R
  28. var video=document.getElementById('video');
    ' n! K% ?4 Y# A! U' {& O; e# ]. G
  29. var canvas=document.getElementById('canvas');+ ?0 |' ~) v. e( S% \- \9 Z
  30. var canvas2=document.getElementById('canvas2');, N3 y6 F8 V4 J9 y5 o# q8 K
  31. var context=canvas.getContext('2d');5 t9 t: V% j: L+ |  [
  32. var context2=canvas2.getContext('2d');
    / t& g( k3 ~2 K8 b/ _2 l
  33. function draw(){* Q" J; f- U: x
  34.         context.drawImage(video,0,0,400,400);
    0 w! Y: U2 V0 u5 ?
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
    ) Y1 ?' q; }; u& ?, l
  36.         setTimeout(draw,800);
    5 k) [" J, }, ]) A8 Q
  37. }1 @' r0 `, D5 |4 q+ o1 o. G

  38. 7 X$ p" f7 e6 s0 g
  39. //客户端跟服务端通讯; k. @+ s1 ]& o8 M0 L! N
  40. if (window.MozWebSocket)! G( Q4 @7 e9 b5 Y( m* L
  41. {: L3 B8 \  Q/ n& u  [1 t
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");
      r$ }; Y- A/ H
  43. } else
    - d: ^# R# a! ^3 E, p  t2 M; n
  44. {
    # N: {4 E. _7 y4 r# I  w
  45.         ws = new WebSocket("ws://182.61.42.187:9501");
    + w5 `& f% ], g3 P% _
  46. }
    + K; |. P/ V! U

  47. & P% S5 U8 X7 }* A1 o5 {
  48. ws.onopen=function(event){
    ( j* g: `9 P+ B1 c, I/ F
  49.         alert('连接成功');
    % x! R/ l6 ?+ A' Y" G
  50.         ws.binaryType = 'arraybuffer';+ b: O0 E( t/ A1 x. Q0 V& \$ K
  51.         draw();9 V6 l, i+ l( T+ O
  52. }- M4 z/ y- z8 @& \  _: \
  53. ws.onmessage=function(event){$ p1 I: m  N7 q- d9 v
  54.         //alert(event.data);
    4 b, h- k- l; \' C; }4 g
  55.         //ws.send(event.data+"client");& N( h$ m, b% C/ K* h- Q0 @
  56.         qrCodeImg = new Image();, f) S7 V* p- j' W9 }  ], N
  57.         qrCodeImg.src = event.data;) e, D- {0 J6 u4 o, z
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);
    5 o$ `1 G) t, z2 N6 u3 n+ l
  59.         3 ?/ p$ ?. S6 H+ F
  60. }- {# _, `- Z! j8 V/ h5 ~1 v4 k
  61. ws.onclose=function(event){
    " u) M! A( n; ^, H
  62.         alert('close');6 ^+ ]1 l2 I/ E) L4 l
  63. }. L/ R0 L6 h2 U4 e
  64. ws.onerror=function(event){
    9 h1 S3 p. E% @) g+ O: _8 l
  65.         alert('error');; M( \4 K0 I0 [1 u* n
  66. }6 t8 R, i' {1 R
  67. //video,标签模拟视频9 I+ l! X$ g: ]8 u. l0 b! d' y

  68. , B$ B( h4 Z2 W7 q# Z% o
  69. </script>3 r! p# n+ C5 Y5 C: C
  70. </body>/ F* o) D2 j" u/ l( D; a' L
  71. </html>
    4 w' [4 x, j3 V# l3 T
  72. $ ?6 {* t) H$ e. x' l: X
复制代码
客户端:! ^: k  s! d+ `  \  K2 i" w
  1. <html>
    . V/ y' ^2 K: z8 B' ^* J: R
  2. <head>
    $ D8 {6 M5 z+ d1 g1 j5 M
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">
    0 ]- k7 O4 {9 `5 I- a0 C
  4. <title>客户端直播页面</title>& O% w+ |% q' a! F
  5. </head>
    ! [4 i2 z0 x6 E) \8 t
  6. <body>' f# {4 Q" F0 d
  7. <img id="receiver" style="width:720px;height:480px"># G8 `' T  r5 _/ t( O

  8. 0 |% q2 h' T5 Y
  9. <script type="text/javascript" charset="utf-8">9 V% H4 e4 j3 g/ V- y6 i( I
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");- k' ~$ ~2 P2 N$ @
  11. var image = document.getElementById('receiver');
    4 U3 U% [$ N. X
  12. receiver_socket.onmessage = function(data) {* n$ g% a3 m" K$ Y1 E* V
  13.         console.log(data.data);  }+ w; T, v3 k; ^
  14.         image.src = data.data;  t+ B! y# j0 X* T) i- }" G; x
  15. }2 Y2 Q( q8 K, v8 j6 B! j4 ~
  16. </script>
    / h# [& h% h, D3 E. U
  17. </body>7 h0 D7 ^9 [1 v+ g- B
  18. </html>
    6 v) e- I+ S  ^) G8 Y' d4 c

  19. ' K$ a4 r& F4 ^. a
复制代码

4 C; _: h( C9 D8 L9 d* m( }5 k+ g, }  i2 |' E$ S
! ?9 b& n" K* N/ d8 ~* b; `! m
2 V3 I: F5 b# ^( f5 b

0 r9 ~/ b0 w* f  M+ [& ?5 s- a( A. j$ p/ m! @; }1 I
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-6-26 08:10 , Processed in 0.130653 second(s), 22 queries .

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