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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码, M/ H3 ~& H% y1 A! h& s
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);
    5 U! V) ?* X2 m; {% A8 r6 P; [
  2. $client=array();3 w0 o8 S0 N: H0 y' i: x
  3. $serv->on("open",function($serv,$req)use($client){
    # `- b' K1 a; l5 p2 b- J$ J
  4.         //echo 'connect'.$req->fd;3 [  o% i' H2 ]2 J' {
  5.         $client[]=$req;1 B5 H5 J8 Q" S# u
  6.         //var_dump($client);8 `; N+ A  t" Z+ f$ a% x/ P
  7.         $serv->push($req->fd,'aa');9 [  i; F6 a3 I% `
  8. });0 p6 o# i) v9 f, |* j8 f
  9. 2 K: D( ?; X5 z* z. n' _' S: R# p
  10. $serv->on("message",function($serv,$frame)use ($client){
    , |. O6 k1 n4 Z1 f! H/ c2 L9 D
  11.         /*var_dump($frame->data);2 X2 N3 A/ u( j$ g% u* g( I
  12.         foreach($client as $key =>$val){3 a! v, H# a- y% Y
  13.                 $serv->push($val->fd,'aa');
    7 [5 C2 o! f! N" |2 ^) M
  14.         }*/, ~, N6 |) K6 J  O7 |3 J( C
  15.         $client=$serv->connection_list();/ ]  u/ }% N/ b
  16.         var_dump($client);" d, ^! S  r' i- l1 f0 J
  17.         foreach($client as $key =>$val){
    9 O- }% }6 `7 H: t& Y! T
  18.                 if($val!=$frame->fd){% [, i: f2 Q/ V* c* |5 N5 k
  19.                         $serv->push($val,$frame->data);
    # |% s" C0 d3 G0 H/ \3 V
  20.                 }
    , j8 ^5 u' I  a- I  w+ J' y
  21.         }3 ?, q1 E' p( ?, @- @4 d( h8 \! J
  22.         
    % `3 L" H5 e! m  B& }
  23. });
      R/ b/ S6 L( A% T
  24. , U) I: i2 ^" h) G+ x
  25. $serv->on("close",function($serv,$fd){
    ; r5 \4 _; }1 C7 x" b0 N% Q
  26.         echo 'close';3 l; X8 h0 g- b3 k: m
  27. });1 P: L9 L! }! q$ [

  28. 1 d" U- }+ [. @4 N6 b( h" v
  29. $serv->start();1 n. I* {& G+ [$ e/ s# d
  30. ' l: F* P1 L4 D
复制代码
主播客户端) u. s% r  c; [  n& O
  1. <!doctype html>: Q3 r$ I+ {" d; w+ Z/ @# ^5 a# Y* L
  2. <html>
    9 x. x! ?* {+ w* z0 \" u
  3. <head>/ u: h  A- y. j2 o6 W
  4. <meta charset="utf-8">3 m- J: }# R- `5 \' g! [

  5. . u6 k3 Q" ~* `  I5 r6 b
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">8 v( _8 p3 x% d3 z
  7. <title>404</title>
    % G% g* f8 U) s
  8. <style>! E9 v& }3 J" Q3 }
  9.         body{! s/ s2 [6 W! A# E& m  b+ P
  10.                 background-color:#444;
    : N/ {8 R# i) y; L( O  a" A. o
  11.                 font-size:14px;
    % r8 U' l  ?) O1 }) z" o! V
  12.         }
    8 B* Y: S2 H5 u2 v4 ?
  13.         h3{5 u8 N4 `, G" K; j7 i% u" V* L
  14.                 font-size:60px;
    8 F9 x# o, N/ h" ^
  15.                 color:#eee;
    % k: H  X! A/ m: i( o
  16.                 text-align:center;/ Q1 o8 v; _& C" R: M
  17.                 padding-top:30px;& g  S  M# P4 A9 k5 _, }; f+ q* Q
  18.                 font-weight:normal;2 X$ e" }; k! q% v3 M
  19.         }: ?" M$ m, X! V2 U  y
  20. </style>
    " u/ X5 C7 x" j
  21. </head>
    ! H0 j  e3 A. K! I1 {( z
  22. . H9 d; _+ Q. S  R. p% T% y6 e
  23. <body>  Q% n& p, q8 Q' ?& _: l# ]% G; q
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>
    ( c6 q8 z0 `! O- s
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>
    ! }. I7 C- R% Y, S
  26. <canvas width="400" id="canvas2" height="400" ></canvas>
    0 a" W# X1 [4 Z2 F9 E- A# }$ P: u: U. D4 k
  27. <script>. v5 g  N( i  t
  28. var video=document.getElementById('video');
    , b: @7 @. [; H: s
  29. var canvas=document.getElementById('canvas');
    * j+ O/ C! d: h" s3 a
  30. var canvas2=document.getElementById('canvas2');. P5 a- O' Z* i" C/ `7 {
  31. var context=canvas.getContext('2d');, z  [; L6 z) L1 J/ O" H$ W
  32. var context2=canvas2.getContext('2d');
    + C/ s4 E6 \$ l# p+ x: A7 m
  33. function draw(){
    ( w& `5 [' v% W: z2 Q# J4 m
  34.         context.drawImage(video,0,0,400,400);4 c: F" \: [% Q8 o9 H8 y
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
    ! L" Y3 l+ Z" T) B: [+ l* X; J6 I
  36.         setTimeout(draw,800);) ^; _' _: c, J" q7 |; t  [/ J, g- e
  37. }
    ' D# T2 e8 ]9 l

  38. 0 J, h0 l$ v7 Y2 T
  39. //客户端跟服务端通讯/ x- F2 r0 n/ I# b5 C6 ~
  40. if (window.MozWebSocket)
    & F1 \" o8 q, q* i3 {) F- i' N
  41. {! p0 E" M% g% `+ L1 e$ t
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");( w9 n/ E- X, [& i4 q% B
  43. } else* R. r# T4 {) L
  44. {
    6 P% K5 z( W/ E9 m1 [  }. U! u
  45.         ws = new WebSocket("ws://182.61.42.187:9501");" D! f4 @  v! F7 C6 S
  46. }6 ?/ w! F4 {: s; b

  47. & s5 e5 u! J8 S6 y5 B0 H) }
  48. ws.onopen=function(event){
    8 W6 U0 @$ S# _/ T" S( Y. E& ~
  49.         alert('连接成功');
    ' D& O, A$ T* W! O
  50.         ws.binaryType = 'arraybuffer';2 e. B8 s2 r0 {3 `6 P6 ?
  51.         draw();
    ( w1 y8 D; j/ F6 H6 w
  52. }0 z; Z3 s5 E  ]& ^1 U4 T
  53. ws.onmessage=function(event){
    0 L8 x, e4 o+ ~1 x  {8 J7 j
  54.         //alert(event.data);
    6 Y4 l7 [$ j, e# F
  55.         //ws.send(event.data+"client");
    - ]$ e$ p. O7 D/ C5 x  O+ n
  56.         qrCodeImg = new Image();
    ) c# y& c$ x% @
  57.         qrCodeImg.src = event.data;
    3 `- N8 ]- @' b3 P7 J( n, m
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);
    ; m- R0 E$ z' V  C/ F2 p
  59.         
    4 [& n& N) f' @! D
  60. }
    2 o5 F( P' K. b) R$ `
  61. ws.onclose=function(event){
    * |, @, r8 }* X
  62.         alert('close');
    ' m% }7 v' ]/ p% t# l0 D$ j  M6 n
  63. }
    2 R# D( }$ e  h4 ^; C2 b2 B/ M4 e, T
  64. ws.onerror=function(event){0 u9 \4 r) j( k/ W& o+ U# Y
  65.         alert('error');
    ) h- L  E$ d8 H3 f' E# L) J/ b9 N
  66. }
    7 d$ h* p' c0 S' B. w
  67. //video,标签模拟视频
    & p2 f: F2 a$ m' V2 Y/ `
  68.   L' K% h  V. V9 h1 z
  69. </script># W6 g4 Z$ a8 |% {
  70. </body>
    $ A- P! V5 s, M
  71. </html>, \7 |  C7 ~2 n. {  E% X
  72. ( ?) ~  E/ T* W
复制代码
客户端:* j$ [  S! F! \. Q/ O8 R* X
  1. <html>
    6 H9 W5 h3 T  }1 O
  2. <head>
    5 Y5 m. v1 c  O% W3 E6 H- S$ p
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">! l% n% j8 i/ ]# h
  4. <title>客户端直播页面</title>
    : @/ g2 Z# }3 \/ N
  5. </head>
    $ M1 l0 h* o$ w5 q4 o
  6. <body>) O" a& f* x* U' @
  7. <img id="receiver" style="width:720px;height:480px">) K. B3 ~" w1 v1 Q2 \

  8. " O6 H- j: x9 B2 w' M
  9. <script type="text/javascript" charset="utf-8"># z( g. e# H1 Q% _: l  c
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");
    4 {+ h! t6 r' p1 s/ y0 F
  11. var image = document.getElementById('receiver');8 Q! G% a  h" K6 M+ C- t
  12. receiver_socket.onmessage = function(data) {! J5 q" v5 ^# J* S% v; Y
  13.         console.log(data.data);
    # W2 V$ v) y, x. c
  14.         image.src = data.data;9 Q7 S6 l6 F1 ?( y* V* E' P
  15. }& o8 U" u" g- }
  16. </script>
    , I' k& B+ S* _7 \7 A% R. u" j# w) F( C
  17. </body>
    + |5 k& Y) r7 {8 Y" n$ r
  18. </html>* |0 \! ^: e) M4 q/ |8 A: E% W) s- H6 l
  19. 5 e1 x8 b0 r: a- \  M% E% ]
复制代码
8 ?8 x9 {) z, p: Q  u- h* o
) ~# a  h; a) f+ R$ x

! P8 r0 G5 R$ u$ q  \2 P
8 [: u3 }2 n$ q" Z
2 u% z5 Z( g* q6 q' t. d) E( w. a7 Y5 R$ S! X* W2 t* x% ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-4 13:37 , Processed in 0.053523 second(s), 19 queries .

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