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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
服务器代码* P& h) F$ B  W; _2 y
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);
    - @2 M# e1 P; g! }6 ?3 M7 a
  2. $client=array();
    & N8 ?0 B- b! i' h4 Q, N! b* x& G
  3. $serv->on("open",function($serv,$req)use($client){
    " ^4 F, ^; j% n+ ?& U
  4.         //echo 'connect'.$req->fd;9 P8 G" Q3 I+ _
  5.         $client[]=$req;
    1 M( `) p# E* y( t$ l0 K
  6.         //var_dump($client);1 j. K( s( d8 m2 a2 D- q
  7.         $serv->push($req->fd,'aa');9 e) b+ j- i4 f& w0 o; W) p& W
  8. });
    6 H  K% N0 F! E6 I

  9. 0 e# T' T& M, ^$ K7 p% D4 T9 L$ q
  10. $serv->on("message",function($serv,$frame)use ($client){
    2 L+ \3 K" d  s# G- ?
  11.         /*var_dump($frame->data);
    7 Q4 o, j& D& G# C) i+ f
  12.         foreach($client as $key =>$val){
    ' i  |# E* f6 C
  13.                 $serv->push($val->fd,'aa');
    6 ~- K; |# L+ A* y" o4 J
  14.         }*/
    2 L5 g* M8 |5 o2 ~4 b4 x# J8 d6 Z
  15.         $client=$serv->connection_list();
    ! i7 V9 E! W! s% d. z# _" [. @
  16.         var_dump($client);
    & A" e4 j' ?! S' y' z- e$ g
  17.         foreach($client as $key =>$val){
    2 _5 w6 t+ O& D% A" V
  18.                 if($val!=$frame->fd){
    ) f4 d. w% Y+ t3 s
  19.                         $serv->push($val,$frame->data);
    3 q9 ]: ^' _( ]9 u
  20.                 }$ j- K. i" z2 M4 t# I+ {
  21.         }2 p' W5 H3 M; O- _
  22.         
    & V( U2 H' C3 p- M
  23. });
    4 y' k) i! i: i0 R6 K
  24. $ R; ^* }  g6 t7 ^' S+ H
  25. $serv->on("close",function($serv,$fd){. B' D3 C: g9 `0 K) r
  26.         echo 'close';
    & T: M7 J5 p) U+ \
  27. });; d" ^$ j/ h. @' H

  28. ) {( ?. G8 J+ G
  29. $serv->start();2 M* u) L! y. k( `# g6 Y$ T+ J
  30. + |2 x6 Y+ [4 ^9 f
复制代码
主播客户端
5 N2 z* @( ]/ Y) r
  1. <!doctype html>
    " f3 p7 P9 D$ ?: r. Z; g
  2. <html>
    7 q6 h/ Y3 _3 a$ l0 d
  3. <head>$ W/ A! d5 U0 T
  4. <meta charset="utf-8">% W: P* f5 ~/ r; D
  5. 2 y& o" }% k" W. |0 K# v) U
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">( R' S  h1 X; w. G5 W1 D' q* i' p9 h3 Q
  7. <title>404</title>
    " _9 f; _* J  c3 O6 |) x' u
  8. <style>
      ~5 L! p  ?) W: d! I8 n$ ~  r
  9.         body{4 S9 G% M) G4 _
  10.                 background-color:#444;5 H0 Q8 n$ F# O$ y2 `& t
  11.                 font-size:14px;
    ; @/ e5 f5 q  h% ]: j% p# G4 d, X4 A
  12.         }9 c+ Y% e4 t8 e6 k
  13.         h3{' P6 Z6 i7 X2 M9 l
  14.                 font-size:60px;2 Y! a" H' N5 F$ ]$ }
  15.                 color:#eee;# p# L5 o6 e4 M! |# g" ~
  16.                 text-align:center;
    + d7 C- ]# g& x; R- q, g
  17.                 padding-top:30px;
    3 p0 c" H6 n: r% I$ ~) w) a
  18.                 font-weight:normal;
    2 P! z! Z( q7 x( S6 W
  19.         }
    : g' E" V. p) m  J
  20. </style>0 l- J9 {+ ]2 h! o0 B6 L
  21. </head>! m% D/ K& _: M5 C7 Z
  22. 6 u$ ?" h' a1 e1 P
  23. <body>8 x. f9 Z6 I4 h% r* U/ u, Q2 c
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>
    4 r- D2 b( |5 @' f+ D
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>/ q' n  B  f" r- s
  26. <canvas width="400" id="canvas2" height="400" ></canvas>" G4 ^. [0 A8 B; b# C
  27. <script>4 Y5 m% {9 N* z
  28. var video=document.getElementById('video');
    % ]. s* w4 C* b; ~9 i) V! Z+ M% h
  29. var canvas=document.getElementById('canvas');; Z' W) f* g; j$ ~8 ~9 K2 b- r
  30. var canvas2=document.getElementById('canvas2');2 V% G  U  G! b; E( l, ?+ \' b
  31. var context=canvas.getContext('2d');
    : y' x; G6 ~0 M# ]6 I' L
  32. var context2=canvas2.getContext('2d');
    + ?& l3 I" ]- V. [
  33. function draw(){
    + [6 G0 r+ g8 {
  34.         context.drawImage(video,0,0,400,400);
    " g( p6 e0 \- F
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
      ~& m4 I( ?! m" [& P& S8 N7 Y
  36.         setTimeout(draw,800);
    8 D$ j1 C( A! }5 I. B
  37. }
    5 F1 R6 [& S4 _, d. q
  38. 7 t+ o% T- I+ z' ]5 D
  39. //客户端跟服务端通讯# e$ s! c6 {& M* C- E. }
  40. if (window.MozWebSocket)
    3 s: K* n  e' ]  d# T) S6 J
  41. {
    / f2 u4 n& f/ _
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");
    ) `  l6 T( E, v& Q
  43. } else
    1 k9 h. }' v/ g) e6 y+ @
  44. {- \5 |" Q; w# x
  45.         ws = new WebSocket("ws://182.61.42.187:9501");
      u" y" g6 q+ K9 j4 @
  46. }
    8 w2 l4 o! d. c6 ~$ i- f
  47. : z  t, G  C, W
  48. ws.onopen=function(event){
    0 L6 e9 s8 N1 r
  49.         alert('连接成功');7 R. A5 }3 ]) G" i0 g  d
  50.         ws.binaryType = 'arraybuffer';5 |) K, N: Y. ?% p
  51.         draw();! u$ T: R& h: R$ `- [
  52. }# ]; W- H. S: T& u+ H1 }
  53. ws.onmessage=function(event){( w* n3 r, h6 B. B" ?+ ]
  54.         //alert(event.data);; h2 `# @5 E) o$ m( D! |1 o- C, p7 o0 _
  55.         //ws.send(event.data+"client");
    6 w$ U8 A; e% h/ O, a- A2 B8 G) v) e
  56.         qrCodeImg = new Image();
    : K7 `6 u  H+ x  P+ Q; }
  57.         qrCodeImg.src = event.data;1 B' Q6 Q/ i& l2 C& D; T# U
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);- i" F$ K: Y5 W% ~$ ]
  59.         
    : D% n/ U& M% x5 x6 M1 ]1 `( g
  60. }
    ! D* P1 ^& m, `! G" G
  61. ws.onclose=function(event){9 r2 |% ~* X. c- M8 h; f+ W  [
  62.         alert('close');
    2 Z! F' ]4 Z0 w# u
  63. }+ Q/ \3 |& R2 p) p( ~2 x$ R
  64. ws.onerror=function(event){9 q7 H% S) _% i- q& o" J8 F
  65.         alert('error');
    ' Y% m2 `& G8 s
  66. }
    ! i. Y5 `" b2 t5 w
  67. //video,标签模拟视频
    ) @; z+ }" H* n

  68. 2 H  G2 r1 Q( O! e, A- h
  69. </script>
    / ]( h+ C& P% Q0 W+ b
  70. </body>
    " e# u( e! W6 C+ m. a. c
  71. </html>7 O- o9 Z7 M& }5 D6 B6 T- ^" o
  72. # @' Q7 j5 H5 A
复制代码
客户端:
& `# _# J3 r' ]8 m& L2 T, `' h
  1. <html>/ _- v8 K0 u& K% w
  2. <head>0 i% ]: ]$ \1 P) Z5 G/ u/ G
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">
    $ C3 Y" N- X' ^- r; X' E
  4. <title>客户端直播页面</title>
    4 l2 y& q( C9 j' O+ O& n
  5. </head>+ `3 {" ^5 B( o
  6. <body>9 B+ l4 I( _4 p* |% q. P5 R
  7. <img id="receiver" style="width:720px;height:480px">6 z3 o7 }) j8 V' B* n2 R. H  Y

  8. # ?$ t8 b$ S: s) }! I; h* M
  9. <script type="text/javascript" charset="utf-8">0 G$ e5 n8 c- p9 U
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");4 ~: P1 Z7 j. ]% y& Y* i) F2 v
  11. var image = document.getElementById('receiver');
    ) ^/ N; c' O: P" ~& L& E
  12. receiver_socket.onmessage = function(data) {
      C+ C2 ]# b: ?( b$ u2 W
  13.         console.log(data.data);
    ' a$ ~/ C5 \/ t& S
  14.         image.src = data.data;) G& D! `8 v" p7 X3 N. d; J+ W
  15. }5 n7 Z: @) }3 f" D0 b
  16. </script>
    # p# m( ~+ k: I! R% z. h: `
  17. </body>; [7 `9 d5 J9 t8 R5 x
  18. </html>
    + K" u3 Y  G2 d2 `, I+ s

  19. 9 X: [9 Y% U+ H. v0 z
复制代码
5 z# i5 c" t" G9 A  @; Y
+ ~; }! M; Q/ l& S% X& m
. M$ @$ A3 K* \0 v7 w4 h
  s! F, Y  G: h4 @" |

8 a4 Z) }7 k; U! R
4 ~% M  K$ w0 O  X7 q" T
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-4-30 20:50 , Processed in 0.058255 second(s), 20 queries .

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