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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
服务器代码
% Q; C4 ^6 U; \8 K, `6 Q# {
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);2 w% f" \9 \4 c
  2. $client=array();2 ^1 z5 y+ V) c
  3. $serv->on("open",function($serv,$req)use($client){) h) m" f/ U! q. O+ Y
  4.         //echo 'connect'.$req->fd;/ n% G  A3 y9 [3 N# q5 G
  5.         $client[]=$req;2 P, Q6 J1 Z: c+ n; U. `6 `: ^5 w" j
  6.         //var_dump($client);; N4 W6 v& g+ m% t; X2 a0 ?$ N
  7.         $serv->push($req->fd,'aa');7 o+ ]9 O1 {+ @) d3 R. b( g
  8. });2 B* U( s5 K+ d2 N+ H
  9. % O6 n, G/ l5 J" P& m
  10. $serv->on("message",function($serv,$frame)use ($client){
    0 U% t, w% G6 H! n+ B
  11.         /*var_dump($frame->data);
    * j1 U4 u& n; Y  ~0 G
  12.         foreach($client as $key =>$val){
    2 O1 C: R' i. c# ?! D9 c
  13.                 $serv->push($val->fd,'aa');
    & {- E7 l) ]* _/ C0 V# Z
  14.         }*/
    " W' J8 l+ o! j9 r
  15.         $client=$serv->connection_list();2 c& P7 [& `; M( G+ Z8 U9 W
  16.         var_dump($client);
    6 h! y' Y5 f) J  h% ^- `2 y
  17.         foreach($client as $key =>$val){& q3 Q9 E5 n+ q9 {3 \
  18.                 if($val!=$frame->fd){
    ! }9 H" @7 r0 u9 S) @& c
  19.                         $serv->push($val,$frame->data);# |4 s. g' e3 I0 I7 N6 B' ~; b$ F$ m
  20.                 }, y; M6 e. I, A! B2 G" b2 S, S( W
  21.         }4 g" @% S  q) [7 w  ]
  22.         
    ) Y, K0 A0 _* F$ V' U: {7 w& Y
  23. });
    / O+ v" O& x# g  I; L; ^7 f: t6 Y
  24. : k; P( ]* q" ~8 ^& @( g
  25. $serv->on("close",function($serv,$fd){& U- Y, }$ n% x
  26.         echo 'close';) Y  w( N8 {! f) d! y' t# g. Y
  27. });! `0 K. S8 V& K$ J. v
  28. & a  L) _2 i- @% a1 Q
  29. $serv->start();
    6 L1 z5 A( I  E. \

  30. + O  n1 q4 z0 c  m; t0 l# p
复制代码
主播客户端3 F" {$ C* j2 I" G1 r. W
  1. <!doctype html>) l: P/ Y5 K$ T4 _: X: u$ P" S+ ]
  2. <html>* ~0 S) }: `6 X- ~% }+ [& \# {
  3. <head>! u7 Q5 ]3 X- @  ?1 R6 v
  4. <meta charset="utf-8">4 I% @- h; |9 S( g, P4 y
  5. 8 x; _+ ?9 n7 a; i- I" C" j" k1 f$ W  X
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    * B& ?+ a& E7 W# `3 \" X( U
  7. <title>404</title>; ?: ]  B- d6 }' r# H
  8. <style>
    ( f' R8 n7 ^, M, @3 e6 H8 C
  9.         body{9 B3 Y; ]- @+ F( ^- }* ^; y
  10.                 background-color:#444;  r; l/ S; K3 Y" r) x
  11.                 font-size:14px;1 r) E, R% h$ y  ]2 \( g
  12.         }
    ; x5 ?0 t2 H+ ^/ P9 J* V# }5 K
  13.         h3{6 b0 \$ n. t2 e
  14.                 font-size:60px;
    ! b) O# |4 H$ Q
  15.                 color:#eee;
    # E/ B$ I2 l9 a% Z# }
  16.                 text-align:center;
    , t* Q6 u# j* f0 F7 G" D
  17.                 padding-top:30px;9 t, L% {, [! B6 K9 x' r
  18.                 font-weight:normal;
    # i. X8 n+ F  f- Y6 ^; X$ J
  19.         }
    - {+ g% j& Y8 I+ n! P1 w* R7 Y; g
  20. </style>
    * G2 l2 j  z7 l( n& Y
  21. </head>
    ( Q4 m- _: @6 L( F0 ?9 l

  22. 6 D) ~1 x; [% G# j! `  t
  23. <body>
    , [: o. J  {- m: _( U8 P
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>
    - Q1 U: ]+ g9 T
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>
    6 ]; V/ e. u; s# r7 q) q$ f. \& |
  26. <canvas width="400" id="canvas2" height="400" ></canvas>1 _8 W" A2 K5 _7 F+ v' L  s
  27. <script>4 h' S( k: O% O0 v" A& J! @# I; L' X5 C
  28. var video=document.getElementById('video');9 A. y! C' E+ N. W
  29. var canvas=document.getElementById('canvas');
    9 e  A) g) [. c6 ~0 q' i2 R
  30. var canvas2=document.getElementById('canvas2');
    $ G  C* T1 D- z4 Q9 J3 \
  31. var context=canvas.getContext('2d');: E: i, u4 n9 J4 R; \( j, @$ Z& ]
  32. var context2=canvas2.getContext('2d');
    ( j  p: ]" N8 X- l+ ~! k2 G
  33. function draw(){
    ) O, y* L! S. f9 |- ]
  34.         context.drawImage(video,0,0,400,400);
    ; N% ^6 D; L: {6 o( [
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));9 F% A( o" U& P9 x0 y. B# \
  36.         setTimeout(draw,800);
    0 W4 g/ Q# e1 `; ~: N) ~
  37. }8 B. p) q# Y. T/ K# ^- G3 f

  38. 4 X8 g! M: A# V; U( [8 y
  39. //客户端跟服务端通讯
    ' f0 Y* @4 u- n) K# E" W
  40. if (window.MozWebSocket)
    $ M( ^9 A$ p# J
  41. {
      V4 F0 J6 [5 k$ W' h
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");
    & r6 u. W. h" {$ g2 U6 `( z
  43. } else
    * T4 Q1 R: }: Q& f
  44. {/ a" Z4 [3 C# m3 B7 Q
  45.         ws = new WebSocket("ws://182.61.42.187:9501");" t; Q! v' v: F: r
  46. }
    5 L1 e8 _" f; c/ A! K6 v0 [
  47. . S) T) I, [3 }3 `* d( ^4 X3 S4 V' \; M
  48. ws.onopen=function(event){
    * J3 L/ H& I! L$ z) S
  49.         alert('连接成功');
    2 l' x& _+ _+ m
  50.         ws.binaryType = 'arraybuffer';
    ( D) d. r2 ~, t$ F% ~
  51.         draw();
    2 E+ m$ _0 r/ m4 X7 t+ `
  52. }# t2 J4 v7 ~+ B1 |8 [8 J4 {7 N+ s
  53. ws.onmessage=function(event){! n+ ?& e8 N- |$ N5 a; H& V; D& A
  54.         //alert(event.data);
    + m2 q  O* W: C& s' W" \3 w" m  s
  55.         //ws.send(event.data+"client");
    5 L! J- @* `0 E% d9 a& j7 X/ e
  56.         qrCodeImg = new Image();
    % R! P6 e' w% J' w+ Q5 z' g+ T
  57.         qrCodeImg.src = event.data;- ?. _5 Y5 E( S1 y+ h, A! G: q
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);$ b* W& |/ W% F& k( x
  59.         + _7 e. R% s( O# i9 Z/ U: O
  60. }8 w7 y8 Y6 V, |) {2 c
  61. ws.onclose=function(event){
    , L6 o8 f3 ^8 f; e$ |) B8 t
  62.         alert('close');& |) C) w! @9 y+ M% t# r- V# H
  63. }
    : Q5 A  `0 E8 ]7 s& x; N" r$ P
  64. ws.onerror=function(event){" C: n' r  ]4 W8 B7 j
  65.         alert('error');
    / J( I( [# n3 i  n& w
  66. }
    ) @. _7 ]/ d9 m
  67. //video,标签模拟视频9 ?6 O8 z! U8 a) F9 Z
  68. & ~' y0 m( S+ L9 O: x
  69. </script>
    7 f# ^; z+ {& r
  70. </body>
    5 K9 v6 k3 g1 g6 V7 o3 h1 j: H1 {
  71. </html>3 s) ^% ?% H5 @2 m5 [; H/ R* s

  72. * v  Q8 @5 h  g/ A0 t/ [$ M
复制代码
客户端:
9 S# O, M" T/ G( n
  1. <html>3 v, b0 X# o1 z; C# N
  2. <head>
    5 E+ T- e! p9 O8 Y) g
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">
      M! t+ d( ]- e: m, W( \
  4. <title>客户端直播页面</title>
    - x* ^) K! f# J# p& y. v
  5. </head>/ e* y3 ]" G% _2 M
  6. <body>( t& A/ |+ C( z7 K6 E4 P
  7. <img id="receiver" style="width:720px;height:480px">; i3 f; r/ J0 x: D2 s

  8. 6 N* E' G1 F; L- g; ?8 N! n- y( T3 x
  9. <script type="text/javascript" charset="utf-8">
    ! x1 y1 E  w6 y8 A( B' Q
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");9 F( S0 b* n/ t! F+ K
  11. var image = document.getElementById('receiver');8 I1 f. G- s) ^  e- t
  12. receiver_socket.onmessage = function(data) {+ W# c* W) j8 X: ^; P% h4 T* p
  13.         console.log(data.data);
    ; a+ E" x' _2 N  M- i! ^; h6 }
  14.         image.src = data.data;, S) b  b: a& I+ w$ p
  15. }/ `) ^1 k4 T" H2 G) K
  16. </script>
    8 B& F7 S9 a' A
  17. </body>9 ]) w. n" }5 g* U* B5 {  U6 b* b
  18. </html>
    ( j, V3 J  S' \9 L7 S
  19. * Z6 n4 ]  T4 w0 e, o  s' a4 W
复制代码

  ]  H4 G2 }* g5 g3 q
9 `7 K9 }/ v  f5 r9 E
5 p& f: ?# {: S) o( H0 v# L1 a' y
0 C! J! b! E; T- C  @

  Z' S% i0 y4 B1 A
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-4 08:09 , Processed in 0.053276 second(s), 21 queries .

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