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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码( `2 }: v, P0 B
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);
    8 g) I- j% \6 o' J& y
  2. $client=array();9 H7 ]# a: G2 F8 x' W1 i
  3. $serv->on("open",function($serv,$req)use($client){% o0 M9 L4 h; Q3 n+ D
  4.         //echo 'connect'.$req->fd;( q( m6 _3 T1 x. C7 n
  5.         $client[]=$req;2 \, A: @9 d* O5 U  F* Q2 e, a
  6.         //var_dump($client);; N5 d0 B/ m. a# P. D0 O
  7.         $serv->push($req->fd,'aa');# j0 @$ W5 U0 D9 i% U. x* L
  8. });; f7 h; M! |% A, U

  9. " A9 M6 z: u) X- O$ ?! Q1 X; {$ q+ w& F0 J
  10. $serv->on("message",function($serv,$frame)use ($client){
    - m. t5 \; Y, c8 A1 l
  11.         /*var_dump($frame->data);: ]/ O2 y+ p7 j5 ~3 ^
  12.         foreach($client as $key =>$val){  U8 S- N+ B% n$ r
  13.                 $serv->push($val->fd,'aa');( e( }0 [. {" T  J  G2 Q& U" v
  14.         }*/
    7 x7 u, `* R+ Q( O  ]) a
  15.         $client=$serv->connection_list();
    + `% V4 L% p- `5 R. b/ o. V: a0 C$ V
  16.         var_dump($client);1 t+ \- K# a/ _3 l2 b' L1 b
  17.         foreach($client as $key =>$val){( I! a* a) z: X& ^; i  s
  18.                 if($val!=$frame->fd){
      d' P  p& X" D% m) a" @" Z
  19.                         $serv->push($val,$frame->data);
    ; `0 ]. c) c2 h& D0 O
  20.                 }
    3 L( y9 o* C  ?/ @! h
  21.         }( \1 d- A1 u  r, E, |" H, D
  22.         2 o% D, Q! g6 [! w
  23. });$ x( ]' H9 `5 A% ]. N- F
  24. : L; Q$ w4 ~0 Y: R" S! X
  25. $serv->on("close",function($serv,$fd){, y. Y* Z. f2 P& b* v
  26.         echo 'close';
    ( {' t; o9 o; i/ K9 S) \
  27. });3 V' K8 G8 P! m, k
  28. % `5 a. R, t7 a  s7 Z
  29. $serv->start();" a: z. \. _& B( h, c
  30. # m5 T: p0 K* O2 l# o8 z7 ~  m( A
复制代码
主播客户端+ t5 l# a+ J8 i0 A3 @" A: N& p: o
  1. <!doctype html>5 N) @: w/ I. H
  2. <html>
    9 j4 U+ z6 S9 x3 l. R
  3. <head>
    & f& ^3 `+ I4 ^  x! S
  4. <meta charset="utf-8">; o* _; z' k- L6 c. ]1 s$ S0 R

  5. ; H- s, F" c- x3 e, }6 C$ m
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    - x/ Z9 i  h: Z# k/ \1 p& r4 h
  7. <title>404</title>
    2 h' L- V9 O, W3 ]! [/ E! b& _: B; g, B
  8. <style>) B# }3 e) `- ^# A( I# Z
  9.         body{
    1 D0 N; |4 Y/ N; K
  10.                 background-color:#444;
    8 x2 {8 X6 {; o. A: n  J2 H
  11.                 font-size:14px;
    4 K% t* r+ h3 n. E
  12.         }) U1 @, X% i6 n. `
  13.         h3{
    ! L% O; Y' F3 [$ X0 [: u
  14.                 font-size:60px;
    ; @4 O$ j! [6 N# Z  d0 J
  15.                 color:#eee;
    % n: L# a% u6 B7 u. J1 P
  16.                 text-align:center;8 z3 Z! b* o  y1 v1 l9 j  l) e
  17.                 padding-top:30px;5 F) B: X7 i2 @
  18.                 font-weight:normal;2 f$ a6 G; U4 _# s, y  A- t# G* s
  19.         }
    " ^* Z& o; D+ T3 a7 `; V4 H3 @
  20. </style>
    9 M3 Q( V: U/ r1 s& X. \4 c" s+ y
  21. </head>8 T! A: X/ U( u

  22. ; u2 y; H% I, w4 W' c) m
  23. <body>" A% L/ r- V* t: x
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>- ~8 t& q* J, Y; L# ?9 L
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>6 L+ u" _* A0 G5 f( c0 `
  26. <canvas width="400" id="canvas2" height="400" ></canvas>
    % F. p8 s; V, V2 H  R' D# e9 K
  27. <script>4 i+ ]: e/ V0 H# L/ K. K1 P
  28. var video=document.getElementById('video');. X( a7 y2 B: n5 Y: Q) h
  29. var canvas=document.getElementById('canvas');
    ( i) N& h& h! L) m# K4 z
  30. var canvas2=document.getElementById('canvas2');
    % o! l( N* u* l/ P+ \: D; d
  31. var context=canvas.getContext('2d');  e3 D) `1 c9 u8 H; s
  32. var context2=canvas2.getContext('2d');  |$ `, ^: V6 V; `2 {0 Q6 q
  33. function draw(){
    2 Z* R& P% M6 a/ z
  34.         context.drawImage(video,0,0,400,400);
    4 E* i9 f  R- e: C/ w
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
    , l$ q$ C. y2 j; Y
  36.         setTimeout(draw,800);
    ! x1 V! l5 y5 e$ g6 K% Q8 i9 \
  37. }
    7 c6 m5 C6 s1 u4 h' p: P) q

  38. 5 ~8 _9 U9 n+ K4 \( o) D2 k
  39. //客户端跟服务端通讯
    7 S% F1 h4 N$ F7 n& B; \
  40. if (window.MozWebSocket)# ]9 Q5 g( {+ ^0 z2 |& e% h( M
  41. {
    5 m4 J  u. o1 j- J( ~2 `
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");. `4 h  y" j2 O! X  k  j0 B
  43. } else
    ; g3 j& ~- e0 i; @6 q  r
  44. {
    & \. d& L8 J! s. D
  45.         ws = new WebSocket("ws://182.61.42.187:9501");0 N+ V% Q6 h  E' p
  46. }+ Z1 a- F' H& [4 L5 T2 Z0 z4 J7 M

  47. ' p& `- u) H7 B& Q6 Q" a$ i1 ?: \
  48. ws.onopen=function(event){
    ( d  Y2 O& k' o4 d
  49.         alert('连接成功');
    ; C! D1 [7 h, ^; h5 O
  50.         ws.binaryType = 'arraybuffer';
    5 n" {- J2 w! J0 T+ _$ U  K) q
  51.         draw();+ C+ T6 |$ O- k' l* L  t$ [8 [* ?
  52. }; n$ v( k/ h% g
  53. ws.onmessage=function(event){+ n/ W, ~! \& V) m6 E
  54.         //alert(event.data);! t5 i2 R9 f) C  Q3 }8 M  c2 ?
  55.         //ws.send(event.data+"client");+ `2 I( @* @4 @7 Q. x' a' U# \
  56.         qrCodeImg = new Image();$ q' F0 K2 o# U3 ]. ]7 _; A
  57.         qrCodeImg.src = event.data;
    7 e. p* W9 r9 x* w5 g+ @
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);
    / Y0 R9 j; h  T& ^! M% i
  59.         
    0 h) }8 K: M) b* C
  60. }
    * y" E$ u! o& P+ ?) E
  61. ws.onclose=function(event){8 b' d. R' C; U; `
  62.         alert('close');4 ?5 d% x& K- @# K9 Q
  63. }
    # t- R' h7 b, l4 R# \
  64. ws.onerror=function(event){$ I; N2 @& m0 G0 P
  65.         alert('error');
    $ ]. [' L; o% h( Z/ P- V+ Y
  66. }# y8 h) {, h' O0 I
  67. //video,标签模拟视频& b/ a, U9 x8 c  {4 m

  68. 8 b% [+ G' D3 X: A
  69. </script>
    2 ^1 L' S: f0 W' [- X+ r! }
  70. </body>2 A8 l; m, V' l, P( G! j
  71. </html>- a7 v$ ]9 u$ o# ?. x$ }. o

  72. : A. L/ r* r, W; `$ F8 S1 A/ r4 o' O
复制代码
客户端:
  P; p- s, w. f% s* _! w' [
  1. <html>" G% J5 Q; d+ e2 g
  2. <head># Q3 a5 r" x( m- l; W& u, R- c
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">& V! j4 H" K: B# {" x5 L
  4. <title>客户端直播页面</title>
    ( M, n7 }& k/ r
  5. </head>
    5 _" \. l6 ^! I
  6. <body>% g' h. x( G( t+ \3 I# c
  7. <img id="receiver" style="width:720px;height:480px">
      y& G. @- A7 E0 I
  8. " k& {+ ?; L- I
  9. <script type="text/javascript" charset="utf-8">8 Y" x5 |0 Q% l: l) S2 T5 o
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");
      V1 q  O5 v" t
  11. var image = document.getElementById('receiver');  k+ o9 A  R( m7 T' I; R  ^
  12. receiver_socket.onmessage = function(data) {/ l# f/ J' n/ S% [5 t' d: b
  13.         console.log(data.data);. B- Q; D/ ?+ z' i" U
  14.         image.src = data.data;
    & |$ j% g8 h: k5 U% Z) U
  15. }
    3 i$ |1 K9 i+ K( K8 C
  16. </script>$ D: U) g* _3 |8 u
  17. </body>) w* J* x. V* E, u+ Z/ N
  18. </html>5 I) k  Y& j6 n0 t( z4 Z. `4 k
  19. " h) b8 _. _; b3 x; |) v9 g$ e3 S
复制代码
" P& L& a) D  d6 D- ^6 G+ R) _

- o" k# S( r% G! g, v
: @) _! ~3 r& H7 M, m+ J) w1 A- C; T, i1 m. u2 [2 u

% N" w/ s* J. U1 R* ?1 H2 S# T" N6 u- g' P( b2 C: e
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-16 15:21 , Processed in 0.055238 second(s), 20 queries .

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