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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码
. Q* {5 u6 Y8 f, l. I% |: U* A' ?0 i
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);, S3 s& @: N0 ~# r6 Y
  2. $client=array();
    ' s' |/ E+ k. Q' `' x) t* N3 N$ ]9 ?
  3. $serv->on("open",function($serv,$req)use($client){1 ]0 f+ t5 E) A3 R
  4.         //echo 'connect'.$req->fd;. y: |- n) f) j) g& r
  5.         $client[]=$req;3 U0 _( H0 c0 Y3 m8 X2 i
  6.         //var_dump($client);
    ' f* x% h; t* I2 e2 v$ g: S
  7.         $serv->push($req->fd,'aa');
    + R( M! ]# \  F- h7 `
  8. });* [# v+ a7 Z( F: ?! a

  9. 1 C6 u; x; B/ y
  10. $serv->on("message",function($serv,$frame)use ($client){
    7 Z! `/ e- C5 c; m$ t; d3 |4 c) Q
  11.         /*var_dump($frame->data);+ G* S5 F4 b4 o8 K
  12.         foreach($client as $key =>$val){
    & {4 }8 A' F! B. K- z; B/ u
  13.                 $serv->push($val->fd,'aa');! ^( Z4 K5 f) B, s0 V) r; x. f
  14.         }*// d: g( d' b4 A1 ~+ \- K
  15.         $client=$serv->connection_list();
    6 w. A2 C& l3 p& S- U* f! Z: N
  16.         var_dump($client);; p- y* X7 _4 B$ J, L0 k
  17.         foreach($client as $key =>$val){) }; \' X0 u1 B1 S! N
  18.                 if($val!=$frame->fd){! W! G5 P: g7 }- B" X# E7 |
  19.                         $serv->push($val,$frame->data);+ a9 Z5 s- b, V3 Y
  20.                 }
    & S& U, \: o) c$ ]% X6 ~
  21.         }
    0 e9 {8 z/ r" a5 d% I$ n
  22.         / Z% L5 I9 ?' [  D
  23. });
    5 R7 d- R8 }8 {
  24. 4 V5 i5 a# b( y$ J$ T
  25. $serv->on("close",function($serv,$fd){7 }& G7 L" }" C% ^* w( F
  26.         echo 'close';
    9 _  ]  h. Q5 k; V3 |7 n
  27. });! Y, @( n6 v: d! Z: ~& A7 M

  28. + J0 [" d( t1 \: z: {( P$ G
  29. $serv->start();
    8 |/ \: r# B  S7 V6 x7 @6 _

  30. ( c( W$ Z/ u) }1 p( J+ n+ a
复制代码
主播客户端5 P6 K$ [3 l6 j0 k0 J+ O2 d0 }
  1. <!doctype html>! x# w, t0 I5 k" w/ h- s# D
  2. <html>+ b) ^5 \2 V( u/ d5 `  m* R
  3. <head>$ V& ?; [0 Q1 }$ |
  4. <meta charset="utf-8">
    1 G3 ~# @; {; ^, O3 B

  5. , Z. f9 B& [% H+ `" P
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    6 M$ A! e' j+ N& ~- _; p
  7. <title>404</title>
    ; M( ]4 T  }7 W! s
  8. <style>
    8 k4 T( R  s4 I; B, m# I2 W
  9.         body{
      y6 {9 w& I: X7 q( w8 h
  10.                 background-color:#444;. H7 S' [& C+ m5 w
  11.                 font-size:14px;
    0 I* ?( a+ z8 G/ P
  12.         }
    6 \( P1 q: C0 ^' x& C
  13.         h3{
    $ p8 c' C0 Z+ N5 X
  14.                 font-size:60px;
    ; |, P. r# ?$ h% S. \  i0 D0 k
  15.                 color:#eee;# d7 s3 a, {0 O2 j4 I4 w
  16.                 text-align:center;" o2 k1 g0 N6 @% e- Y
  17.                 padding-top:30px;8 t& \' n8 @- n
  18.                 font-weight:normal;1 f' k* U5 n+ V+ b- b& y) M& S
  19.         }  e3 t- ^$ T) r/ u* D, w
  20. </style>% M7 Q8 q3 x) r" Q
  21. </head>
    , P2 V0 Y3 p' |$ G& e! Y+ N
  22. 1 J" x: c8 I! _) T& D' C) r
  23. <body>8 j- k0 K9 I, r) p
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>
    ' U# s1 y; o6 \+ g: s
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>7 N: k, ]* |# k4 H" _8 h4 a
  26. <canvas width="400" id="canvas2" height="400" ></canvas>
    : ~# J4 X0 A7 p& s* d) {
  27. <script>: V! @0 y5 Q/ N% {' ?" S
  28. var video=document.getElementById('video');
    2 Y: \$ a9 ^, X
  29. var canvas=document.getElementById('canvas');9 z! \: {) D; \0 k6 ^( }7 [
  30. var canvas2=document.getElementById('canvas2');
    . E/ a7 N$ Z$ Q% }+ R- H% p
  31. var context=canvas.getContext('2d');- f) l& O$ C. I
  32. var context2=canvas2.getContext('2d');0 ^* z7 j& _4 w! Y
  33. function draw(){, a8 a  d. ~; Q1 U. `9 p
  34.         context.drawImage(video,0,0,400,400);
    # ?& ^7 h5 b# x' u! y
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
    ) K. j9 i7 L$ @/ f* Y1 u9 {
  36.         setTimeout(draw,800);
    * t* K( ]- ~' P- G1 ?
  37. }, R9 t  i. C' b4 k3 q

  38. " i' ~7 q$ @  Z( L& S: I# k* B) U. ]
  39. //客户端跟服务端通讯
    ) {2 B9 K! s' `7 r
  40. if (window.MozWebSocket)* R# x: W3 f) u+ I  c( M/ |7 l
  41. {
    2 p/ C, P/ Z. Y' Q5 P% |6 K2 R
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");
    & ?7 ~- v% E4 [) L6 P
  43. } else
    3 p0 Q" H, L7 {1 t0 W
  44. {
    * t9 q8 t7 \, R* `
  45.         ws = new WebSocket("ws://182.61.42.187:9501");
    ; Y0 ~2 {$ }: z! a$ e" S* l
  46. }
    # \/ J) i( ?7 E7 c
  47. 5 n' T+ F# x0 O# a% X4 _; m
  48. ws.onopen=function(event){
    $ `7 `- ]" X$ \: h: L4 K
  49.         alert('连接成功');5 b& Z" X& ?/ n. {* s+ m" m) _
  50.         ws.binaryType = 'arraybuffer';0 _5 L  ?0 ?( a
  51.         draw();7 {" K4 b1 U5 w# O" X. N- ^' `
  52. }+ M& D* r9 W1 G- C" \# J
  53. ws.onmessage=function(event){
    . L7 U9 o8 D8 j4 ~
  54.         //alert(event.data);$ ~$ O& w7 H" X* H- D9 f% ~0 q3 W
  55.         //ws.send(event.data+"client");
    8 p* F! f( w! A1 R2 |
  56.         qrCodeImg = new Image();2 u4 L0 f$ k* e4 [: h6 s. j0 g
  57.         qrCodeImg.src = event.data;: C0 J: J2 [  H6 j6 }' q/ i4 \
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);
    * i+ n! D  O$ \1 J) q2 Y8 E" w1 P
  59.         
    $ ~+ M: G, c5 N# r& n8 x. e6 k6 {
  60. }$ @; \  `& g+ [; k/ v, B
  61. ws.onclose=function(event){0 ^2 w% Y/ x9 y
  62.         alert('close');
    4 c5 Q1 ]2 O1 z% C* M4 R
  63. }( v, _7 g. c* M- N
  64. ws.onerror=function(event){3 G% i/ h, ~( n0 I! T- C
  65.         alert('error');  E9 I: T- e- n3 b! F% e/ Y% n
  66. }
    ; d, M5 M) x: z% }% [
  67. //video,标签模拟视频
    ( N# t$ A$ e+ u. h' ~* L

  68. ' T4 F9 Q2 X# Y6 \& k- z& Q
  69. </script>: O' H5 X7 S& L
  70. </body>
    : B- Y6 r+ I, u$ `
  71. </html>7 F8 b0 ]3 e7 l) q0 v3 L
  72. " p  Z7 d$ }6 A2 n( W6 D) ^
复制代码
客户端:6 P: s0 p1 I# b! D/ x0 U
  1. <html>. j7 U- q9 l  W0 l) f7 J
  2. <head>+ n, c% d; L3 {/ u
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">
    + v% M+ b" f& i
  4. <title>客户端直播页面</title>" e+ r5 O1 l: O; e' `0 y
  5. </head>
    # a# H" {- ?7 t
  6. <body>3 U8 C, B( v/ N9 g
  7. <img id="receiver" style="width:720px;height:480px">4 G& P# k( S' |

  8. ( t* c8 G: e5 U: G
  9. <script type="text/javascript" charset="utf-8"># f$ I, D1 d0 @" V, D6 U9 `( P- y
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");
    $ P4 Z0 g6 p8 p6 @% u' T2 _8 o1 j
  11. var image = document.getElementById('receiver');
    9 V1 A0 Q+ r9 D% \, z4 F3 ^
  12. receiver_socket.onmessage = function(data) {
    ! ~8 ?" H7 j7 C: _
  13.         console.log(data.data);
    : I4 s# h/ O9 E2 N- Q6 \; {8 a5 m
  14.         image.src = data.data;* q9 c7 t, O6 |5 Q" K2 N1 n
  15. }( n, _; ^7 D. m8 d' }
  16. </script>. R1 N, w# {6 L, N0 H7 Z
  17. </body>' A. W3 X! ^) w5 W
  18. </html>
    / ]# d# ~8 S# e
  19. % a" _7 j( q5 Q1 v, X( I
复制代码
7 i& `: q( M# y; Y+ i" o4 L0 B
; m' t. r3 ~" O3 i( r+ I  u

2 H3 a# c$ i  i- R- z9 O% j& F3 _. X

1 J  i9 M. w: W: y0 ?7 d, {1 O1 N
5 w" Z! Q3 x9 c$ ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 15:28 , Processed in 0.100999 second(s), 20 queries .

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