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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码' T2 V# L+ j. Y5 [+ K# l: F
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);
    . c7 `# \! S) {" }6 f
  2. $client=array();
      ]6 R! s, c) j/ ?4 X  [9 {$ b
  3. $serv->on("open",function($serv,$req)use($client){9 q' }2 `/ P8 }# I9 W# J
  4.         //echo 'connect'.$req->fd;9 D( V5 h  f1 _) ^0 k! j
  5.         $client[]=$req;
    ; f: I7 b, Q* j% F& I
  6.         //var_dump($client);
    - P, ]  c) U8 a( {$ J6 ~( H6 @
  7.         $serv->push($req->fd,'aa');0 I7 v$ O5 }9 a
  8. });5 K; E# S5 q% \/ |9 p- G* S* W
  9. 4 _1 ~: Z' O  ]: m
  10. $serv->on("message",function($serv,$frame)use ($client){! _% d6 e, c1 a7 c% q0 f6 U9 E. |
  11.         /*var_dump($frame->data);, |" ?+ J; `: b" ?
  12.         foreach($client as $key =>$val){8 J! t$ R: z7 y8 W% N8 s
  13.                 $serv->push($val->fd,'aa');
    % S& M4 B" i5 s9 l$ Y$ B
  14.         }*/$ g! T( o7 U( }: F. c
  15.         $client=$serv->connection_list();
    ' n7 C0 n) A) \! Z
  16.         var_dump($client);' ]+ Q9 K$ K* h- q2 K
  17.         foreach($client as $key =>$val){% @( i; U3 i# g8 p3 R, W( O0 a
  18.                 if($val!=$frame->fd){
    / }6 C' E+ C  z% @9 ~* f* t9 `& k
  19.                         $serv->push($val,$frame->data);, _1 Q4 m7 y2 S& I: b% @! Z8 Q
  20.                 }
    6 e8 s# R+ _- r
  21.         }
    - ^4 F: {) n- c7 Q
  22.         
    . U' ]- z% ~: B5 V( }% i
  23. });; N* y2 K, P, f
  24. & \. h% ?1 Y# ?1 a% ~- n: o# A
  25. $serv->on("close",function($serv,$fd){) r8 r4 V0 c6 S% C$ n/ q
  26.         echo 'close';
    / H! x) V* t$ V* o2 s8 @, I
  27. });7 {! J3 k/ P: ]4 G0 d
  28. 8 Q) h* l0 M& u( Q1 D% D
  29. $serv->start();
    ; H( F5 K  u( B* U8 s! _5 Z
  30. , X' M- D0 E. K% e- S
复制代码
主播客户端
* q, ?% L! `8 l0 o. E* d9 m! v. u7 h
  1. <!doctype html>; R- s2 h) t7 J9 D9 t
  2. <html>  J* J3 A; K, Q# h7 |" [' j4 @
  3. <head>
    + h  Z2 B  S4 C' T) _
  4. <meta charset="utf-8">9 t" T- C) `( |9 B! k4 p
  5. 0 Y! M) E4 s2 b9 R
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">* T: }0 |1 [5 P9 Z3 ^
  7. <title>404</title>
    / s8 I# T8 B5 q; ~1 O% x0 T( Q
  8. <style># o: r! h  \+ ?8 `
  9.         body{7 `3 ~" j, ?. w! e& v' x
  10.                 background-color:#444;2 ~+ x5 `" X: ]
  11.                 font-size:14px;2 I! E. a7 B* s
  12.         }% i# f" u) Q8 {- a. |
  13.         h3{8 m, Q: I5 q0 _0 D- g, ^$ C+ r
  14.                 font-size:60px;
    8 H9 P5 ^) _4 N. _
  15.                 color:#eee;
    3 R& {; K: X+ f1 k
  16.                 text-align:center;3 V9 h; q" i$ [% [. O4 ]. {
  17.                 padding-top:30px;9 Q# s; W# E5 @1 J& ]: b% K2 t2 ~
  18.                 font-weight:normal;/ z5 h  K, _. Z$ z8 ^9 w/ s
  19.         }
    % Z4 T2 @0 e. \: K1 a* J$ U3 p# W1 ?
  20. </style>
    & m6 w+ m. I( z
  21. </head>
    ! B% E8 f: f; e% M/ {) ]7 Q" q2 Y
  22. 6 k% i4 l! I$ s9 F4 o  v
  23. <body>
      X; a! d! [, \5 Y' d) ^: Z6 ~8 w' D
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>- r7 l9 e2 n9 S( q- ]
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>" {, p& K& V8 ~: G
  26. <canvas width="400" id="canvas2" height="400" ></canvas>
    0 r% S. a. E5 O6 r8 z( `: U6 w
  27. <script>, W8 g" \3 E+ E
  28. var video=document.getElementById('video');  B9 j# n4 F) n1 V# ~, H$ s
  29. var canvas=document.getElementById('canvas');
    2 F2 S' T7 K' m/ w
  30. var canvas2=document.getElementById('canvas2');
    # S/ m) x' k: r& o! w
  31. var context=canvas.getContext('2d');) C" G9 [6 Z2 F2 y6 ^) R' O" W
  32. var context2=canvas2.getContext('2d');, E: H  w8 |4 H+ Q4 R! {* o
  33. function draw(){
    6 q8 t: {; s3 s
  34.         context.drawImage(video,0,0,400,400);& t2 f: c  J* \1 R
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));7 k1 m; q. H; m3 U4 ?0 m( {
  36.         setTimeout(draw,800);  k" t8 x) o, X: ~: a  k0 m
  37. }& n; Z# T$ |  u" b
  38. % b4 t7 f8 j1 w( M4 `0 n9 `
  39. //客户端跟服务端通讯
    8 X" e6 T( p! o+ Y) P0 U1 Y
  40. if (window.MozWebSocket)  I7 G1 Y& e- M& e. \7 _* q0 f
  41. {# Z1 B/ [3 `; f
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");
    . y& c% n: L7 V
  43. } else
    8 l0 y" P0 }) z1 ~; ~
  44. {2 V/ L- c! l& x. e9 g
  45.         ws = new WebSocket("ws://182.61.42.187:9501");2 X& T4 E; w/ b. |% ~' A' I: ^
  46. }
    : i2 L- B' h' d# ]
  47. ! ~: C- {/ ~% B# W
  48. ws.onopen=function(event){
    : g* X7 k' Y0 S& E! T* M) d/ w
  49.         alert('连接成功');( l; X# g) N# u; U( t9 N8 w( g+ F/ {
  50.         ws.binaryType = 'arraybuffer';
    3 H0 s* T5 O! O8 i
  51.         draw();; m# K7 t/ W0 ?3 d+ V1 Z. h
  52. }- I- A$ \+ G4 ^7 x
  53. ws.onmessage=function(event){  h# e: ~; z. Z: `5 F
  54.         //alert(event.data);
    - c" V; O: g' t' _) q4 x
  55.         //ws.send(event.data+"client");
    9 ?5 C5 U7 T; F- _0 d- a5 P  f
  56.         qrCodeImg = new Image();" r+ p& N1 M: u$ Q) ?3 g
  57.         qrCodeImg.src = event.data;! `4 [" [+ ~: |: Q/ Q3 W. N. {- {9 V
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);, l& F- ~+ I7 I% S0 U, Z
  59.         / _1 }9 {3 E: `, _! r
  60. }; J( i/ \- P9 H% j
  61. ws.onclose=function(event){
    , t0 i, A4 h% D4 y6 N  O
  62.         alert('close');" J/ y- y' Y) A6 C; b( W
  63. }) G- L: B' ~& F2 h8 m* O% z1 r
  64. ws.onerror=function(event){: x: D! Q9 y8 A- Q
  65.         alert('error');/ _5 b+ h0 z4 ]" f4 I+ a
  66. }" m2 y* x+ ^8 [& v4 f% Z% J- [7 g
  67. //video,标签模拟视频7 j% h+ y# p0 |* I7 M+ t
  68. 7 C$ R6 X+ M/ }
  69. </script>
    + i7 K3 S6 [. k5 g) T8 V, t) R3 E
  70. </body>
    # E7 T+ M9 r5 ]; B$ S; W
  71. </html>6 x( u0 h# C9 T1 y
  72. ' D/ R* F2 w: W" c4 a5 I% W- y, o- j
复制代码
客户端:+ z& B4 Z3 J4 o) h& V: |# D
  1. <html>5 x" [/ m) l( ?
  2. <head>' e2 C0 g. U( J
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">
    0 Q/ }9 ~+ l( n9 Z
  4. <title>客户端直播页面</title>( L) l$ j, e5 x, D2 V
  5. </head>5 {- `2 Q  ~/ J3 T
  6. <body>+ p6 {7 P! o. k4 d5 E9 x, C+ P
  7. <img id="receiver" style="width:720px;height:480px">! h( s( Y4 N# m$ c8 u; I

  8. 1 K1 U& ?$ h* n- |: I0 Q( L; m5 O, f  p
  9. <script type="text/javascript" charset="utf-8">- H7 ]' d' x7 u2 T7 k" ]7 B% S; {4 q
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");6 t6 `& Y- g. b4 \7 @3 N( {
  11. var image = document.getElementById('receiver');
    $ v/ Z! p/ j/ \" Q% ~# b
  12. receiver_socket.onmessage = function(data) {+ ^% U6 ^+ G! r0 Z
  13.         console.log(data.data);
    $ i+ u3 H0 [+ C# k7 G
  14.         image.src = data.data;$ ^+ g' M2 S) |' M7 C
  15. }6 N$ g; z4 y+ h2 p& c
  16. </script>
    ! V8 ]! _9 ?4 q; }! c# w
  17. </body>
    / J9 O% O0 ~2 F+ Q+ U
  18. </html>- o! R9 T, L/ @3 o0 Z1 A! @

  19. 7 D7 ], Q. P/ v  V
复制代码
9 Y2 n: u) Q( v- Q3 c4 P& N
* r+ l5 u( r* T4 a2 j

  h% r( c0 U- X9 @3 w0 K, G/ C! @8 F/ @2 l) _( i2 S- p
0 I; r! s% }! L, j6 ]( H  e- `7 ]

8 [0 ?+ D( p+ i' t
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-20 11:22 , Processed in 0.123240 second(s), 21 queries .

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