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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码5 ?2 K6 E+ ]: B
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);
    & f, I* z" d# b" a
  2. $client=array();5 t) l3 m) i8 q- w
  3. $serv->on("open",function($serv,$req)use($client){
    % o  K. y% O' y1 n! m" l# }+ O9 _
  4.         //echo 'connect'.$req->fd;. s% f) C5 |/ c2 m
  5.         $client[]=$req;
    % w- \# Z( v. ]& z
  6.         //var_dump($client);
    * Q# m& W& H7 \4 p; s! o
  7.         $serv->push($req->fd,'aa');
    # d0 M3 c% ]4 d. E8 S
  8. });  U. W; V- n. b
  9. : S# f' J, `7 W9 d/ ^6 A, F- M  u. Z* B
  10. $serv->on("message",function($serv,$frame)use ($client){
    6 x8 O6 ?, S5 T( }. c& }! s7 v
  11.         /*var_dump($frame->data);
    - x( ?3 m% C7 m5 C; Q
  12.         foreach($client as $key =>$val){
    8 c  A# p8 v, ]9 ^
  13.                 $serv->push($val->fd,'aa');
    6 n9 _+ L& z1 U
  14.         }*/
    * j6 s# y* v  n, k  b
  15.         $client=$serv->connection_list();0 u: t2 E! Y4 H+ }! \- }( N! x
  16.         var_dump($client);
    1 \9 ]3 Y" |$ o7 J; B
  17.         foreach($client as $key =>$val){% Z1 A8 n: t( J
  18.                 if($val!=$frame->fd){. W( A) h* k% ^/ ^0 w/ c5 B. k9 R
  19.                         $serv->push($val,$frame->data);
    " @4 B) G. ~: e& \. |5 w! w. G
  20.                 }2 I. z. }) `  P7 I  n
  21.         }
      Z+ o" ~8 K% o3 T" \
  22.         8 {9 c$ ~) O5 f! Z. t2 v" p& Q' u7 F
  23. });- E" L; A8 S5 c" c) O9 A  K
  24. ( ?( u/ C6 r8 z  k( E* X
  25. $serv->on("close",function($serv,$fd){
    8 x$ O6 A* c! ?% I) F5 b( Z
  26.         echo 'close';
    ( N& [1 [  Z" E& k$ K$ a
  27. });
    ( ]* l, I8 G2 [4 |1 l
  28. 1 `& M! Y7 b5 \0 R6 c
  29. $serv->start();4 E: C8 m$ e* N+ Q8 j+ T" |

  30. 4 T4 y3 p. F& A2 }* o4 @
复制代码
主播客户端
2 E0 ~. H4 Q8 B' a
  1. <!doctype html>
    2 Y, d  N* Z; L
  2. <html>3 u" ^- [4 s- f3 m* V; i
  3. <head>
    * L3 d. K0 a$ H: W) q8 _8 [
  4. <meta charset="utf-8">
    " B- N8 p+ c4 Q
  5. + {3 l' w* [1 L: t* Y4 ~+ _  }
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">2 E/ N+ B6 p$ [4 D5 h2 j* n
  7. <title>404</title>
    ' G0 @5 v7 J2 N# J" l; k
  8. <style>
    ' R: n$ ~. d. r- V9 H
  9.         body{
    9 _+ F+ W9 b$ |& r- z/ S; d
  10.                 background-color:#444;
    , A: w8 j6 H1 h1 f7 q% U
  11.                 font-size:14px;. O8 s% i1 f* `( l3 j3 S/ u
  12.         }
    9 C# u8 C5 o: f3 Y3 Z( [8 G4 {" O
  13.         h3{$ J7 Z, s4 q+ p8 q
  14.                 font-size:60px;
    3 `/ J' F) H. V
  15.                 color:#eee;
    3 v" G4 {. n2 C
  16.                 text-align:center;
    ) H  @! M" H/ z9 Y- w5 y9 k  R
  17.                 padding-top:30px;7 H7 A% V7 N* @( |
  18.                 font-weight:normal;( h; o" \$ P# N; s) y1 ~% y1 K' u% R
  19.         }9 x. ]# b; B9 |" W
  20. </style>6 ~* }$ A* G8 ?. j6 _4 }+ E  [/ u1 h
  21. </head>
    ' W3 s. m* J: K  W1 j0 h9 [( O
  22. / j. a, ~! a$ F- V+ J
  23. <body>
    " F4 l+ ^3 m+ ]5 O
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>
    , P7 V! M' ]5 q+ z
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>
    * C. Y! |5 P3 U
  26. <canvas width="400" id="canvas2" height="400" ></canvas>" T2 u9 I1 X& J! }: a
  27. <script>
    + E" F5 `# {  Q3 q9 m3 h
  28. var video=document.getElementById('video');
    6 o# K5 s% ]8 n8 Y% ]
  29. var canvas=document.getElementById('canvas');
    2 H$ E$ K& J; Q; M0 a
  30. var canvas2=document.getElementById('canvas2');% U4 R& p6 d, l- v0 _" h( I
  31. var context=canvas.getContext('2d');
    3 e8 ^: e: t0 M/ s
  32. var context2=canvas2.getContext('2d');
    0 O. ~: u3 l! X% o
  33. function draw(){* X4 w# S! W/ w8 s3 b
  34.         context.drawImage(video,0,0,400,400);
    2 ?7 e" Y* j% Q9 ]3 L
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
    & `8 B5 w( @& l' e
  36.         setTimeout(draw,800);
    2 W7 ^3 [" L  s$ }- F0 d
  37. }# ~9 z' X( S! Z: q2 G

  38. * b% v+ h* C2 h+ z# [
  39. //客户端跟服务端通讯
    : [& ~+ V, U* a' e/ u1 k; n
  40. if (window.MozWebSocket)+ a, g1 l1 a' O$ Z( x
  41. {2 Z3 d+ w6 o7 c! F; i( M, e
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");
    " {" z' {5 X: S& L7 h! \# T
  43. } else
    7 E) Q# v6 C. c' q
  44. {
    . a& S7 ^2 P1 W# X
  45.         ws = new WebSocket("ws://182.61.42.187:9501");+ _2 f. [( D# U7 v8 `$ G! @
  46. }
    9 {5 X& n7 a7 P! l4 ?9 c. i+ y
  47. 7 L& f2 J& \3 e/ ?" v. D4 S; V
  48. ws.onopen=function(event){
    7 r7 I; w; F/ x# x! g. `
  49.         alert('连接成功');
    ( h6 T: Y7 s. R$ }" p
  50.         ws.binaryType = 'arraybuffer';" P* d+ `. v1 o* k
  51.         draw();
    # `5 l. Q2 B1 l4 s" o
  52. }
    ( |- {: l# \' |  ^6 Z
  53. ws.onmessage=function(event){
    ! ?' V! c$ y% x
  54.         //alert(event.data);
    # s. u5 y! {& B: m5 Y2 T& t
  55.         //ws.send(event.data+"client");) C+ `4 r3 g0 g4 K1 n
  56.         qrCodeImg = new Image();
    , ~( p* \5 W5 z
  57.         qrCodeImg.src = event.data;5 ^- X. w" m9 t! k
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);/ i( P( |$ @; D% x# G' I3 g
  59.         
    ) u# h5 G1 T: C( B# \3 A
  60. }
    : A1 f( \: d7 ?4 T
  61. ws.onclose=function(event){
    : _0 Z8 h/ H6 n2 k  w
  62.         alert('close');' x4 E) u. |" e7 R" R6 [1 o* c
  63. }, V0 v: }3 F/ v1 P( q6 h. V2 j
  64. ws.onerror=function(event){4 \# u: ?' m, T( I" u1 n
  65.         alert('error');1 j* H9 P# [+ L( ]! K; r6 @
  66. }
    & E  O7 M( N# P9 b/ M% E
  67. //video,标签模拟视频% l: F6 k& d$ e( ~

  68. 1 d# n  B4 t- e7 E
  69. </script>
    % \6 m. d8 z! Q( z4 W0 N
  70. </body>8 w2 M; [4 ^# j+ @& b
  71. </html>
    & C2 _5 B% B1 y/ C# }5 V$ u9 f1 ^

  72. . ^' S1 f+ p* a& s/ Q8 ~
复制代码
客户端:
# v2 G9 W/ w8 G, J  j4 I9 M# }# n! Y
  1. <html>4 M, ?) U& U, q% L  c
  2. <head>
    & S) N& p8 I. r3 ^: w
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">
    / \, M9 U5 R6 q7 k6 N
  4. <title>客户端直播页面</title>
      G; S+ O% @1 H0 v- g# H' G+ x6 a
  5. </head>
    1 V. B) o; s2 R8 u% u. @" I% V/ l# L
  6. <body>; N1 w1 H5 u1 i& K, W' J
  7. <img id="receiver" style="width:720px;height:480px">
    ! [  ~3 [3 ?0 C3 C$ Y: ^# ]' Z
  8. 9 {6 x. Y8 o( ?5 J. q
  9. <script type="text/javascript" charset="utf-8">
    # c5 \( ?7 m1 [
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");% j3 V$ U% N3 x
  11. var image = document.getElementById('receiver');
    7 y: \2 J7 @9 }4 N+ ~
  12. receiver_socket.onmessage = function(data) {3 C7 \  t; Z; e6 n% K9 U
  13.         console.log(data.data);
    * @# p4 [- ^9 ]% q4 K
  14.         image.src = data.data;5 O: p' F1 t  k: W9 n# _, E
  15. }
    . d- ~4 l8 v5 G% |
  16. </script>
    7 N# e, J5 Y( o0 X2 B3 g
  17. </body>  R' B1 F, N! F# a+ l- C
  18. </html>- j+ H" c4 J* D+ R$ V. G
  19. % l$ A" U; d" o' W; U$ k9 o" X
复制代码

/ y6 l8 {! Z; l* I. ~1 V2 ]/ D& F/ k3 K. R6 _& ~5 }9 V3 v6 k/ Q6 t
( O* V% L; L7 t  X$ k
& m8 `  I4 _0 Y, D5 O
+ n1 N3 S. J& z5 |7 i6 I$ V
' f7 h6 S1 b! Q9 m- l) i" ?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-9-21 02:07 , Processed in 0.049025 second(s), 19 queries .

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