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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
服务器代码
; p/ R8 _; _+ `! V& B  G
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);7 J- ]# K! c6 c1 M$ n% `* \: W( b
  2. $client=array();) ^8 N7 ]6 u% l: }1 g# }$ W0 T8 [
  3. $serv->on("open",function($serv,$req)use($client){) D0 q/ c6 T2 p* U  O# v& V
  4.         //echo 'connect'.$req->fd;
    & l, Q2 }: [  y5 s
  5.         $client[]=$req;
    3 L' l2 t% N/ I) s, w. {* T
  6.         //var_dump($client);
    " H% V. d" v5 h2 Y+ C, R
  7.         $serv->push($req->fd,'aa');" z3 U. |# U4 a9 B; S
  8. });, H, t7 D# A$ y9 @+ h
  9. / L/ i" a2 d6 Z  ]; v, @
  10. $serv->on("message",function($serv,$frame)use ($client){
    # v9 H, z% H: y! o& a
  11.         /*var_dump($frame->data);
    ) q8 ~0 _$ P8 y3 d6 ?- X
  12.         foreach($client as $key =>$val){8 N. u; s- \( B- n' r6 u! V
  13.                 $serv->push($val->fd,'aa');8 Y% l6 i9 q6 }( w
  14.         }*/
    / X6 e6 i1 \* b) T: U$ p
  15.         $client=$serv->connection_list();
      t  Q, }8 V* X4 E# b
  16.         var_dump($client);
    0 O/ s1 r; ^6 L/ Q, h) \) H
  17.         foreach($client as $key =>$val){
    3 E! P4 z9 K1 P1 e
  18.                 if($val!=$frame->fd){8 A: n/ j6 L2 @. N! M
  19.                         $serv->push($val,$frame->data);0 l+ W3 g7 D. c  p9 G
  20.                 }+ f- d/ U" |/ {+ L! _6 @7 N
  21.         }
    1 }# w' i7 G. s/ n  m  P) q
  22.         
    1 F9 J0 {& K! [& n* t3 A
  23. });
    1 p% J' ^# c7 r" i- F: u
  24. 8 ^) H) K. S2 p) Q. n( L% s) a
  25. $serv->on("close",function($serv,$fd){8 C/ S+ j  n# y: [% e  }0 _. D
  26.         echo 'close';
    $ n7 y/ Z( ?( Q- z) L
  27. });. s' B+ d6 `5 Y8 p6 O6 D/ ^

  28. , x3 Q7 f  K" v% ^, f8 `7 R' ~- M- u
  29. $serv->start();
    % k& l! b, K. ~' B  X' B

  30. 2 o6 }. L: D7 O& S8 ~
复制代码
主播客户端/ Q* w- M- c+ U" d, E
  1. <!doctype html>
    # ^% r% \4 U; a% X! H& H# u
  2. <html>0 M# ]0 h: O! Z9 z1 d
  3. <head>
    - S0 |, ]4 a( B" g; ^
  4. <meta charset="utf-8">3 ?" ~1 W. y. z! K/ b5 i. Y

  5. 2 a# x  b# O2 k9 c- @1 C7 d! ]
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    & z- u& n. e; i
  7. <title>404</title>
    / Q* b, r! ~, G* ~
  8. <style>3 n; B" F6 I4 @
  9.         body{: g# K7 u: u  n8 L; c
  10.                 background-color:#444;, l! Z/ |' V6 {
  11.                 font-size:14px;
    6 U- P6 r2 c: l& c) b3 g5 q7 X
  12.         }$ o; r7 z( ~9 [5 x
  13.         h3{
    ! L3 F! k) C4 D8 L9 V
  14.                 font-size:60px;  @6 Z9 u1 m( i$ P+ ~8 a
  15.                 color:#eee;
    7 M  ~  `0 e5 O' i: c7 @' V
  16.                 text-align:center;6 W2 m' ~  H' Q1 }4 R2 |
  17.                 padding-top:30px;( g* n6 h7 k% n# @
  18.                 font-weight:normal;
    6 ?0 Y+ Z8 N& n7 N
  19.         }
    4 X: \7 V4 w9 t# M* R5 J& G% x" P
  20. </style>
    $ g1 ^6 L* v) Z6 @. j7 p! }& k" d6 \
  21. </head>/ T/ a6 _! L: O9 {$ y! D

  22. & |& M6 q5 _9 j% f! U' k7 W; k5 k, U) A
  23. <body>$ _; N& b. a: L) `
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>" d3 B4 l3 c* I4 ~/ H% I+ S
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>
    : o* S* H- `3 H6 p3 v1 B. q
  26. <canvas width="400" id="canvas2" height="400" ></canvas>
    ; ~$ e9 f) w3 i4 z! Z6 c
  27. <script>
    3 h4 P9 y; }" E9 e$ x: q7 I) O
  28. var video=document.getElementById('video');
    & X3 U$ L! Z0 n4 h' r7 ]& l
  29. var canvas=document.getElementById('canvas');
    8 x* `1 }; W( D
  30. var canvas2=document.getElementById('canvas2');% r* u; x1 u% W3 }; b, T
  31. var context=canvas.getContext('2d');( K% d  z5 |1 |# B% p, Q
  32. var context2=canvas2.getContext('2d');) |0 w2 ~$ t2 V
  33. function draw(){" V$ `+ D9 R9 R) a) x# g( }
  34.         context.drawImage(video,0,0,400,400);* t4 I7 y% S) a. s" |$ J  K
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
    , o+ N* t- b1 W; E2 v. Z
  36.         setTimeout(draw,800);; `5 j% m1 ?2 a/ u0 ]% w
  37. }
    0 T) r$ h: F- \+ v8 Z0 `
  38. $ {9 I" E, ^; F' h% Y# g) N3 J
  39. //客户端跟服务端通讯
    7 L1 f- v9 W  t- }7 y9 X+ y
  40. if (window.MozWebSocket)
    ) G; Y" w) m( d9 u9 o
  41. {1 @8 u3 l9 r/ ~+ b: Q* @
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");/ a' L& T2 P0 A  K" b
  43. } else0 D9 c4 w3 f9 y: O1 _' f
  44. {
    8 X5 a1 M4 n+ t( L
  45.         ws = new WebSocket("ws://182.61.42.187:9501");9 B/ \: N. P- X+ j, y4 _5 P
  46. }
    ( I; S$ |4 D+ ?. b* c
  47. ( N& }3 v8 u2 a7 i
  48. ws.onopen=function(event){
    ; u+ C7 t& M6 e% i( ]
  49.         alert('连接成功');
    # p; A: ?8 i6 q% w$ L8 h# r
  50.         ws.binaryType = 'arraybuffer';
    4 X$ p2 _. ~0 e  t+ ?' U
  51.         draw();
    " H4 u! O0 ]! _: y5 v4 q1 f9 W
  52. }: {* z4 R+ [  N2 N* t  S
  53. ws.onmessage=function(event){9 j8 x) `: x) b
  54.         //alert(event.data);4 J# O- a& U6 W& T2 y
  55.         //ws.send(event.data+"client");
    1 _1 f; D* e) P8 p/ T
  56.         qrCodeImg = new Image();
    . b6 Y7 G$ w; z6 ]& O1 F2 _  f
  57.         qrCodeImg.src = event.data;
    + f/ b9 F2 v( z  V! F
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);" B$ x4 T2 w+ L7 P  ]  ~
  59.         . w/ A5 @: x3 Y+ L& C( b$ ?
  60. }# f8 R3 |3 G! }: ~( Z3 p
  61. ws.onclose=function(event){
    . s! p- A5 Z- m0 s+ _4 g
  62.         alert('close');
    7 Z! d6 A6 G8 O9 C- N6 e% J
  63. }  i  ^, S# z& P
  64. ws.onerror=function(event){
    ; _) M2 n' I& l4 |* z
  65.         alert('error');
    1 f8 e' ?: N( J
  66. }
    - \$ c& ~8 h# r$ b
  67. //video,标签模拟视频
    * x. a6 s3 R" v/ F$ c  H
  68. 3 R6 @; W$ W2 g2 K) A
  69. </script>
    ( o& k  h' v- X, I2 f9 }# r  s
  70. </body>- n$ |  V! U( \% A- x
  71. </html>, z' W+ _; T) K
  72. ; q; _; c) z2 k0 ]
复制代码
客户端:0 v) M# F  \$ d  h9 V8 e/ r6 `9 k
  1. <html>
    ( O; l! h$ Z! c# ^3 ?1 i! I
  2. <head>
    + V( m. N$ Q5 q5 U
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">
    ! `0 R8 g# `3 v3 x1 m6 G7 J. h
  4. <title>客户端直播页面</title>1 I5 O7 S4 B3 t2 q5 z
  5. </head>
    " K2 g1 ^2 w3 z0 `, v! ?
  6. <body>
      T# H5 r1 U" ^8 Y- u8 B: L
  7. <img id="receiver" style="width:720px;height:480px">( Z. j. P' I. T; n3 M6 o
  8. % O3 h. G4 s0 i, x2 j3 p  f3 h, Y
  9. <script type="text/javascript" charset="utf-8"># Y7 ~2 k' C* z
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");% i4 G1 F. I7 G2 k
  11. var image = document.getElementById('receiver');2 Q9 d- i5 a! U; K! p+ V. I
  12. receiver_socket.onmessage = function(data) {
    ( u9 {& W( G8 k1 N
  13.         console.log(data.data);; c/ e- Q% f$ S/ P) e  B. w
  14.         image.src = data.data;1 R, r7 _4 {; g$ v. y( v, N
  15. }
    , ~0 `) x9 H6 a0 R, L% f
  16. </script>
    9 N: h( B' Z, {" @6 G7 N5 _
  17. </body>
    & r: z: X6 U, R1 p) Z: D+ ~
  18. </html>
      l- f3 H) _( e4 t6 y! z' }
  19. + \$ u# k# v+ {7 C* L  ^
复制代码
* |  E  s/ F/ u& ~% J( F

/ Z) U0 _4 G; Y- x, B
/ s2 B5 i8 H# z; k) h* N3 }4 s. x1 s, l
3 J3 r/ y2 U+ f( o
9 o7 w7 t, _* H% u2 g9 Z
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-4 12:43 , Processed in 0.175103 second(s), 20 queries .

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