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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码& j: x) b' B  l3 z( t% u: [# h
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);. z' n! G: T% @- m2 f3 \
  2. $client=array();
    , h5 g( t; I5 ?8 }) ]7 l# i2 L- ]
  3. $serv->on("open",function($serv,$req)use($client){
    8 j5 A( U$ }; f  e! n
  4.         //echo 'connect'.$req->fd;
    9 N4 m" e$ c  `# j, q. e
  5.         $client[]=$req;5 Y8 e3 z/ I3 n+ _9 R) E
  6.         //var_dump($client);* H7 V8 I3 ^; U  W8 \! W  n% ?; Q2 u
  7.         $serv->push($req->fd,'aa');4 a3 o& A' t1 }+ a, ^% G2 Y1 P
  8. });" T6 R' u: i# P9 x) |& y. C5 ~
  9. ( P8 e& J4 \: T9 i8 {/ B8 o5 ~
  10. $serv->on("message",function($serv,$frame)use ($client){9 ^2 T/ Q6 D$ h7 ]0 ?; n4 V
  11.         /*var_dump($frame->data);
    / t% g% u1 g0 p- w0 b8 ^8 I
  12.         foreach($client as $key =>$val){0 U3 l# s4 F/ L5 M) F
  13.                 $serv->push($val->fd,'aa');
    " F2 y& k  t9 C8 [/ o$ @
  14.         }*/3 f5 r5 E2 r& f
  15.         $client=$serv->connection_list();9 i" Y# d+ J3 I; v3 i
  16.         var_dump($client);: v+ h1 w$ \6 k' M# j. h
  17.         foreach($client as $key =>$val){* H" Q: p' ]1 Q
  18.                 if($val!=$frame->fd){/ H( |# ]$ d) ]$ C
  19.                         $serv->push($val,$frame->data);# d* A2 p3 y, p) D+ n7 S% ~
  20.                 }
    , J$ B6 S, t: E9 M" v% G
  21.         }- q( m6 O- L+ J; b; h* E
  22.         
    ' k/ J! m1 e3 z2 c' W" z! M& S
  23. });, v# s7 ]8 q  S1 @
  24. ' b! V6 x9 L3 S' w: S
  25. $serv->on("close",function($serv,$fd){
    7 a$ T* a0 q6 A' x
  26.         echo 'close';* D. o" X' n( v! {
  27. });
    1 H, z$ x# Y4 V9 Z
  28. 8 r1 Q7 t# v% `# U& L
  29. $serv->start();" U* Y+ V) K. B7 U5 E$ e

  30. / W5 g% t" v  V/ j
复制代码
主播客户端' L" r" f8 ^; c; ]4 N
  1. <!doctype html>+ z, @' g& L# U/ A
  2. <html>' G. b4 g$ N' s( }. \5 N+ z
  3. <head>
    2 f; }3 d2 w9 E6 ~/ T
  4. <meta charset="utf-8">
    ! g, n, W) _( T4 M* J6 P7 z

  5.   x5 `) h; u1 N
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    # @9 q$ N. ^3 G# N* R5 K9 Y
  7. <title>404</title>" j7 Y% f' Q4 g- O
  8. <style>& y* m, E4 C9 Q6 E5 k9 M5 x+ D
  9.         body{& ~9 Y6 K  v' V, e# z
  10.                 background-color:#444;4 T; e5 e4 q6 c
  11.                 font-size:14px;3 j% _  [7 a5 P' i. R
  12.         }
    " I: U4 n$ _8 X8 [) u' G, N6 Y1 U
  13.         h3{& U) ]. o+ q8 P
  14.                 font-size:60px;
    7 z% d: K' B! @3 T# _5 G0 H
  15.                 color:#eee;* n! L' b# n" H
  16.                 text-align:center;
    7 h5 I* ]! x9 g1 z4 z
  17.                 padding-top:30px;
    ; D4 e# S7 a6 F( U$ R! W  p
  18.                 font-weight:normal;
    / N0 D  p0 |8 e$ m$ c- |
  19.         }, [- R3 A1 _1 n
  20. </style>0 w) g; |/ @2 z& P2 C
  21. </head>
    * }8 a' v3 K! O
  22. 7 E# }1 Q% {! U
  23. <body>
    ; f0 d  r: y9 b/ _) C8 C; Z
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>; j  l6 a- H$ b0 t
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>
    . J! T. @; r8 [% u% z& g
  26. <canvas width="400" id="canvas2" height="400" ></canvas>* n4 y7 r/ ?) n% E2 U. b1 D9 [
  27. <script>2 x& G. m" R7 j+ {$ q
  28. var video=document.getElementById('video');
    * o! g# P) S) c+ f2 c
  29. var canvas=document.getElementById('canvas');& F+ }& q- }0 }! z6 l/ A
  30. var canvas2=document.getElementById('canvas2');2 ^0 _  i5 d/ S; N
  31. var context=canvas.getContext('2d');' M  X) `2 E7 C9 Z
  32. var context2=canvas2.getContext('2d');
    & X7 I+ v% T/ d, p* U4 G; M
  33. function draw(){( r1 ~9 b) O/ Z# O% Q- |" y" A) K5 }
  34.         context.drawImage(video,0,0,400,400);
    & ~6 d9 x8 M3 Q2 l" U
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
    ( [0 z" v- ~( |) ^8 W: Z
  36.         setTimeout(draw,800);' \7 a3 ?% s1 _: z
  37. }6 I( r2 O/ X1 W  X3 w' e/ \- j
  38. 9 w- w7 N. ]+ F: F# J6 ^: ^& j" D
  39. //客户端跟服务端通讯, b* G  B7 g! O; R
  40. if (window.MozWebSocket)
    ! F/ M1 z0 @( Y. T, e+ c
  41. {& Z1 }5 G/ l  J
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");
    # E8 ?: F4 R5 g1 n% X0 E8 m4 r
  43. } else/ c7 T7 K; l& j- K
  44. {
    # W/ o4 Q# U# T8 u: }
  45.         ws = new WebSocket("ws://182.61.42.187:9501");
    4 d$ y' @% v7 l5 f: y
  46. }5 k( s1 W; i6 i) B2 l
  47. , W" E! |0 \; `7 T+ C
  48. ws.onopen=function(event){! N+ J3 q: d) i0 t3 h6 j" n7 k
  49.         alert('连接成功');7 {; j6 G9 \5 x; H. ?% ?6 T# k
  50.         ws.binaryType = 'arraybuffer';; i% P8 `% A- S8 h7 S
  51.         draw();
    ) Y! F; F. _6 N7 f0 T( j
  52. }6 `8 u; x/ i5 T  T
  53. ws.onmessage=function(event){1 y% A; b) M) r/ A& i, P5 d- l
  54.         //alert(event.data);& a9 D7 e; `: _4 g& y- s5 p
  55.         //ws.send(event.data+"client");" s! B: |9 K( C2 X' P0 p1 d7 ^
  56.         qrCodeImg = new Image();
    6 ?5 P' _# q% t% a( z* E( }
  57.         qrCodeImg.src = event.data;, l/ C" Y$ u$ r  }
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);9 F: @# z; b% C
  59.         
    ! `1 }6 X) d8 w
  60. }1 h8 Y& j5 E0 ~4 J" H+ X' m" [6 L
  61. ws.onclose=function(event){
    7 }9 S2 y& p* f7 D- U
  62.         alert('close');
    8 P# L$ T2 @) K4 v+ {9 @" L: O; l1 M
  63. }
    . j$ M: c0 Y+ x
  64. ws.onerror=function(event){7 X1 H7 t6 X: N* U7 O0 ^
  65.         alert('error');
    # g1 k4 ^* ^9 k5 z$ k
  66. }
    ! Y" @$ @0 K8 F
  67. //video,标签模拟视频
    8 z9 W1 ]8 g6 ^3 Q4 w

  68. 1 e, [; j) J. t/ M$ }) p
  69. </script>
    2 O, }0 r% B2 |8 l
  70. </body>/ B( t1 r8 j7 h& x  N2 x& j
  71. </html>  l; c5 o" `. X& r
  72. 3 R! W! g# N: m9 G
复制代码
客户端:8 m% h/ L: x/ B! k# B
  1. <html>% S/ \; s9 S8 W) u$ V! u$ {
  2. <head>
    - e+ S/ e6 Z% I7 ~
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">
    3 A1 J4 N0 a4 L1 A9 S
  4. <title>客户端直播页面</title>
    & i0 n# R+ G6 a# @1 v' f5 v6 J* w1 X( w
  5. </head>5 K: v# J2 o) B$ G0 n* e
  6. <body>- b, `1 S6 P( s! X8 P; b7 L# {6 g7 K
  7. <img id="receiver" style="width:720px;height:480px">
    ( C/ Y" v$ w5 y: M9 t! T& N

  8. 1 H, N: M/ s! o0 Y5 A4 s5 @3 w, [
  9. <script type="text/javascript" charset="utf-8">
    9 |4 Z; P) b( }" T7 J; D/ x
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");
    8 D$ o7 C' e2 M/ P. C' d
  11. var image = document.getElementById('receiver');
    / s) W, s( T  F& d, Y% a
  12. receiver_socket.onmessage = function(data) {
    " l6 m, a( w# j; I2 J
  13.         console.log(data.data);3 q8 z6 s  q' P1 ^: U, }2 G5 C
  14.         image.src = data.data;7 U# U4 s: k9 k& F6 N- R, |: R7 T
  15. }
    ' D. L3 U7 N; C6 ^! X
  16. </script>" e2 s/ `. m4 @. T
  17. </body>" Z  ?9 N1 |  ]1 z
  18. </html>
    : l% r* A; E! a! v7 I
  19. $ v" K$ N$ ]& ^  x& W
复制代码

7 @9 x* f/ r; h. o& ^0 j7 T: P: t6 m$ N" }, o6 y& m

, ~8 w6 U; |+ r# Q, F2 J& E& `4 A& Y' [2 y. j- I
8 u. H: L8 _. }

- R. L* k  ~9 A) o
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-6-19 22:25 , Processed in 0.058992 second(s), 19 queries .

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