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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码2 ~! m5 @) f) n, q2 ^- h
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);
    % {8 h- E$ T; x% B
  2. $client=array();) D+ E; o& b+ y7 `5 M3 Z
  3. $serv->on("open",function($serv,$req)use($client){
    1 f' j6 }# z. l( S* \0 p) G
  4.         //echo 'connect'.$req->fd;) m$ R$ \- u8 I" l8 f1 q( T
  5.         $client[]=$req;2 U2 h7 [7 N8 @1 w$ c8 b
  6.         //var_dump($client);% e! d5 {( o* g3 w' Q# M" ^
  7.         $serv->push($req->fd,'aa');& J4 ^6 C% u" p7 _: e  |7 \) V
  8. });
    " C, I% f* x, K9 B5 w
  9. 7 e1 Q) H; E* u6 p, h4 ~  ?
  10. $serv->on("message",function($serv,$frame)use ($client){& S& q9 t+ f- f! ]
  11.         /*var_dump($frame->data);$ c7 n0 l6 ]- @0 z" o; O* j
  12.         foreach($client as $key =>$val){
    9 e: g1 B9 G% }$ O3 e/ }9 w7 F( x
  13.                 $serv->push($val->fd,'aa');! L# H0 k6 R. R3 \; e
  14.         }*/
    : L- P$ C; S8 O
  15.         $client=$serv->connection_list();
    ! z. ]8 H4 C9 f0 @1 r9 c
  16.         var_dump($client);
    5 c4 G9 t+ C7 u3 J, E; L! r: G, f
  17.         foreach($client as $key =>$val){' S  s. u6 p5 |
  18.                 if($val!=$frame->fd){& W2 l% M5 v: P4 o# b* Q. t
  19.                         $serv->push($val,$frame->data);
    1 |! r3 o; R7 T# k0 Q/ Y9 D9 @
  20.                 }0 v, C& f, T: M7 ^5 u
  21.         }4 H1 L9 Q% l: K1 Q  Y
  22.         
    . z9 V, e6 F# _& T) i2 _
  23. });" r% M. x0 S  ^2 m% [* o) a  f
  24. . B! o1 t9 ^; L7 b; Z
  25. $serv->on("close",function($serv,$fd){
    # m" Z; B0 z/ v8 J" W2 ~' l
  26.         echo 'close';$ s1 `; O5 K  ~9 {7 ]' |
  27. });
    " k$ C& h( {$ t/ ]

  28. ' a+ ~3 w; a. U7 ]" A# }& }; c  W
  29. $serv->start();
    5 m! y; N( \: D
  30. ; {5 C3 Y! a3 `0 y/ p! C8 k# ~
复制代码
主播客户端1 h8 n* F: |. q
  1. <!doctype html>, Q2 V4 ~6 I5 M2 v' a% Q$ Y- {) w
  2. <html>$ N# V* l& y) e6 x- f9 e
  3. <head>' o0 l1 M2 K' @( E3 b, d
  4. <meta charset="utf-8">
    $ [: P2 p* Q* E1 d

  5. , F! R. \* O$ q$ _6 d
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    - [1 p6 F% Z- L6 h& p
  7. <title>404</title>4 Q" J2 T) e% J) l. G& q
  8. <style>
    7 a: p( f: `* G- [7 Z
  9.         body{! M7 s( U" N3 V# X& U: k
  10.                 background-color:#444;
    ' k5 G: T0 f& i8 x0 l
  11.                 font-size:14px;
    9 O! F  N* V! }5 L5 X# d
  12.         }: T  K! O; X( o8 F) P
  13.         h3{  ~. U4 u+ |4 s* v4 b* q! I# D. [
  14.                 font-size:60px;
    . z$ ]- i! l. M6 A. x5 `
  15.                 color:#eee;0 U/ T/ l% s& ^
  16.                 text-align:center;
    1 H( w2 N! `) [* r
  17.                 padding-top:30px;
    : q8 ?" b# R+ N: M- x2 [3 O' u
  18.                 font-weight:normal;
    1 p/ M) P6 Q* V" w
  19.         }4 P( p4 f' A+ ~0 J5 ~7 L* n# k
  20. </style>7 w) r3 E) ]8 g' [' [1 R$ j
  21. </head>% h* N  C7 O/ W  e+ s5 L+ y
  22. " P* W1 f/ c- L* u; f+ T. Z4 B8 l
  23. <body>9 {9 D0 Z. I5 Y% y
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>2 |; N- U9 s# l3 i1 a# _) \* ]
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>
    . W- [( ]$ }5 N9 q7 E' J" _6 g
  26. <canvas width="400" id="canvas2" height="400" ></canvas>
    $ r, p7 S6 b$ v$ S6 }, [4 ^
  27. <script>! p; q4 }% m: i! h
  28. var video=document.getElementById('video');
    9 P5 O2 a. [% h: D# m3 M; M
  29. var canvas=document.getElementById('canvas');
    ' F* o5 |7 J* G7 d
  30. var canvas2=document.getElementById('canvas2');: v& A4 \: K# q3 W- o
  31. var context=canvas.getContext('2d');
    ) P/ P" Q- g5 ?6 {2 M7 A
  32. var context2=canvas2.getContext('2d');
    2 j0 c8 k8 F3 ^' F( J7 O1 M
  33. function draw(){% k) R* {* U4 D7 \3 Q
  34.         context.drawImage(video,0,0,400,400);+ w. Y# Y. N' G! N) @
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
    ; W  p$ ^! |6 f( ~
  36.         setTimeout(draw,800);% l* t" ]- a" w' U" d' s+ s  N
  37. }* k" G4 |! d/ H  c) k9 [' a
  38. - A* a' U1 m  W3 e
  39. //客户端跟服务端通讯8 C/ G5 `( C  w. @
  40. if (window.MozWebSocket)8 E0 h' W. p" b6 }
  41. {
    ) r7 V% I% }$ M+ n& g/ W# Z( H& {5 G' G
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");
    $ c7 p. X+ y( U4 L, @  X) C
  43. } else
    . h# ]+ C* w" k- v
  44. {: Y! P, w6 \; b+ u4 P
  45.         ws = new WebSocket("ws://182.61.42.187:9501");, E, B+ _9 }' K& Y( a' o
  46. }1 Z7 D# T& _: J* M- \- S; j' s
  47. , d1 d. Z( z9 @- W7 W
  48. ws.onopen=function(event){: ~7 i* |# y. m% _
  49.         alert('连接成功');5 j' F- D- }: q1 [
  50.         ws.binaryType = 'arraybuffer';
    9 ~0 g& f9 v$ M! x4 Z6 ^
  51.         draw();
    : r" k) W0 C) U3 {
  52. }' V' a2 n/ O- R6 B* y7 h
  53. ws.onmessage=function(event){
    9 V5 ]; q% J$ s( u: J9 F
  54.         //alert(event.data);" b. [* j- x1 ]  l* l8 r- B9 ?
  55.         //ws.send(event.data+"client");3 K6 c% E+ p) ?7 @2 ]$ E2 ?! n
  56.         qrCodeImg = new Image();
    ! \8 m8 S( a( @" W0 V+ R
  57.         qrCodeImg.src = event.data;$ {' z1 D5 V' u4 S: Y* K
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);
    : i- A" `: u' U4 H( \: t
  59.         + \" F" P( ]- W7 X: N+ h
  60. }' k" m  M1 d8 x, ^
  61. ws.onclose=function(event){1 C' H1 w/ r3 ~, }: N# v4 J: p
  62.         alert('close');
    ; B; z2 o/ g- \4 S
  63. }
    * Y9 k4 z! i6 C8 a: k8 U
  64. ws.onerror=function(event){
    1 {+ Q. a5 T. ?; m$ H
  65.         alert('error');
    6 c% V  z: ^( S& p# E+ N: d% S/ m* R! _
  66. }- w+ I+ |! W, {1 T) g3 a
  67. //video,标签模拟视频
    2 h" y9 `( F& d
  68. : W9 a* P+ y+ ?6 O  F  ~& {
  69. </script>
    5 K% r0 |& d. X/ ~6 _3 ^/ M" D
  70. </body>
      @3 v$ m8 E) s# W6 ]
  71. </html>
    ; l9 E0 z4 V4 S# r
  72. 6 W' `5 @) O# S- z* Y: H, R# G
复制代码
客户端:1 D/ `, h+ |" I3 }. q/ p
  1. <html>$ J' A7 j3 S2 i( U
  2. <head>% O# w& Z: ~8 Q! L6 B. H' T
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">
    7 @+ w# P# C6 W- J, x5 k
  4. <title>客户端直播页面</title>+ y& n" `' t+ \/ D
  5. </head>
    ) F+ t, M" N2 ~% i8 |& _  P9 g" e
  6. <body>
    * ^5 C) \* N" O- g
  7. <img id="receiver" style="width:720px;height:480px">7 I0 D. n3 v' M7 M" T: x' e3 u7 u# {
  8. 2 y( @' T  p3 u$ \+ b
  9. <script type="text/javascript" charset="utf-8">
    ! y0 F) T) h. U( V) r2 b! g
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");
    3 b! |1 [& [! x: S, _8 i( B9 H
  11. var image = document.getElementById('receiver');% ~0 I2 H! C# r9 [% ?: z' ?0 V% t* \6 k
  12. receiver_socket.onmessage = function(data) {9 m$ K$ h+ q( T
  13.         console.log(data.data);
    + b& V3 f+ s) m& }! \& \3 M2 v$ h
  14.         image.src = data.data;
    : T2 k# Z" J  m+ F9 q' _
  15. }
    # j) s7 q& C7 _: v3 K. l
  16. </script>
    0 ^( Y$ c2 H$ W# t9 ], L
  17. </body>3 G5 L2 K! r! X7 [/ ^5 C- ~
  18. </html>
    : I2 G& j' _  W& }8 `. T
  19. ! e. {! l% T8 p8 I6 C3 X
复制代码
, Y- l5 `1 F5 u# ~! [) z

0 n! ~$ I, i- B
1 B# c, S+ l4 A9 I5 x* l0 z0 t$ @/ O- G
6 H+ v% E/ N& b- e- b1 B, b" X6 Q0 Z
: ^( \! U$ W' m' f$ A& O' k6 ^+ W
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-17 15:43 , Processed in 0.140865 second(s), 21 queries .

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