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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码
: E# Y" G& M! r3 [. A) E
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);) z6 {8 }( @4 Y5 x
  2. $client=array();
    ) }3 T0 M6 o" E: |
  3. $serv->on("open",function($serv,$req)use($client){
    9 ]$ o" D& B( x4 c: H0 _7 @, H
  4.         //echo 'connect'.$req->fd;: R+ d6 I, \) f7 O
  5.         $client[]=$req;
    5 S5 p% q+ S* ~8 R& Y  O
  6.         //var_dump($client);0 a" o; c( K# ^) V' B. |
  7.         $serv->push($req->fd,'aa');
    $ ]4 o& o" I; O5 l6 E8 J: u: K8 b" u
  8. });
    6 a! t( O1 Z3 \6 Q, y1 v$ C3 d
  9. 3 w! a4 \. B+ F% q% ~5 P% |
  10. $serv->on("message",function($serv,$frame)use ($client){
    . w' G/ [7 _4 v
  11.         /*var_dump($frame->data);
    2 m  P7 S8 k8 q+ z/ u6 B; [# T
  12.         foreach($client as $key =>$val){
    0 b7 {0 r/ ^8 H8 w: j1 ~* x
  13.                 $serv->push($val->fd,'aa');8 B, P) K2 b( B2 @
  14.         }*/, E+ X" I% S( q" z( h0 |4 Y
  15.         $client=$serv->connection_list();( h+ `( N, q0 Z8 G4 W6 d. X& ]
  16.         var_dump($client);
    ! O& v3 L& a. ~2 z) n# p5 @) W7 S
  17.         foreach($client as $key =>$val){
    + Z3 k& I) E/ M: b0 U- Z8 r2 U: \
  18.                 if($val!=$frame->fd){
    1 l! H9 h9 g; g7 f- Q( H
  19.                         $serv->push($val,$frame->data);/ K: N4 S* y' n# P% q3 m
  20.                 }
    " A9 T8 X* v# Z: e/ N( ~
  21.         }. P; @/ y) ]& [+ ?6 k( ~
  22.         5 R0 W. Q  `* ^& }, E' _  k% L
  23. });
    3 c1 o( K! B( e

  24. ; H* u9 U  O( j/ ^: F( p
  25. $serv->on("close",function($serv,$fd){9 Z8 S  y" i3 A# w5 Y( J
  26.         echo 'close';1 l/ r* [+ U' f- V$ n! C. a
  27. });
    ' \2 b$ q7 W. R5 \* u; ?/ r; l
  28. & h6 m) q% j! T1 |$ s2 l) M
  29. $serv->start();5 l5 U0 j$ L7 P" C* s
  30. 8 F  j  Q) W% \9 T! ^
复制代码
主播客户端9 C2 Q2 T( i0 K7 N
  1. <!doctype html>
    / [9 f) s# `% H& n/ E  T
  2. <html>
    6 u" l) {3 S: ?, b1 V: A
  3. <head>* y. _! u% x! d6 Z
  4. <meta charset="utf-8">
    2 d/ C# O1 v- y3 C/ a

  5. : ]& ?: i: O+ ?9 k. h6 w2 B! Q
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">$ \3 r& h& q# s" T" m
  7. <title>404</title>* D- ^( I% x- J7 `; |. y
  8. <style>
    / X. H  x1 {" i8 h* r7 a! b- o
  9.         body{
    ; s! d2 }+ K( l' M
  10.                 background-color:#444;
    9 T8 U, u9 Z# }  O2 E
  11.                 font-size:14px;
    $ ]' B% I: E0 }9 s2 ^8 z" O
  12.         }! P( d/ Q; |- k6 `& x3 E3 x
  13.         h3{
    ' t7 T* O% P5 Y, S3 j2 W
  14.                 font-size:60px;& a: Z0 l' `. W
  15.                 color:#eee;9 C( e4 o/ O* @7 B; |0 \& P
  16.                 text-align:center;( F1 J9 `' F3 ~! \9 j! m- K3 }
  17.                 padding-top:30px;+ L% |! P) d8 N, B
  18.                 font-weight:normal;7 z3 }) J& s- x1 ?0 I! A* f
  19.         }
    ! e" s! G/ z& {. ]- U1 a
  20. </style>
    5 ?- I+ ]: l9 }. O; @+ X6 \
  21. </head>
    1 ^4 `0 N: b2 |; x4 b# y

  22. 4 D" R. a2 U6 k% _# _# _  Q. |) ~
  23. <body>4 r+ Y6 j/ Z6 w- Z
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>" {0 s* K$ e2 H( \* D: D
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>& s& L% t7 `9 i: V
  26. <canvas width="400" id="canvas2" height="400" ></canvas>
    % w* p2 A( `0 H9 R& e8 t
  27. <script>$ h% X7 z5 V) B" _$ u
  28. var video=document.getElementById('video');- K0 V% a2 f4 j: g2 d
  29. var canvas=document.getElementById('canvas');
    ! {9 I& c- g7 {$ W1 K  [& z+ V
  30. var canvas2=document.getElementById('canvas2');( V% G2 {, k3 V. w& @8 d1 m( X: a
  31. var context=canvas.getContext('2d');( s4 j" a  a& d( {4 @8 L( ^
  32. var context2=canvas2.getContext('2d');6 ~( A+ N8 o. i8 c$ S; @
  33. function draw(){
    " @  ^- _# o; \+ X! ^% N$ L
  34.         context.drawImage(video,0,0,400,400);, h& Z4 m! k8 g# k; B& s- i
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
    $ k+ m+ o/ X3 i" T* q
  36.         setTimeout(draw,800);4 w/ o/ H8 a1 j( S6 ?
  37. }
    ) t! t7 b  _7 L- w, E1 ?( ?) C8 _6 |
  38. ' e9 x+ b+ t: F+ Y; v
  39. //客户端跟服务端通讯; o8 Y8 @( T) ?- d# t( w
  40. if (window.MozWebSocket)
    & x$ d) H) X7 t* R8 w
  41. {" n8 M- J/ E7 \0 B
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");- l1 |1 K7 A1 v* h  \
  43. } else  }$ j# X" S- A0 }2 \% k* j/ G/ f
  44. {8 U0 K$ O3 q0 t1 L  k- R7 K! q) w
  45.         ws = new WebSocket("ws://182.61.42.187:9501");
    & z! |- V( j4 {" g
  46. }
    . f. y% U1 x  e

  47. 7 s9 {" ~" I1 W1 |# |0 w
  48. ws.onopen=function(event){
    / E% a" L2 ^; \- ^2 O1 k
  49.         alert('连接成功');
    ( f6 G" t/ `& o3 A$ Q( H) W0 }
  50.         ws.binaryType = 'arraybuffer';
    " J( z' y: H9 h; L2 [% m7 D- g/ R
  51.         draw();
    , l. }3 K8 x+ @$ f4 E
  52. }; S, Y% p) H+ L/ [+ g, z4 ^8 {4 z
  53. ws.onmessage=function(event){4 o# O7 p; H3 ^3 r3 _8 D2 _3 x
  54.         //alert(event.data);
    ! I! M( k' A( b! ^9 Y0 O9 ]: f
  55.         //ws.send(event.data+"client");; q* M" k8 u9 }. a: O9 m3 u
  56.         qrCodeImg = new Image();% W# L% X& W, d0 S
  57.         qrCodeImg.src = event.data;. J  y2 Z9 r6 [) X4 F) z& @- X# ?
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);  L" \* P" m" ?+ O, ?! O
  59.         & u! s1 V1 O% A- X3 J- p
  60. }
    7 ?& f: l) T" \3 t/ G
  61. ws.onclose=function(event){9 E, b; l9 h. a' g5 T1 D. D" r
  62.         alert('close');4 @; G* h8 X+ f5 n+ f0 o
  63. }
    : Y1 f, i7 m  O7 p: g9 l
  64. ws.onerror=function(event){
    & ^, I5 i! S- G/ Y2 v0 U
  65.         alert('error');2 n6 U* U( q5 z! I3 Q) d
  66. }
    3 @9 x; h8 q! T4 n
  67. //video,标签模拟视频9 ^, H: R: R5 G

  68. & T8 e8 J# I# T2 u* o. \" ~, F( m
  69. </script>6 X3 F% q- b! W: c8 F9 s- T- u- H
  70. </body>
    2 ]) n" T, k/ P! Q9 T6 f0 C. c0 N$ H
  71. </html>( o  g( q  V+ G3 `; i- h2 U

  72. ( o0 i; F5 l! X8 l  P7 M& s  n
复制代码
客户端:
( ~6 x& r: b; M0 P) u7 Z
  1. <html>! V6 p, P% ~7 |% G' Y
  2. <head>
    ) b+ d$ X4 i9 |0 g
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">; a/ @9 a8 E  U& M% q9 u" z8 p
  4. <title>客户端直播页面</title>
    % w6 N( R! T7 U) Z* h; e0 g. }
  5. </head>
    ' r$ F4 p3 f; @: R5 @' e( D
  6. <body>
    1 a. l4 W/ C4 B# B/ L- x; f8 }; j
  7. <img id="receiver" style="width:720px;height:480px">" ~$ Z% O/ F6 T  k  E: d- K
  8. ) e4 X1 p* m# W+ H
  9. <script type="text/javascript" charset="utf-8">
    8 H/ c/ n9 i+ p1 m
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");
    + ^9 r% v. c; j& D0 I
  11. var image = document.getElementById('receiver');8 j7 {4 Y6 ]3 _- m, C1 d6 h& h
  12. receiver_socket.onmessage = function(data) {' R- V3 f+ h! Z+ z# M$ ]
  13.         console.log(data.data);
    , o& l* H# u8 O- k0 m# R0 O! a2 G
  14.         image.src = data.data;
    ( p. l! z& u6 \4 ?. B4 F, Q
  15. }8 c' |, J) z: b9 O1 K$ g( _, w, Q
  16. </script>
    3 I6 }( I3 X. k9 `" p% G; ]
  17. </body>- B) F2 n; A  |5 L) h
  18. </html>9 }8 i! I( {( U5 p

  19. . V5 A) ], b2 z: k) o0 E" D; e
复制代码

/ z4 U1 t. s# E+ M& h9 x1 u, j# d. c, j7 I- g/ d
. L6 q$ l6 C/ V  L' u
: b, u& T$ F4 v6 c% }" X4 i

7 y* o" f7 _( j, F7 h$ [0 q1 W6 Q  @# A; w
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 11:59 , Processed in 0.122304 second(s), 20 queries .

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