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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码
! m, m, _5 p  S9 w9 r* `$ e" M. B
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);. x0 z, }! n! ~+ P* C) V
  2. $client=array();5 m$ J( I, l6 J( U7 V
  3. $serv->on("open",function($serv,$req)use($client){8 t9 N6 h1 m0 ~" w4 g
  4.         //echo 'connect'.$req->fd;
    ) M/ |( y; ]0 b0 K2 j
  5.         $client[]=$req;
    1 D8 w; e; \- v6 i
  6.         //var_dump($client);" W( S+ |, P5 [  S
  7.         $serv->push($req->fd,'aa');
    9 {+ C/ U# W. \7 a( @$ Z
  8. });* T+ \: J! G6 d8 {

  9. " ~3 S6 V" @1 V2 y
  10. $serv->on("message",function($serv,$frame)use ($client){
      e3 U% K) V: G3 _, t
  11.         /*var_dump($frame->data);6 q5 @+ p' h/ r1 L, h
  12.         foreach($client as $key =>$val){2 ^2 H) m' M, j/ F) Z1 H
  13.                 $serv->push($val->fd,'aa');  B; _. Q$ q% B; Y; V4 a* v
  14.         }*/
    9 R$ e  h6 y6 D7 M* j0 i
  15.         $client=$serv->connection_list();" @! ]/ }! V; H4 i% X; t" y0 S0 D
  16.         var_dump($client);* G6 c$ D7 t$ U
  17.         foreach($client as $key =>$val){
    , P" J) Y+ o% J1 W3 E# ]
  18.                 if($val!=$frame->fd){
    ) N5 P/ Y' A8 q1 i
  19.                         $serv->push($val,$frame->data);. B* @; k' K. g6 s3 z* E& }
  20.                 }) [+ ?8 ^" m# g, `& F' B
  21.         }( y) t, R6 i$ ^- g4 x% |) `- L
  22.         $ D& Q; m' h+ l5 g& Q/ a
  23. });
    # N  {6 @9 Q+ e

  24. 2 w4 z, N" o% J
  25. $serv->on("close",function($serv,$fd){5 ?6 C/ e) A" b( R. _% \
  26.         echo 'close';. E* x4 I. d' X* E/ ]& g  @0 ~
  27. });
    8 y; P4 n& O/ ^7 d5 f/ q  j

  28. 2 G3 d; X( @* I2 a- P0 ]/ S+ z
  29. $serv->start();
    * z: i, d$ }( q4 ]

  30. ' I2 G8 K, `7 O+ D, b
复制代码
主播客户端; Z* j( E" b, f% {- ?
  1. <!doctype html># ^! K) V. j% l1 [3 O
  2. <html>1 u" s% i' `7 j7 t, y
  3. <head>
    . b! P$ v' g1 Z. j; m; t
  4. <meta charset="utf-8">3 X9 d- ^6 I7 C1 a  X% c
  5. % |3 l$ ?6 O; ?. b& G  ~
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">2 c2 G2 |6 Q# `( _; n8 t3 T
  7. <title>404</title>. \/ H& H+ n# s, i) H6 e
  8. <style>
    0 p4 Q$ f- J2 r! S
  9.         body{
      ]. h. G% w% J7 @( v+ I. D
  10.                 background-color:#444;0 C2 M  c/ m' m% Q
  11.                 font-size:14px;
    : C( p, y% A' m- k9 r1 J' X+ G
  12.         }# Q$ V! R/ ~  F4 u3 n7 h% W, p
  13.         h3{8 n! c; n: }# c9 g& E
  14.                 font-size:60px;- J# a1 K1 d8 i
  15.                 color:#eee;, A3 R5 e: Q6 |
  16.                 text-align:center;
    1 H# k) F! t8 K- u+ _& c' k
  17.                 padding-top:30px;- m* x9 L: [" r' M& Y" x2 S
  18.                 font-weight:normal;
    " E: j4 T& j2 B9 k# f
  19.         }
    8 X$ J# q( x# n/ T: U0 B* S
  20. </style>
    ( H- ?) F! a' d% }% x
  21. </head>
    - x5 B' `" m5 x) X- T
  22. 4 O6 P. d: H: {( _) r9 O8 l- s
  23. <body>
    ! A4 u- \3 p! L- ]1 u' L/ q0 C" R
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>
    & p3 o/ f- v9 `1 g2 F. r0 _  P
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>
    ' D, ^4 a2 w! r4 t! {5 d( V
  26. <canvas width="400" id="canvas2" height="400" ></canvas>" |9 E3 ?! G& L7 H/ U6 ?) `
  27. <script>
    1 i; ^0 ~# v9 T( U1 \
  28. var video=document.getElementById('video');7 q, q- i  t/ w! h
  29. var canvas=document.getElementById('canvas');
    6 p+ ]7 e5 X  D7 }4 _% Y
  30. var canvas2=document.getElementById('canvas2');
    . a: I  q7 i; Q+ q8 b' Q
  31. var context=canvas.getContext('2d');
    / k2 W( H, l3 X6 s- M4 x/ u$ B' G1 T
  32. var context2=canvas2.getContext('2d');2 V/ M( R7 k6 W! J# a/ U# V; I; I. v
  33. function draw(){% {: ~, t7 M) Q$ t9 f0 |+ E. {; o
  34.         context.drawImage(video,0,0,400,400);
    ) B8 f( c. r: B- T" q: x1 L
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));" ^) q- u, M, J* a5 {
  36.         setTimeout(draw,800);
    $ p% q* o% B( c8 b" q7 J
  37. }' A, h& E, }3 B% Y) b; H  Z
  38. 4 f0 _+ i& E: X( n  I$ L3 q0 P
  39. //客户端跟服务端通讯" S  e+ ~3 o% T" ^4 M+ S" B
  40. if (window.MozWebSocket)7 x$ f; Q8 s; Z6 A
  41. {
    ; F. [& j$ |4 Y+ }  r, i+ p( K
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");# Y* ~  B4 i5 {3 z/ y
  43. } else
    . ?0 ^; w9 ?% w+ j* F
  44. {
    ' r9 y! o+ ]8 M3 G0 |. W
  45.         ws = new WebSocket("ws://182.61.42.187:9501");
    3 Z( ]6 E$ H# k1 ^
  46. }
    ( ^, H8 P( T; g9 V
  47. , i! G. l6 _6 D3 B
  48. ws.onopen=function(event){
    3 i+ q; q$ c$ o( q: J+ e- F
  49.         alert('连接成功');
    & h# L. ^8 l- y' x
  50.         ws.binaryType = 'arraybuffer';
    2 o% I) Q4 l9 _$ B. j
  51.         draw();
    & ]- u; \0 @& f! l! B3 I, U
  52. }" r+ ?6 ]& S& p. b
  53. ws.onmessage=function(event){
    & X: f  U  V9 d# V6 d4 R
  54.         //alert(event.data);5 A# i" w% H3 t! D
  55.         //ws.send(event.data+"client");
    5 L* D: f2 x" K& G
  56.         qrCodeImg = new Image();* N) \& x) ^0 H& p2 E
  57.         qrCodeImg.src = event.data;
    & S% v" C. C) O  x
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);
    ! E, z1 s$ ~1 V& R9 i7 ~; V* y
  59.         9 }" ]$ S4 o% z7 _/ P9 \
  60. }
    . \% }9 l* S  h# s0 V) d5 u: e; A4 D
  61. ws.onclose=function(event){
    ) }. w7 X, E$ E
  62.         alert('close');
    " {1 W- f9 W) q- |3 X' G
  63. }2 x% i: K3 Q! n& x' A3 F1 y" t+ m
  64. ws.onerror=function(event){
    4 t- ^6 u9 K. h( s+ L
  65.         alert('error');6 a- l( s' z2 P% O
  66. }
    ; o$ r) p8 O1 m( o: O1 f
  67. //video,标签模拟视频
    ; U' G: B* V2 x, l% o4 m* g
  68. & Z/ e! K" \  z! H2 _( K
  69. </script>+ h2 f0 X6 |$ y) P
  70. </body>! C+ M/ N5 @+ F9 b. f
  71. </html>
    9 i% W- |3 A, q+ J) U
  72. # w  K1 J7 S9 j8 F7 n  d0 h
复制代码
客户端:
/ W+ O$ s3 l( d/ h
  1. <html>. A/ N7 s8 _/ e9 l" n" j
  2. <head>% o9 z2 R% ]% z2 H1 d
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">+ N) I! @: A9 G2 m; R' n' k
  4. <title>客户端直播页面</title>+ A6 K: V2 p  U5 u
  5. </head>
    % z1 }7 w: Y( s) Z, l
  6. <body>' ^0 z' L9 ~  X, H: S; h7 m- ^+ D
  7. <img id="receiver" style="width:720px;height:480px">* K! H* J, l5 P: y- Q0 r: G. Z( Q3 ^

  8. 3 ?0 A7 j0 f7 I* p9 J& ~
  9. <script type="text/javascript" charset="utf-8">) \2 J5 j( C$ S6 o1 V; E, b
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");
    " ]! ?$ b; h: g6 g) k
  11. var image = document.getElementById('receiver');! r4 v$ N/ O& c5 G8 X* X3 @
  12. receiver_socket.onmessage = function(data) {
    1 w5 ^7 S; [! r9 A( g* a: i& y
  13.         console.log(data.data);
    ! l( k  b& _: ]! E
  14.         image.src = data.data;
    5 G6 R1 j4 ~$ \& [/ I. u
  15. }7 e% c% _7 N# C4 B$ |4 V6 n
  16. </script>
      J; ~5 s; G( K. z* w$ M) e
  17. </body>/ B' \( H2 Z. p0 \, f9 b; c/ @& l5 [
  18. </html>7 l0 r0 k) S7 ?# u2 v+ }8 j
  19. " M0 P4 k" t& F" G# g
复制代码

* P7 H1 f" ]; A; B8 P( k- V3 s8 p7 T* r5 B3 v4 k

8 r3 [. v! y2 w, u; R9 n% o1 S7 L  c
0 _- s/ A5 j, b7 x6 n; @$ b: M6 c1 S! C% r

/ \/ n4 Y' T9 v* ^8 R% s( U
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-9 10:11 , Processed in 0.119696 second(s), 21 queries .

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