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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码3 Q; ^/ ~) ~5 \1 Y/ e) Z7 U
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);
    % b! C2 k" O/ X
  2. $client=array();
    8 D6 W# ~" t' h) d% W
  3. $serv->on("open",function($serv,$req)use($client){
    3 w/ E9 x! |: R7 |4 m
  4.         //echo 'connect'.$req->fd;
    ; @1 T0 X) [4 b: g  ]3 {( h
  5.         $client[]=$req;
    8 v; o7 ], h# m6 o+ b. x
  6.         //var_dump($client);
    " M- \# G: E2 U* H% ]% W  k  b
  7.         $serv->push($req->fd,'aa');- }: K/ q# _& H7 D
  8. });% {" A- Q9 J4 {* H
  9.   H% A) `4 I: A6 a
  10. $serv->on("message",function($serv,$frame)use ($client){
    * ^( c1 I; Y6 {7 \1 Z
  11.         /*var_dump($frame->data);! z4 t5 [' D7 f2 ?  Y* }9 {: W9 j, j/ e
  12.         foreach($client as $key =>$val){
    5 J/ L0 \- T3 `' G# ^' Z
  13.                 $serv->push($val->fd,'aa');, L7 Q  G- O6 y
  14.         }*/1 e+ u) l) x: R3 }" `2 ?& [: }
  15.         $client=$serv->connection_list();' X) Y! p$ i% O) f7 G: s
  16.         var_dump($client);1 \3 d- q3 F1 X# `- m
  17.         foreach($client as $key =>$val){
    % J' w; x0 U3 M8 f' c0 L( p9 _* |' _2 \% I
  18.                 if($val!=$frame->fd){
    5 {; z0 U' N1 Q* q
  19.                         $serv->push($val,$frame->data);' t  E9 v8 X* ^' e2 j0 Z
  20.                 }
    - F; j' C# d' y8 B" |1 w; F' n
  21.         }
    9 r) Y) W0 H1 |: q' S9 C+ P+ U
  22.         
    4 G8 @( l& ~5 f% c& S
  23. });
    + ~' w1 ^6 N1 S) I* B9 @

  24. ! ]" A' n" j6 G, Y$ a
  25. $serv->on("close",function($serv,$fd){
      x0 ?% ]* Y& T+ f) K, \
  26.         echo 'close';
    6 S# L- j; y7 ~7 f0 O3 Z
  27. });
    ( x3 A) Z" S6 d' a# R* N4 U9 i8 t' b
  28. 7 s. o8 c, }) P, U: G+ e9 g
  29. $serv->start();
    : C8 Q! b6 Y. ]! {8 S: T' G+ v9 M

  30. $ E8 h( H* L7 o- Q
复制代码
主播客户端8 \: B0 `0 E7 [5 H/ O) R+ u
  1. <!doctype html>
    7 C3 u8 D6 m9 ^, M
  2. <html>
    : x) ^0 f1 ?( n" z7 q6 W
  3. <head>1 Y2 @' n9 _) y$ U2 O( r
  4. <meta charset="utf-8">
    , e  x" Y- E! X! L+ f4 M
  5. $ g( J1 y* l& l# o
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">6 m5 F) y- E- b9 \; _+ @' @: F% l
  7. <title>404</title>6 `. g: ?- s& o4 O6 b; w
  8. <style>$ R* e7 g9 s. B; r4 i& r
  9.         body{0 V& X* {3 y& U  F
  10.                 background-color:#444;) O" \! }  J- P% e
  11.                 font-size:14px;) f" y  C1 `' E
  12.         }( |+ g: n+ t( Y1 Z6 J" W* A6 r/ V! @' {
  13.         h3{& @, C: Q4 H" d7 \  L
  14.                 font-size:60px;  O/ G' _. @' }2 T
  15.                 color:#eee;% {, r  `  M& W' j
  16.                 text-align:center;4 w7 a, y" p9 _* H# M+ B/ g$ |
  17.                 padding-top:30px;
    ' v( s6 F" T7 k$ `5 M. r
  18.                 font-weight:normal;  N/ S6 ~1 ]2 H0 J
  19.         }
    9 q- [, ]2 i) k0 ?& y! l7 y
  20. </style>! U) M) S7 K# q" t, A' K! T
  21. </head>
    + h& {. b. o( f5 {

  22. 4 s. g* L  i8 ^9 r
  23. <body>
    & _& j, o$ Q5 I3 M
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>
    , y4 ^6 g/ [3 \
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>
    8 j, {" |# m& e1 n# L: @
  26. <canvas width="400" id="canvas2" height="400" ></canvas>
    & j% Z" Z1 `3 M/ S/ ~$ v6 S! z. z. i- M
  27. <script>
      j, K6 ?0 W/ d6 S
  28. var video=document.getElementById('video');
    ! v: A% L5 p5 b( M
  29. var canvas=document.getElementById('canvas');+ J& z3 P. R, x8 K: M+ W
  30. var canvas2=document.getElementById('canvas2');
    ) X$ ~0 ^0 N/ ~; I0 e8 l3 \
  31. var context=canvas.getContext('2d');
    9 U1 b) O0 f" q( b% c' x
  32. var context2=canvas2.getContext('2d');
    - u0 s2 w& `# }5 s. \/ v
  33. function draw(){
    # y, }; d) T$ E- x3 P( l/ G! l' o
  34.         context.drawImage(video,0,0,400,400);$ N) Q- \+ }1 W& E, i
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));, K0 M9 k/ s3 d! i5 l8 X9 s
  36.         setTimeout(draw,800);
    4 Z3 k. t- x; D7 T2 [
  37. }* e. m7 b, P* Z- u

  38. / E( a* }. y' g
  39. //客户端跟服务端通讯
    # H% y2 m9 y$ d- v  g  n4 _
  40. if (window.MozWebSocket)
    , h' Z8 X& o$ Y7 i0 V' f) z
  41. {5 V/ a, _. g* c7 @7 ^% f
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");: ]- }8 i' j9 U4 ~( t2 B
  43. } else
    3 @6 k/ U) Z' m" o3 m% `' w  E
  44. {
    " |# e2 V8 Z) C# _  S
  45.         ws = new WebSocket("ws://182.61.42.187:9501");4 X" }9 C# Q7 ^4 C- E! t' S! m2 k
  46. }
    6 G; ^: O5 j4 J5 ^" N# S# D+ f
  47. 4 y' U- C8 l! @1 f/ W/ f/ H
  48. ws.onopen=function(event){& G1 u: \) Y5 _! N4 g
  49.         alert('连接成功');0 p% u- D- G- f6 D; ~4 l) I
  50.         ws.binaryType = 'arraybuffer';
    # k7 g9 ]- l/ f" T: H4 T
  51.         draw();
    7 ~" d, ?* L' R
  52. }
    " x5 h3 i# F1 y* Q1 I9 B. Q
  53. ws.onmessage=function(event){# D4 m! |( k, U8 t9 ?
  54.         //alert(event.data);0 R3 }3 r1 l7 K. R# w
  55.         //ws.send(event.data+"client");- U% a9 q0 c% l  T( [9 u. }- N
  56.         qrCodeImg = new Image();
    + a' {* h# L5 f# j" d) n
  57.         qrCodeImg.src = event.data;* K5 Y6 A$ B% z) M' }0 Y% o
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);/ }( t& f% ~, g8 l$ V) i
  59.         
      k# E0 f- h8 ^0 D! H8 s
  60. }2 e2 a0 m) \4 _" O" \
  61. ws.onclose=function(event){
    # Q1 Z" t0 M6 n
  62.         alert('close');8 b# w( U# K' m
  63. }
    1 a+ F% g8 H) B) p& F
  64. ws.onerror=function(event){6 Z8 l1 E" R' n2 }  h! H, J
  65.         alert('error');
    ; T# |. ^5 a6 V2 J
  66. }
    8 [# |7 v+ C' v' v1 |, M. T
  67. //video,标签模拟视频7 v/ b/ b$ s# w  I6 ~3 |9 u! c
  68. ! u: s1 B8 f2 B: R! m
  69. </script>
    / S/ M$ Z2 l+ S5 `% `3 U
  70. </body>, c0 M* u+ |/ q$ m# x5 S7 [3 \$ z
  71. </html>) \" Y$ A& u1 m3 U
  72. ( K0 Y3 I5 [0 L. V& S
复制代码
客户端:
  Y6 x2 Q' ^* o7 w0 d  R! K9 z, _3 V
  1. <html>1 A0 d$ N2 R3 @$ x0 i- q9 P) h
  2. <head>
    . s' q5 b/ O5 G- y5 n9 R
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">. z0 e& L8 X9 J, Z6 E' i
  4. <title>客户端直播页面</title>0 t( x# q, O9 I: j% C
  5. </head>
      Z  P, g/ h& ]3 H* C
  6. <body>9 m6 ~" p  a# B7 K# B6 d6 L
  7. <img id="receiver" style="width:720px;height:480px">
    * C9 z  Y6 ~4 B

  8. % l7 u1 u' w1 S* r# n9 m
  9. <script type="text/javascript" charset="utf-8">4 ?  w4 ]+ ^, k7 q0 d+ I1 I+ {
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");2 x' U/ y5 A' Y+ W: k8 y  a
  11. var image = document.getElementById('receiver');  t9 v$ E& J! U( C5 e
  12. receiver_socket.onmessage = function(data) {
    6 w1 [& R; A/ k
  13.         console.log(data.data);8 [$ l3 O9 d) u! w
  14.         image.src = data.data;
    + m, a' ^  Y7 [5 {6 X. ~8 ^
  15. }0 I: p2 C" L$ X' D2 u
  16. </script>3 m3 x& k3 E" ~1 E5 d
  17. </body>
    . R9 I5 Y  ?$ h/ y- j
  18. </html>
    7 O& |$ h" z: A+ e, @% f1 o

  19. & u6 ~' ^7 F# x0 z; y9 D" o8 a
复制代码
& t7 F- }3 E( k6 w

3 P# M' P0 J6 e7 a* i
; ]$ P% r1 v) ?( _& V2 ?
4 b$ U1 c! w9 ]2 Z+ z  n  u' F
! N9 q& S# B7 L2 Y. s- d5 p
4 |- V$ {7 a3 g/ J4 ~4 O) [) G
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-17 16:09 , Processed in 0.069922 second(s), 20 queries .

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