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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码
9 G$ z4 m& O- v! I
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);
    8 U3 F! @9 d6 u9 B7 `, l5 i7 Q
  2. $client=array();
    # x" m' g  @$ B- R6 I
  3. $serv->on("open",function($serv,$req)use($client){
    0 y( z" @& A% w0 ]. d
  4.         //echo 'connect'.$req->fd;$ x$ F" t$ s' Y% @) d7 }9 L
  5.         $client[]=$req;
    ; H0 A: |* Q4 `
  6.         //var_dump($client);" v* z5 ~3 w4 E7 j; t  C' }, {
  7.         $serv->push($req->fd,'aa');9 p8 L! x! l: g* O9 r* }$ C
  8. });+ }3 u- q/ u) n; a) m

  9. ; s4 A, v& v0 ~. f
  10. $serv->on("message",function($serv,$frame)use ($client){9 b- ]- c5 \- [
  11.         /*var_dump($frame->data);
    7 T  R! d- C5 Q: `; M8 j6 W
  12.         foreach($client as $key =>$val){: \# Y" ]" T( i; P% l3 ~
  13.                 $serv->push($val->fd,'aa');' s) z; y& ^2 i0 r5 S1 R
  14.         }*/% F, [$ |( K; P7 Z
  15.         $client=$serv->connection_list();" I( O( o# m9 V. y5 Y7 J9 Y0 ]
  16.         var_dump($client);
    5 C! n7 |  F% @6 }
  17.         foreach($client as $key =>$val){' Z3 K2 q5 ~, _
  18.                 if($val!=$frame->fd){' Z' T# I+ Y$ t, U1 r6 Y
  19.                         $serv->push($val,$frame->data);
    6 S" d+ ]% f7 Z6 v( v1 z
  20.                 }
    ( e7 ^6 q. j) q5 z& t; x$ k
  21.         }
    . U- g& C" T, q9 D/ U& U4 }" I7 \
  22.         * M& p* a  J1 H: o0 O
  23. });
    % z# I+ J3 Q7 K! B0 |
  24. # [: W8 W2 W! s% U, B8 |4 |  T: V
  25. $serv->on("close",function($serv,$fd){) ~& @. Q* \# U2 J
  26.         echo 'close';; Y- h" U4 x3 F
  27. });
    8 v3 X9 H: C+ _$ X
  28. . ^2 C! F3 t& J. C+ N& {8 ?
  29. $serv->start();3 R7 H/ E7 R- G  m& j2 a% V7 ]

  30. 1 [8 z! A3 F5 r8 E# B, [- P
复制代码
主播客户端9 k7 ^, f- T9 \+ v
  1. <!doctype html>, K0 G' J. Y- y/ O& S% |6 c) u
  2. <html>1 e) i! P. p2 w
  3. <head>9 t- F' ~0 y# }
  4. <meta charset="utf-8">' ]4 j* v: F2 e0 I3 I8 r, d
  5. " h4 C! U/ B4 u; q
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">( v% S' ^9 h" x- Q: R' }
  7. <title>404</title>
    # R+ u. y  R+ J1 ~8 t
  8. <style>5 V  T4 f7 K+ L$ D+ _
  9.         body{
    * N0 m7 `' I& p8 t
  10.                 background-color:#444;
    , q/ m. ]7 n  `4 w* q1 A
  11.                 font-size:14px;6 m) Z" b; q, x) H( k
  12.         }
    6 r8 H! j5 D" W" J0 ]
  13.         h3{; r, g2 Z8 A' M. Z. W) Z5 A
  14.                 font-size:60px;+ F7 o7 L5 o9 r4 |- Y$ b: w7 a; y' v
  15.                 color:#eee;( R, `( v$ ?8 R2 n" Z4 P
  16.                 text-align:center;: }/ f0 D. P* s+ O! h) H* t* O
  17.                 padding-top:30px;
    ! b( Z" G, A% q1 e! h1 N
  18.                 font-weight:normal;. {: ]9 P" n# I4 z
  19.         }+ A) i! E  F: d9 r1 |
  20. </style>
    1 ~# T# s  [! {& @
  21. </head>
    * E+ g  R2 y1 V0 ?1 c# ~# X
  22. 6 c8 b9 }' w( s. s3 X
  23. <body>; W6 J) M+ m/ k3 q$ _! R  E% I
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>
    ( ]8 Y  E, C7 f2 h1 ^$ |
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>; K' C  g/ G$ J6 I5 _3 w
  26. <canvas width="400" id="canvas2" height="400" ></canvas>
    % O+ p4 m' I( U5 h3 @
  27. <script>3 i* b( L$ K8 s$ J" Z* Y
  28. var video=document.getElementById('video');
    ) E+ R/ g, I' Q2 K" t7 m( ~* Y
  29. var canvas=document.getElementById('canvas');5 X1 z8 O4 A6 F! n" g7 |
  30. var canvas2=document.getElementById('canvas2');5 |8 i, J$ `% b
  31. var context=canvas.getContext('2d');
      K: O6 ~: [* Y
  32. var context2=canvas2.getContext('2d');2 y# E9 w1 @. N+ e$ q- h
  33. function draw(){" f& A! K9 u) j0 f3 `, C0 Z
  34.         context.drawImage(video,0,0,400,400);' u5 f3 f! l. `6 @( O+ j, P
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
    $ J: Y2 p- c5 ^: Z. _% |* s( {
  36.         setTimeout(draw,800);
    # z6 Z* e3 @( @. Q: A' A  `" d
  37. }! [' ^, A1 L: P* ~. v
  38. % Q- C7 ~" K8 s  n
  39. //客户端跟服务端通讯
    # ^. J' x& Y& O2 z: }( q5 b  h
  40. if (window.MozWebSocket)
    ! |/ l" O6 S: E4 `
  41. {
    , P+ D, @% L% s) O2 Z! i1 Q
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");
    + ]" r: o. l2 h  D; }3 N
  43. } else4 V; F/ O/ T- c9 e! }6 C
  44. {
    ' I. T! q( N9 {- F9 s  l
  45.         ws = new WebSocket("ws://182.61.42.187:9501");
    9 ^7 U+ x0 Z5 z1 P$ S/ H
  46. }
    7 ^6 b4 j: X; `' B3 |5 h- l7 E4 U
  47. 5 p0 @# O* ]/ \! u8 i) U
  48. ws.onopen=function(event){
    & V8 ~# W7 ~2 Z5 I% ?2 u
  49.         alert('连接成功');$ d  X5 R3 u5 \1 w7 L6 g' ~
  50.         ws.binaryType = 'arraybuffer';5 X) c( ^- S6 `* f8 ]) ]" F
  51.         draw();
    + o4 V8 {* X+ a
  52. }7 T) |3 Z4 a. P5 }
  53. ws.onmessage=function(event){% b& q; G' m, q' b; l8 R  L
  54.         //alert(event.data);. s0 E) b8 L$ e5 N
  55.         //ws.send(event.data+"client");3 ~- {2 a8 T+ Q4 v- F
  56.         qrCodeImg = new Image();1 _! }6 k& Z/ _+ h  w
  57.         qrCodeImg.src = event.data;* B; j& y) N' m
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);
    : Z  ]) H9 [5 ]7 W5 T7 b5 y
  59.         
    & [; }" C/ }: n( W
  60. }$ Y2 F1 p& B5 w! Z- G, R. s2 _
  61. ws.onclose=function(event){
    2 S5 T% a' a! @
  62.         alert('close');4 j) Y0 H  [. R+ t4 {( }8 v
  63. }! l5 D& L- S2 J6 E' g; g
  64. ws.onerror=function(event){
    7 `* R! x2 U% @2 ^8 H  @
  65.         alert('error');3 S3 v9 D5 ?! k- V9 D% Z+ D
  66. }4 @5 {9 I9 W% Z" \; l) N6 L" }* _
  67. //video,标签模拟视频; Y5 b/ v& u) w& i' e

  68. 7 \: K0 \0 v6 ]% F
  69. </script>
    # Q7 s( f$ {" V$ b' y
  70. </body>5 y. t1 V' M  @7 i% Z
  71. </html>4 q3 G' i$ E' N& Z) _+ E
  72. 0 V: D4 ?  k! a8 b2 n
复制代码
客户端:. V) p# E  w( W9 T6 ~/ h  i
  1. <html>( f$ p% S8 L  p* g5 S
  2. <head>: s8 G3 b+ y2 j; ^5 a
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">) H+ t& O" _2 R/ \& s
  4. <title>客户端直播页面</title>; E+ Y/ l" Z3 C4 y- y+ f9 o
  5. </head>. G! W) W& n+ W8 D
  6. <body>
    6 p7 f5 n  G1 f- L- X
  7. <img id="receiver" style="width:720px;height:480px">8 M8 u; t9 k/ M, ^

  8. 5 t- e: U$ J6 }% i; z3 Y
  9. <script type="text/javascript" charset="utf-8">9 D. k% W  `5 A1 [# w
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");
    ' k( K; v& H! }
  11. var image = document.getElementById('receiver');
    . L: V/ O2 _5 u. J2 N! d4 F6 P
  12. receiver_socket.onmessage = function(data) {: {- B; t+ q; m9 {; T& G7 t
  13.         console.log(data.data);/ J2 S& Q8 f7 ^- O  u' Q! Z
  14.         image.src = data.data;0 Z( x) c* u" w! d
  15. }. r7 J$ Y% w5 j8 E! O4 J' m
  16. </script>" u# t, o: Q- Q4 ?  Z+ v' ^
  17. </body>! D- R* U# V1 k3 C/ m* g( a
  18. </html>$ u* f& W! x0 G
  19. # p& ]  K2 j7 j9 l. [
复制代码
- Z) l0 Q  I6 ~% d% C/ e/ Z$ t; \8 [

  y/ Q, f5 Q% U1 k  S4 l! S4 z, N+ r/ _5 w

4 @6 u8 I3 i& n7 M/ E, V& s* \9 n
/ o' L, W; U  F7 g
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-3 08:21 , Processed in 0.108235 second(s), 19 queries .

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