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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码5 {$ G, Z* Y7 T9 s5 ^+ P9 `# B
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);# r* z, Q- s' @( D3 g, H
  2. $client=array();+ N& f: Z+ H4 Y" g
  3. $serv->on("open",function($serv,$req)use($client){
    ( G* j7 w( i& l- z9 b& R$ ^
  4.         //echo 'connect'.$req->fd;
    6 j  D( I* ~  K: y* N- L+ b
  5.         $client[]=$req;
    + C8 a1 n! P! X$ W
  6.         //var_dump($client);  z/ \. [' C9 q+ m- j$ S7 }
  7.         $serv->push($req->fd,'aa');
    " j; x, \$ k! x# p* b, K
  8. });
    * U9 _1 p7 A+ a5 S. t
  9. 8 x) ?9 ]. ^- O* [8 ?$ o3 u: ~, S( K
  10. $serv->on("message",function($serv,$frame)use ($client){% b6 U( w$ h; V8 C0 |. W
  11.         /*var_dump($frame->data);
    9 W3 x% A% G" W, G
  12.         foreach($client as $key =>$val){
    5 |, ~, I, @/ M/ ^
  13.                 $serv->push($val->fd,'aa');0 M) L5 e; W$ p- x' w$ A
  14.         }*/& }+ S; R" e, Q  Y2 K8 ]
  15.         $client=$serv->connection_list();- h' u- Z# g, ^2 B
  16.         var_dump($client);+ @3 k# T5 U' R3 W9 p, g/ ~" U
  17.         foreach($client as $key =>$val){% X% m: O6 }6 w! Q) M; g
  18.                 if($val!=$frame->fd){  P. g7 Q9 m# b- p: r% P; M
  19.                         $serv->push($val,$frame->data);/ s+ \2 f- N% j* w$ }( F! f
  20.                 }
    . ~" i! @9 C! r" @' x
  21.         }& |! b% ~& O5 D6 ^" m7 F& T" B
  22.         5 t2 @* S# v2 a  v+ K
  23. });
    9 X; }* u9 o4 e& w: ]" o
  24. # |' w' j7 M# D3 d: q) o) @3 E
  25. $serv->on("close",function($serv,$fd){
    + ~. ^+ |9 D# p, O" u# Z) t! Q. y, z
  26.         echo 'close';- O: U+ M1 g% J+ G  I
  27. });
    ' G* T3 Z& W) C9 a& Q7 u
  28. $ G: F! }! |. b5 s4 V2 u' \! @
  29. $serv->start();1 C7 F/ {* |) Q. A( g' b: D

  30.   W' B& \) _& a$ j& D
复制代码
主播客户端
1 Z! ~( ~$ h9 w
  1. <!doctype html>+ C4 G0 S7 }. D2 `
  2. <html>8 c! |- n% c+ R; T. G+ J2 u' f
  3. <head>
    3 Y5 S( R& v% A" B  W! z
  4. <meta charset="utf-8">
    7 Z7 \; ?( D' I  C2 V/ L$ ]1 B
  5. , Q$ h" L; ~/ T8 B( L) t' K
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    ! B; i6 ]) Q) w2 A2 y  b& q
  7. <title>404</title>
    $ {# }  I; n% J4 H3 A% u: `
  8. <style>
    ) r2 Y" i, w, @; Z
  9.         body{
    ) G' g/ l2 R& B3 B
  10.                 background-color:#444;
    - G3 g/ K3 i9 @# p+ U9 m  T
  11.                 font-size:14px;
    ; j3 O9 A6 X- L& V$ M6 B5 k
  12.         }
    % h  `* o# M3 t0 }3 m2 B" n4 A
  13.         h3{& r, k2 f1 B" R3 l  K+ G
  14.                 font-size:60px;
    ) e4 r& t: R, q$ U0 a. h+ ~
  15.                 color:#eee;
    6 c7 ]/ w$ ]: @# z& o* u5 E
  16.                 text-align:center;
    8 @3 V6 |" s+ H
  17.                 padding-top:30px;
    ' y& f& X/ p7 M
  18.                 font-weight:normal;5 Z. I$ b8 Y  ~& s( _8 \3 i0 ~
  19.         }* i8 Q# v0 \1 K& x$ V3 B
  20. </style>: d" X6 u. h- W$ a. M
  21. </head>
    ' h5 G2 H5 ]2 C8 }  H7 A: f/ W
  22. ( A( P, Z+ M. P+ t
  23. <body>- `" S( q9 w3 d0 k; c
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>
    : L: G% Y& G# r4 C' p! L; O
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>
    5 Y. m' t  x; e4 n
  26. <canvas width="400" id="canvas2" height="400" ></canvas>
    ! s/ ~+ |8 t$ i2 J3 H+ E
  27. <script>
    / D' }3 h* \  d* m2 Z
  28. var video=document.getElementById('video');% z9 K7 `; w; f( }1 V7 l
  29. var canvas=document.getElementById('canvas');$ O1 U' L* _! g9 r2 x
  30. var canvas2=document.getElementById('canvas2');, R+ N# Q" ~4 l& Z- m
  31. var context=canvas.getContext('2d');) A. m) y+ K$ f3 L. j
  32. var context2=canvas2.getContext('2d');4 p2 j$ n/ Z% ^
  33. function draw(){
    , o! x% J" |7 {4 H+ o  \
  34.         context.drawImage(video,0,0,400,400);
    3 E9 H- I! {6 X- e) H) o+ A
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
    5 d  q2 `; t) G% A" x( \
  36.         setTimeout(draw,800);( h5 v/ C4 [8 P" n* w4 N1 _* j
  37. }$ o5 d) Y: z9 }" l" A0 o' V

  38. & {! m3 L# ?0 q5 x
  39. //客户端跟服务端通讯! v& r: y4 r/ s% }+ s9 X
  40. if (window.MozWebSocket)! E' K7 a; X# D. u
  41. {
    # S$ S. n& E  A: p& Z
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");
    $ p7 ^, c# e2 ^
  43. } else, b0 M* r7 F) r6 z$ y6 w  }
  44. {
    4 I7 _1 U' {' E" v1 v
  45.         ws = new WebSocket("ws://182.61.42.187:9501");
    ! V2 L4 l2 s) ?: V$ m4 [. \! z' ^  u
  46. }2 y7 V3 M- k+ A" `
  47. 1 Z1 I: j+ n9 J
  48. ws.onopen=function(event){6 s5 f/ i$ b, N$ u" H) ?
  49.         alert('连接成功');9 z2 e$ }; ^7 P9 h
  50.         ws.binaryType = 'arraybuffer';
    $ ]8 g- I0 y& E2 u; C* b" o: N. q
  51.         draw();
    $ k  d! W# z5 b- Z5 V7 S
  52. }; \5 N' V! {/ Y8 j" H
  53. ws.onmessage=function(event){. l& A* \9 b3 {9 k) Q! Y) a8 ^
  54.         //alert(event.data);
    / ~7 m& Z% w: B" Z* g4 r
  55.         //ws.send(event.data+"client");7 m! ~4 A# m3 a) q' e5 N
  56.         qrCodeImg = new Image();: Q; \" P  P! E" G4 c, x% n
  57.         qrCodeImg.src = event.data;
    : f" }$ x& j& E6 b- D" G2 ]
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);- i4 z9 T  X& n5 X
  59.         
    " p! w" S# ^; y- D; {& e2 u9 [. @
  60. }
    - f$ W' a  q$ U
  61. ws.onclose=function(event){, z$ _8 }) v, g5 V9 }7 c" v
  62.         alert('close');
    8 I6 `; a) C8 F! o* i& }
  63. }1 B) T' Z$ g8 ?8 Z
  64. ws.onerror=function(event){$ H- b" u7 w" H6 H' y1 t  a3 L
  65.         alert('error');5 `$ Q8 y1 m5 ~3 `$ v4 E! h) x
  66. }4 O0 r% p1 V4 J4 M; W
  67. //video,标签模拟视频! ]$ o  `' \% _# h& |

  68. 0 \* i6 y: O( \9 ^$ M" m
  69. </script>
    4 a& P# w0 W& Q( |
  70. </body>
    + D/ M' M; [2 l8 n1 {$ M& J
  71. </html>
    6 s/ N& b0 _& D% }& m
  72. 9 e7 m( v+ J4 M/ `, s' r
复制代码
客户端:* [- o# i+ Z0 e) ~8 ~0 j' p
  1. <html>
    . f8 K& d7 a6 c5 ?: n
  2. <head>
    + R( h8 ^& y& }
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">
    2 r$ ?2 C) C/ v5 ~' u4 n7 t  O
  4. <title>客户端直播页面</title>/ ~: `) i1 J4 c$ s
  5. </head>, w% [7 O9 W" V9 L! j* t: L
  6. <body>
    ( k3 Z, o2 z9 k% S4 w$ z
  7. <img id="receiver" style="width:720px;height:480px">3 v# }/ {$ b, t

  8. - r1 W0 g1 ~! a' N( q9 x
  9. <script type="text/javascript" charset="utf-8">2 V6 c5 v( [$ Y5 F% ]
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");3 N( l  w9 K) ^; H! x
  11. var image = document.getElementById('receiver');
    3 Z2 q7 K5 r7 x/ @' A7 a
  12. receiver_socket.onmessage = function(data) {9 E' {6 I, w, Q0 a2 p
  13.         console.log(data.data);
    0 H) _# Z, x# f' Y; s, r; h& T& D
  14.         image.src = data.data;
    : P, h1 ~5 A* d1 _  j- z
  15. }- C' r2 d2 }* {: `
  16. </script># n4 o' W1 z0 w5 S' o
  17. </body>
    7 H$ I& k% N* Q; p# V/ d) n
  18. </html>+ S+ u2 b8 `" n

  19. # Y) O5 i, W& F
复制代码

" {, t- b! h! ]9 L# Y
. s, l) j7 m2 V0 ~4 K9 B: w2 t% d# @

9 Z  o6 E# o7 T8 \# n) b: N9 z) P: m' H
1 Z2 i; K- x0 u7 w5 ?5 ^
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-4-20 20:02 , Processed in 0.136679 second(s), 21 queries .

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