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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码9 M0 b$ y! z  ]. ]
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);
    5 E9 i, A3 \  q7 O2 o" i8 A. Y. O
  2. $client=array();
    % o) I6 i/ V% ~! u
  3. $serv->on("open",function($serv,$req)use($client){
    + J7 ]% `# L9 [4 x- V: f8 A8 M
  4.         //echo 'connect'.$req->fd;
    8 v5 c4 D) ?1 s) s$ W
  5.         $client[]=$req;" W; m5 Q) G1 h
  6.         //var_dump($client);& y9 o# A9 h: f- I
  7.         $serv->push($req->fd,'aa');3 |7 p4 C* C- m+ T, C" B
  8. });  N/ u; k$ T% U

  9. ; \% C; u& i6 f& z
  10. $serv->on("message",function($serv,$frame)use ($client){/ p- p  n0 H/ l5 }# y% E5 H- v# V
  11.         /*var_dump($frame->data);
    ; F7 T' u) V$ U& r2 I4 [  G# V, o2 c
  12.         foreach($client as $key =>$val){
    # l% k  E& q! L) W% T+ Y/ \
  13.                 $serv->push($val->fd,'aa');
    , B) x5 W0 z* K- j3 x
  14.         }*/* ^. B$ w6 ^: s
  15.         $client=$serv->connection_list();" g; g& u! T; d2 W
  16.         var_dump($client);1 `& [0 D" d) R" d. M! n. F% R
  17.         foreach($client as $key =>$val){3 l% e' J0 t1 ^5 S" d7 f! W
  18.                 if($val!=$frame->fd){
    & d* U0 E$ @/ M
  19.                         $serv->push($val,$frame->data);
    5 D; X: e! Y3 {4 `
  20.                 }+ F9 k( R0 a& I% G" V) u+ k6 D
  21.         }
    7 d! _; r& D# S, E) m0 v7 `" A# ]% Y
  22.         : w7 D+ z) F0 @3 l: j
  23. });. l# ^# G; R( w  y

  24. " N0 R* o" a% N1 k: A
  25. $serv->on("close",function($serv,$fd){
    % Y* C4 ~. L) F; j
  26.         echo 'close';
    5 f/ L% z5 R/ |/ U' @2 {2 a
  27. });; G5 R" d' y# `3 C/ t
  28. 0 `6 g8 O/ K6 x* D* Z
  29. $serv->start();
    1 N8 D! }  v1 K2 P3 u* _; m. N1 m0 A
  30. $ C% Z: g+ y4 `: H+ x" L2 Z
复制代码
主播客户端- c- ?3 V) ], a9 G7 J
  1. <!doctype html>
    9 b3 F# M5 K! S: {; }
  2. <html>$ H" u+ l) ^2 h. P7 a
  3. <head>
    " d0 S3 k  z2 b7 J
  4. <meta charset="utf-8">
    % B  \7 j$ K4 Q

  5. + J* \4 X& Y5 g0 T4 ~) G. z
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    : [, {* c1 ^' h& _% p: {" n: g
  7. <title>404</title>
    - r, E- ?5 B' W4 `4 e) c" m
  8. <style>
    . a" J& [$ K4 Z4 V4 u/ g9 e2 i/ q
  9.         body{) _) F5 z0 h7 o7 C! o3 \6 N6 c
  10.                 background-color:#444;( ]: y- C0 ?. n
  11.                 font-size:14px;( i7 D5 c. B/ p2 b
  12.         }$ n, J6 B) S5 B0 O+ N
  13.         h3{
    $ Q! C* b: ^- {- x0 j
  14.                 font-size:60px;$ n- l9 a+ P7 j1 b  d" w
  15.                 color:#eee;" S" i$ \: i; W8 L
  16.                 text-align:center;% {: ?( O( f5 o: j" ^' X
  17.                 padding-top:30px;9 a, P3 e' _6 a. s9 Y: G/ _
  18.                 font-weight:normal;
    . k) N1 |2 s% X; Y$ K7 Q
  19.         }) K5 D' s. T1 {
  20. </style>
    / m* D4 h& q9 `( z) d* K& \" C
  21. </head>
    . r! H9 j0 Z$ M+ ~8 A

  22. / s% f+ {. L! p8 j7 j1 f/ ?
  23. <body>" j3 C! w% \+ k7 u* ]
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>
    $ `5 r/ }: b6 L
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>
    . b# d. R8 T/ D) n( r8 t. }- H/ k
  26. <canvas width="400" id="canvas2" height="400" ></canvas>) O0 c1 h' v5 [; U* u
  27. <script>
    + p; S! I, A7 @3 w/ ?: c  z
  28. var video=document.getElementById('video');
    % f( f1 Y6 V9 [4 l) S, Z- z; `
  29. var canvas=document.getElementById('canvas');
    6 ?# p3 j* a& [) c+ q
  30. var canvas2=document.getElementById('canvas2');
    & h3 }! Y: n/ \
  31. var context=canvas.getContext('2d');- u. }' [0 h7 M( e
  32. var context2=canvas2.getContext('2d');+ [) B' Y5 J6 g! W' T1 @
  33. function draw(){
    1 x% D: v# E/ a+ P0 p! x
  34.         context.drawImage(video,0,0,400,400);
    5 ^, Y! g# R2 e2 G( z6 Y
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));' N4 u+ Z. g: V& D% N3 [8 w* h$ G
  36.         setTimeout(draw,800);, w( ^  J$ J" o
  37. }2 m0 d0 ^. t! g9 W/ D

  38. 5 {# J; y- N+ l
  39. //客户端跟服务端通讯! k; w4 q8 R# h6 x" x& a/ Z
  40. if (window.MozWebSocket)9 J3 M" p) ~! v' v
  41. {: i+ b1 m8 `; T5 \# i) ~
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");8 R0 e3 K6 n$ Z, e
  43. } else0 c3 a0 j  @6 l3 m  p
  44. {
    5 E. {8 H- X0 O, _4 ]
  45.         ws = new WebSocket("ws://182.61.42.187:9501");3 H  {2 v: g$ Q+ N, J
  46. }
      [$ V  O% G5 |- T/ ]
  47. : J  T' G$ B9 }6 J5 g
  48. ws.onopen=function(event){$ x4 i# B" ^" g0 [- Z1 P6 {
  49.         alert('连接成功');
    " u9 B6 ?6 R7 z& X9 j" H0 {
  50.         ws.binaryType = 'arraybuffer';  q/ Q6 X+ O( h' x( f! u6 f$ [# u
  51.         draw();$ B9 R; H! A; K9 X9 @' D- u8 L& Q  T
  52. }
    ( O$ I& p+ F2 X2 F  a8 C
  53. ws.onmessage=function(event){
    & I, h- k; s9 `) y5 x* `# q7 A
  54.         //alert(event.data);8 i8 C6 ~6 x; K6 V! h' p
  55.         //ws.send(event.data+"client");
    1 Y! U$ i4 e) O* g$ I
  56.         qrCodeImg = new Image();
    7 [; c& n6 z( R
  57.         qrCodeImg.src = event.data;4 a$ i' u, n6 `) d8 S
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);; {' S- T$ Q! }8 m- g
  59.         # v8 |" p9 q# a2 {, I
  60. }
    * `+ b% h9 F! ?6 F  X8 ]: P' @
  61. ws.onclose=function(event){# g$ w# T  o) w% _
  62.         alert('close');" U1 g6 H9 F7 e8 q  L( p
  63. }
    ' ^) q/ ?3 h- M4 @* r8 D8 f
  64. ws.onerror=function(event){
    3 `8 V* C4 T7 `% G& g! I6 C( @7 s
  65.         alert('error');% h& \$ j" J4 _* Q  ]; I
  66. }
    1 {$ ?: d9 D( x' ^
  67. //video,标签模拟视频
    2 G. W% b6 s/ @( B
  68. 7 G5 s- z9 B% A8 h, ^# w$ }
  69. </script>
    6 ?* }% p% q" x, a+ Y
  70. </body>
    3 y, N4 E& c( X$ F
  71. </html>
    : {' v0 e7 c! c+ V/ p- H

  72. ' S5 g$ e& n3 y. f; _  _9 f
复制代码
客户端:
8 e3 B9 o: j% v& |3 Z
  1. <html>7 F/ v0 d/ a( h% r7 f8 g, X
  2. <head>! c# Y% X# |3 w; r. w
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8"># P  }* m! i4 p' i( j1 k
  4. <title>客户端直播页面</title>5 A3 t, }3 y! r2 \
  5. </head>
    7 ~- s! O7 t9 G2 \, d5 Q
  6. <body>" R& O: E3 \$ M& L2 _7 f/ I
  7. <img id="receiver" style="width:720px;height:480px">! K" r% ], ^% D, ~

  8. , ?  J& E' ?9 P( L- ^; F
  9. <script type="text/javascript" charset="utf-8">3 P* L! U8 i+ i- u/ O- Z; u
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");0 |4 H! y& ?" D) z6 m* s+ I" q
  11. var image = document.getElementById('receiver');9 O; @8 S% V. }# `8 t
  12. receiver_socket.onmessage = function(data) {
    7 {  K+ \/ N: t* j( J
  13.         console.log(data.data);
    , e8 M" ~0 _' C
  14.         image.src = data.data;/ x4 `$ @: i& Y% w) _
  15. }8 {, J- b6 k' I" q1 s
  16. </script>1 V# _5 q/ P; s3 ?/ d
  17. </body>
    ( c& H5 N: l* t9 I$ X3 n) o& t
  18. </html>, K* J. l8 N2 f+ ?0 e3 [/ u
  19. 9 B+ M( ^6 @  \5 Q+ }$ @2 \& ~+ Z& e
复制代码

0 r4 E0 d8 Y* y1 b$ I
/ T; R( M2 r* N* n. |# V4 @" D) ]
  b. E5 X4 t8 C1 t) M; a7 q) L; A' N/ I/ v' _
& G8 A$ A: c8 U* @1 o  ]
% h' a7 W1 N8 [9 t- R- j
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 09:50 , Processed in 0.115465 second(s), 20 queries .

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