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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
服务器代码0 T1 h0 T, l: K& h
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);& _# y4 Z& e8 h0 z9 y
  2. $client=array();
    ! u: \9 a3 j; ^6 M# B
  3. $serv->on("open",function($serv,$req)use($client){
    * R1 U* g( t. m( N2 r; y2 s4 Z$ \
  4.         //echo 'connect'.$req->fd;5 C3 Q$ O0 n% f+ q5 h. y; Z; z" W
  5.         $client[]=$req;
    9 k9 `# a' q! R9 i# K- l
  6.         //var_dump($client);4 |; Q& Y& I# z' T" E9 \  K
  7.         $serv->push($req->fd,'aa');
    ) P2 M  Q4 Z7 m
  8. });% W+ x) B, F4 h0 P% \  j

  9. . t; M8 J& Y% F8 j1 J* I5 }- v
  10. $serv->on("message",function($serv,$frame)use ($client){
    , z. q  n9 T+ K6 O- R. w7 H0 d8 Y. C
  11.         /*var_dump($frame->data);
    4 N$ J- x7 U$ F+ x  m! z# o
  12.         foreach($client as $key =>$val){
    # E* O% T/ o: H6 ]# h0 Y- m! `# `- L1 P
  13.                 $serv->push($val->fd,'aa');( c1 C& L  A. E  W% W
  14.         }*/: j2 b5 m' Z# t! C) b
  15.         $client=$serv->connection_list();6 T& o8 |/ O  {. l4 s
  16.         var_dump($client);1 ^! L+ \( b, s" h# @$ C/ F  t+ b
  17.         foreach($client as $key =>$val){
    + w" c) R0 D6 z" b4 r5 y; M
  18.                 if($val!=$frame->fd){
    & `) A8 L- E3 e: I& L
  19.                         $serv->push($val,$frame->data);) u- F9 _+ _4 I" y- M
  20.                 }, X# e& T; C8 o2 F% \% y) n: s0 a
  21.         }
    4 B' c+ z* j6 ]. ], k
  22.         
    8 I6 i7 N( G. s- g2 [% V8 z6 s4 N
  23. });
    3 }. ~+ W) Y  U1 L2 t
  24. 1 t" b; d- f' I$ ]( I2 ~
  25. $serv->on("close",function($serv,$fd){$ O8 G9 l/ V( F% T* I, O
  26.         echo 'close';
    ( M0 M* `: \6 |+ x* b" V2 F) c
  27. });
    ! ?9 k! p3 d9 s' }; @. B

  28. 4 R5 M8 E, B: W2 D: `3 T  W$ Y
  29. $serv->start();3 y$ H) d6 N& c' O

  30. : L  ^6 K) e8 z& N4 O2 }
复制代码
主播客户端" W: X8 m# I7 B
  1. <!doctype html>
    4 X; @! s; L# r: S( W
  2. <html>
    5 I- h( `/ k' E5 X8 v6 Z6 |6 U- j
  3. <head>* c9 L. Z# l: Y8 R/ x3 E
  4. <meta charset="utf-8">2 U- X, o! n- |. G2 _; w

  5. 6 F1 B& [7 x# l/ q
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    * J) C) o$ y9 y7 w3 C+ q  a( Q
  7. <title>404</title>8 @7 o: n& b7 s
  8. <style>- d" Y& r; V/ [5 O( M9 r3 c
  9.         body{
    7 ~# o# `# N9 l( `; r0 [- `
  10.                 background-color:#444;
    ! R3 x/ U, @* S
  11.                 font-size:14px;
    : _; b, u. p8 W: E
  12.         }
    ) E6 Z9 f; X/ `4 i4 R. ]) z
  13.         h3{* q: ~2 ?5 H/ p7 I* P# Z) K' p
  14.                 font-size:60px;
    % t' d- ~- G/ l+ I. S  G
  15.                 color:#eee;
    6 ]" L+ h( L/ s. V! W
  16.                 text-align:center;
    5 ^% c, a/ h6 o% s
  17.                 padding-top:30px;. z8 r% s# w9 l, j5 y
  18.                 font-weight:normal;; l% H# g. c3 x: n3 w* Y
  19.         }( S: p6 j% M3 Y' q; V
  20. </style>$ t0 ?7 g7 j9 c1 Y
  21. </head>
    * r" k1 H( T9 `8 ~. k9 E4 Z. K& n

  22. / i9 t- g9 w( m
  23. <body>( O5 r3 `8 S& w, G/ O
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>
    ; {0 s  ?4 N/ {1 |! ?( r1 t" m
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>
    & R( ?) X6 i" y' i+ L: _
  26. <canvas width="400" id="canvas2" height="400" ></canvas>
    ; K  F+ o1 k  h
  27. <script>2 I! M9 U: I, h, ~
  28. var video=document.getElementById('video');
    ) a% w  K9 C1 a7 @' j
  29. var canvas=document.getElementById('canvas');: p, {2 G0 x5 ]- u" J0 j: r
  30. var canvas2=document.getElementById('canvas2');- l* K/ b$ _4 o6 {5 d: u
  31. var context=canvas.getContext('2d');* z& f9 o* z; R) a5 Q/ n* _& K' ?& P
  32. var context2=canvas2.getContext('2d');. o& p* \: A( H) o
  33. function draw(){
    * o' C- U+ ?  Q4 E, Z2 R) D
  34.         context.drawImage(video,0,0,400,400);
    . J* U7 G. y) B1 K- P
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
    4 Y, V8 j2 K$ m" U  j% b8 }
  36.         setTimeout(draw,800);, R4 [1 X5 v3 N* I. _
  37. }  C- q' I& Z( {. b

  38. 4 C- D& \% |5 |6 l* U
  39. //客户端跟服务端通讯
    # M, A  z3 `; B; ~. P7 x
  40. if (window.MozWebSocket)4 k% u+ j* ~$ X8 F  i
  41. {6 I* e$ \5 _* X4 [! e/ I
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");
    3 I7 z; U2 z" `6 q' H
  43. } else$ k' A+ t( g& s" Z
  44. {% p  y6 ~; U- M5 n" a
  45.         ws = new WebSocket("ws://182.61.42.187:9501");
    + U! B* f5 W$ E! E  O* _4 @1 X  }+ U
  46. }
    % N3 s( x2 C6 h9 m5 X
  47. 0 v' U3 M5 t% f
  48. ws.onopen=function(event){8 W" R2 E4 l, P" K- |
  49.         alert('连接成功');! r9 p. q( A# F6 d
  50.         ws.binaryType = 'arraybuffer';
    8 X& ?4 m: ]- L( y% E7 @, R$ D
  51.         draw();
    ! ~- A2 f, R6 P4 H; [. W1 A) l
  52. }: ]- ^- C: s0 F5 j0 s
  53. ws.onmessage=function(event){
    " R: N+ s8 R- M9 L
  54.         //alert(event.data);! H4 |4 G5 C$ r8 S) _. \
  55.         //ws.send(event.data+"client");$ \' q# [$ w8 {$ \
  56.         qrCodeImg = new Image();
    ; R& H) Z) G+ K2 i, d+ m  [
  57.         qrCodeImg.src = event.data;* s2 t/ w% c  U  r5 S6 }4 Z/ e" Y& ~
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);
    & c. X7 @% V% ^5 w1 }" m
  59.         
    ' X: H  \4 W/ O3 }( g8 @6 y7 e
  60. }
    - y: v1 _# [+ i/ G' L
  61. ws.onclose=function(event){
    ! [5 L% P# r/ o, n! q; I; K
  62.         alert('close');/ s5 D9 t1 r1 \5 M
  63. }
    : {- E" E) \  w* h3 p& F" [
  64. ws.onerror=function(event){/ Z1 Y" O$ K8 }! z! c& y
  65.         alert('error');
    3 G& ]) q" p1 e9 X
  66. }0 P/ F/ A+ p# M) K
  67. //video,标签模拟视频
    3 `6 C, V) z- f  I2 k- e) \% @

  68. 3 p8 v! m  p' L; }1 o' T' D
  69. </script>
    4 h/ q8 k) Q8 Y
  70. </body>
    ) n: R; i, V. v2 n' v. y
  71. </html>
    9 n- b. R; P2 E
  72. , r2 t+ e6 ]# x$ I8 d1 W
复制代码
客户端:
# `# ~7 k2 l5 B
  1. <html>( p4 B/ J. Q& |1 ~" w  D
  2. <head>% w- I# y' G* u% X# y
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">
    3 Y, \' c. k& Z3 I) v- H
  4. <title>客户端直播页面</title>( V+ v$ l3 F& k, U- x1 {# L
  5. </head>* d5 [( {+ V+ Q+ i, j& d6 A
  6. <body>
    # N  A8 r& @/ R; }4 }
  7. <img id="receiver" style="width:720px;height:480px">- V4 g, Q7 u8 _- T
  8.   J4 |: z" J2 W- n- y0 P
  9. <script type="text/javascript" charset="utf-8">
    ; ?6 F3 C  }0 K2 B  W
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");
    ) R( A8 {$ V' z5 L& ^7 o; g
  11. var image = document.getElementById('receiver');
    & s- c  ?, c; F+ _
  12. receiver_socket.onmessage = function(data) {+ |  `0 v" L  L' G. Q
  13.         console.log(data.data);
    / e6 Z4 w6 r7 j4 t2 t
  14.         image.src = data.data;+ @) L* v) t, u/ J4 ^2 ^* T
  15. }. m$ k( w  \6 H  K6 L7 r: S
  16. </script>
      p$ c) `+ w9 W) V2 w+ n0 t, g
  17. </body>/ k' i/ S  i  l8 N4 z  s
  18. </html>
    ' B6 n5 V/ t; W5 N

  19. " i0 v+ Z# f. Z  |' v
复制代码

2 b; |# J/ @4 I& x
+ d3 p( d3 d9 I% W! N8 [- O- `# `7 G8 d& g2 p4 i
9 {% Q& ]' v$ k5 z- o

" e8 `3 p! ^# q  A0 u$ x- i3 g
; Y+ d" W8 R3 W7 u' e! O/ l
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 14:40 , Processed in 0.112390 second(s), 20 queries .

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