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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码. O6 _, ]( W; a! f$ e
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);
    : y9 s# W# B' {
  2. $client=array();9 |% S8 g# z9 d7 l  b. @
  3. $serv->on("open",function($serv,$req)use($client){
    ( {; b* ^4 H' ^+ @. T$ w1 `
  4.         //echo 'connect'.$req->fd;: _9 w& {3 q; |% F3 t2 r
  5.         $client[]=$req;
    . s! V1 G' A! @2 C3 c* ]
  6.         //var_dump($client);" [8 m; }( `3 n8 |
  7.         $serv->push($req->fd,'aa');
    7 L, X! S2 Q& l$ {6 w: q
  8. });% o% d$ m% T& ~/ Q- |' h
  9. % X: l) G7 @' O2 Q, N) T, e
  10. $serv->on("message",function($serv,$frame)use ($client){
    8 J) o7 N/ I* _9 Q
  11.         /*var_dump($frame->data);
    8 C: A% W9 z- E4 K7 k. d" a
  12.         foreach($client as $key =>$val){/ A9 G4 Z5 ~! h
  13.                 $serv->push($val->fd,'aa');! K; \; B- u) \9 n  C
  14.         }*/4 b' _% Y) t5 R$ q. T/ p+ m
  15.         $client=$serv->connection_list();( C: O3 j8 c0 I* n1 `% z3 o
  16.         var_dump($client);
    * m& ~! x; r; n$ W6 e$ e% t8 O
  17.         foreach($client as $key =>$val){
    ) k) [% p- Q$ }4 l
  18.                 if($val!=$frame->fd){
    : G( p) |1 \7 z. x& K
  19.                         $serv->push($val,$frame->data);4 V5 z+ N* X) \( m# L  C2 P7 d+ B
  20.                 }4 D- H$ A% g+ Y4 h5 G) P
  21.         }" D) a& r! M. K& |1 _4 i0 j
  22.         
    9 @8 l8 j; i6 ]. c0 D
  23. });6 e  ?8 z' p$ L5 o. p1 p
  24. ) }' K$ N1 t$ d( f) w# Y, n6 Z
  25. $serv->on("close",function($serv,$fd){3 a0 v( P4 z) H4 |& _# N8 X
  26.         echo 'close';
    0 @) k# g- s6 ?' S" M9 U
  27. });
    $ d7 c/ K' e- R+ g
  28. , ^# V$ v& e5 f8 S' P+ w. i* c
  29. $serv->start();9 b$ v. m' X7 D; m! l

  30. $ ?/ M7 U) U" h  I( T% E5 K7 ]
复制代码
主播客户端0 S$ v8 p+ \  T
  1. <!doctype html>
    , ^4 g0 I3 L8 O
  2. <html>9 b7 d" g. c! A  k
  3. <head>+ b" {9 X* I$ g+ _/ u3 L
  4. <meta charset="utf-8">) Y% o8 I5 M/ A
  5. 7 m, K1 I3 G) q# R
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    $ `$ r7 L# {6 d$ O9 Q
  7. <title>404</title>
    " A% @; a3 E2 b- X0 z/ n
  8. <style>
    1 k6 x  L# k7 z  _9 l; z
  9.         body{) ^. t2 T+ ~4 y3 V" [
  10.                 background-color:#444;0 r: j; ~4 h# y( k  k
  11.                 font-size:14px;
    2 ]8 e- R/ ~1 T6 J' W* D7 ~# j
  12.         }* D# @9 `. Y) y2 d! K* G
  13.         h3{
    4 Q8 ~9 z5 w( V
  14.                 font-size:60px;
    $ O0 l( \1 T: \% b& p* g7 r
  15.                 color:#eee;. S. n6 y, ?+ g" g$ P# f
  16.                 text-align:center;: I7 h! G$ d6 k7 i" L' a& g
  17.                 padding-top:30px;
    $ y2 `, [) k( @" {, q
  18.                 font-weight:normal;" q0 r) Z/ f4 x  u. U
  19.         }
    ! b9 w# [, |. _( o7 I* `
  20. </style>
    ) K+ i! x% k2 t
  21. </head>
    6 k: H, V9 D5 ~: p
  22. & i1 t& o7 ]* W) \9 v. r8 X
  23. <body>* D0 e9 c( a5 W9 }
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>$ @0 ]* T* K1 _% y$ R# Y
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>1 w  ?: f9 w1 L0 B5 R* U
  26. <canvas width="400" id="canvas2" height="400" ></canvas>& b! [: I  {3 t" ?) S2 n# Z
  27. <script>
    % A& V$ F9 Q" n, ^3 T3 Z
  28. var video=document.getElementById('video');
    3 z0 F; X- h2 ?8 ^- W
  29. var canvas=document.getElementById('canvas');
    2 a4 z  S; M- @6 K. ^5 {4 G
  30. var canvas2=document.getElementById('canvas2');- i: b. q! _# C. E* m
  31. var context=canvas.getContext('2d');
    ' o  h: G: ]4 U1 b$ @! c
  32. var context2=canvas2.getContext('2d');
    + I- c( N: Q2 |# f
  33. function draw(){* U1 x3 y. M- o, {
  34.         context.drawImage(video,0,0,400,400);
    7 y+ f: Q0 H7 K# _
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
    6 z3 t* f  ?( k% Y! }: l
  36.         setTimeout(draw,800);
    5 u* e8 ?# {  I9 {
  37. }3 f" {0 |/ C1 D

  38. # L4 {3 E8 K: w1 ]
  39. //客户端跟服务端通讯
    9 k4 j( I4 q& H2 L( a
  40. if (window.MozWebSocket)
    . \( M4 l  m- n5 b3 j
  41. {, N* M5 f' ^8 S5 P) M- B
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");
    ; T! X( h2 N* Q, h/ d& F1 J# V
  43. } else0 M% L) b0 {9 Y
  44. {
    " Q. x1 U3 @, Q; H
  45.         ws = new WebSocket("ws://182.61.42.187:9501");
    ! l5 `7 r. h  ^
  46. }* w' G6 W& j3 Q# L! Y4 u

  47. % L1 J2 @& w/ I! I- D* b4 b$ R; |: f
  48. ws.onopen=function(event){
    & z9 S# P$ x* ]3 ~6 {4 R3 X
  49.         alert('连接成功');
    $ _  `' K! o' Q9 M" {* \; y$ u
  50.         ws.binaryType = 'arraybuffer';
    8 y8 E1 W8 U% V* M# y
  51.         draw();* `! s% T4 v' H; d5 X
  52. }
    * v5 `5 N! I* _1 h$ w& x9 z' f1 V: f
  53. ws.onmessage=function(event){
    # A0 T& o+ o4 J8 W% v2 X& ]5 Q$ Q
  54.         //alert(event.data);: F" K. c; e( c" {6 X
  55.         //ws.send(event.data+"client");
    ! ^- [7 m4 B" Y/ g, d
  56.         qrCodeImg = new Image();
    / I2 ?, H( ?  @3 N1 n4 a- U
  57.         qrCodeImg.src = event.data;. J" v. E/ L7 `: R- q( v
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);, j% P! _, k9 _  c: x, V# g2 O
  59.         
    2 |( Y- l: `9 K6 q! N5 l7 ^
  60. }8 k. m7 Y* I6 z- F5 U1 d
  61. ws.onclose=function(event){
    ) y$ A* p) R. ~* @2 e
  62.         alert('close');
    * `" y! M- D( N4 E! V- ]
  63. }
    ( f6 S: p0 u6 j& `/ @
  64. ws.onerror=function(event){0 G6 j( G1 q' K/ h# q# [2 d
  65.         alert('error');
    ' S$ }7 i# R/ D' t
  66. }
    6 u7 j. [4 `# O5 V
  67. //video,标签模拟视频
    8 H" V4 k: N" I* n0 ]" L

  68. . S. {1 K9 M& e; l. C* ~7 T  Z
  69. </script>) |7 _7 G8 L/ s
  70. </body>
    8 [2 ]3 ~% K' Z
  71. </html>
    4 ~  M$ P! r/ I7 j  B/ T2 V

  72. , ]% U: s% {. {4 s
复制代码
客户端:' Q1 x9 V( D! X& S
  1. <html>
      i8 V+ Q0 C- N/ ]9 Z
  2. <head>
    - }. U! ^  F9 M! Z0 a
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">
    ' U4 N6 h& A) _
  4. <title>客户端直播页面</title>4 V. h* r$ e7 |3 B# n( W
  5. </head>
    / f. P7 u5 B9 l2 j' B0 [# E
  6. <body>1 i3 w9 a* ~' z! H$ n( @
  7. <img id="receiver" style="width:720px;height:480px">9 d- v1 {2 ^' R8 V* t
  8. 9 u# G# q# o/ o0 _: C
  9. <script type="text/javascript" charset="utf-8">3 h$ ^$ h, A! [3 L- M
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");
    : |. y5 G  ^% G3 _) W4 P
  11. var image = document.getElementById('receiver');
    * q9 U. V( k9 E! n# o) e6 x  c
  12. receiver_socket.onmessage = function(data) {2 }6 K# b9 {: V# w4 U
  13.         console.log(data.data);
    7 d, Y- f2 l- ^/ {$ H/ p9 M) d
  14.         image.src = data.data;5 A: F# b( f: A9 j1 `8 N
  15. }
    1 i" {+ ~' x7 J8 v
  16. </script>5 }: L3 F2 Q! J, k8 {" R
  17. </body>/ R3 M8 t* }, w: z3 `- i
  18. </html>9 P, @3 }" \3 {  L( h2 z
  19. : [: N' _. w& S0 X" Q
复制代码
- v5 X; h9 \! d- V

- N/ h- m8 i5 N8 E) {# d- V; y+ V8 r4 V6 p9 C6 o
+ e0 V1 v  Y1 Y2 k- C# ]$ y
2 c5 S3 l* e. ~& v" C

+ ^* E- y9 z6 ^' ~+ R
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-19 22:59 , Processed in 0.138025 second(s), 19 queries .

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