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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码( ^7 Z! n( J& J7 l- x
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);
    ; s5 g, [9 u$ M. Z
  2. $client=array();
    ( f7 C1 \4 ]9 U5 h' i0 A
  3. $serv->on("open",function($serv,$req)use($client){/ U$ Y6 ~. U4 z- o1 N9 N6 ^# P: V
  4.         //echo 'connect'.$req->fd;
    , i* `/ o: g  S/ s
  5.         $client[]=$req;7 x9 h/ ?, Y/ K" F. I
  6.         //var_dump($client);
    1 H1 k2 ]- U; ?% l" h
  7.         $serv->push($req->fd,'aa');5 C+ y3 O+ n3 v0 k% `; Q
  8. });" Y7 n0 r' l, N& O% s$ w/ G
  9. 9 K. R% ^/ z1 \  u) K
  10. $serv->on("message",function($serv,$frame)use ($client){
    + X, w0 t' X: x" D8 }6 E
  11.         /*var_dump($frame->data);
    0 [1 ^1 V; n" p1 |: |( c1 u. \
  12.         foreach($client as $key =>$val){1 i( M& n, L; S( I
  13.                 $serv->push($val->fd,'aa');1 H! Y2 l. i3 W$ o
  14.         }*/5 l" b% v; `6 l: n4 s7 s9 m: J) r  W
  15.         $client=$serv->connection_list();
    9 v6 t/ m. K3 f0 m( W: d9 M$ {
  16.         var_dump($client);2 |4 h% r% s6 f$ t4 G
  17.         foreach($client as $key =>$val){: p* y: v) g# K  A2 |* v( N
  18.                 if($val!=$frame->fd){6 s% B. e9 E! _
  19.                         $serv->push($val,$frame->data);8 F3 B/ j1 q9 {$ }
  20.                 }& B- Q9 E' o+ E) A" ~' v( L9 [
  21.         }9 n- o& l/ m; D7 g3 T
  22.         
    7 g/ z5 m  G! x# w
  23. });+ i* i% r8 \, x9 k# l

  24. 9 i# l* a1 s) V& x. x1 T; b
  25. $serv->on("close",function($serv,$fd){
    - ~  |+ B2 p# @4 H: t( ?
  26.         echo 'close';0 ~* f; D! x8 V0 d# i# P
  27. });8 U  w* V; _! z8 G

  28. ' ^, y* v' @' g
  29. $serv->start();! r+ a( k+ Z; o8 v; ^; G- X

  30. $ H' S) q( c: y, u" p8 w
复制代码
主播客户端1 k1 w! h; x, W2 x! y  o: b/ ~  U8 T/ N" L
  1. <!doctype html>1 H% \2 b( z2 z* A# s. ^
  2. <html>
    / C8 ]+ v. e0 ^. p5 O
  3. <head>
    $ z0 k6 s3 s, n
  4. <meta charset="utf-8">
    ) `- S5 R* J7 v- O- R" T* b

  5. 1 w2 h0 t0 X. g
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
      b7 o7 p) z9 A. m
  7. <title>404</title>
    / W2 P8 g/ H8 N+ m3 Q( d5 K
  8. <style>/ n( S- f/ F4 |; T' ~0 R1 ~9 e
  9.         body{
    ) {  h5 Z, o! B! {0 `; A* V
  10.                 background-color:#444;
    % ~( B7 @9 ^( Z: r0 @
  11.                 font-size:14px;
    & G" ]8 `0 q( f+ M; c
  12.         }
    $ A! i3 J7 ?) E) j
  13.         h3{+ z; r* E; w' B
  14.                 font-size:60px;  a  t$ g+ S$ N: I
  15.                 color:#eee;
    - @% C$ i5 L6 q8 ~$ _' y
  16.                 text-align:center;3 ]% }/ d5 m( f  ]8 ]5 _
  17.                 padding-top:30px;
    ! i+ C& {7 k0 y- w# Y
  18.                 font-weight:normal;/ |" G2 k" |: \( |/ w) c8 R
  19.         }
    , \; G. s& H) Q# v
  20. </style>/ Z$ f! F9 h5 ?# G8 @! \
  21. </head>0 _) b  }( Y7 n+ u# F2 j
  22.   u/ ~' h2 N' z2 j
  23. <body>1 _3 @, R' o$ K7 t
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>& P9 l5 U3 N: D9 A$ N4 q) r
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>7 ]1 G$ H, U8 u  X( |# S, c
  26. <canvas width="400" id="canvas2" height="400" ></canvas>0 _6 R) M( o7 E* |4 D
  27. <script>
    , ~" n) r/ i2 r
  28. var video=document.getElementById('video');" \2 }5 i# f/ M/ e6 x1 O/ E' |+ v
  29. var canvas=document.getElementById('canvas');
    5 W& H" F- P: A' l2 d' ?- c! g
  30. var canvas2=document.getElementById('canvas2');: H$ m/ [- g! \/ Q
  31. var context=canvas.getContext('2d');
      M: }; x$ N! ?$ `' q) F: W
  32. var context2=canvas2.getContext('2d');
      M) e4 z) w( p& i- V7 }; N7 j
  33. function draw(){
    ( k: }( W4 _3 v8 d4 }3 v
  34.         context.drawImage(video,0,0,400,400);- @8 {7 R8 f: _
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
    " ^- O: S" j, J2 Z+ |
  36.         setTimeout(draw,800);
    4 c8 F4 n# f, Q1 C% t6 _
  37. }
    : d2 y. G0 e+ d; H% p# G9 w; V
  38. 2 R( B" i) U* ~' c5 P& L
  39. //客户端跟服务端通讯
    , N7 c# N# K$ F! T4 k
  40. if (window.MozWebSocket)
    9 B9 Y  H9 k  l  h: p& q
  41. {
    " g) c) v7 u% l' A# E' I3 W
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");% W9 p& I" o5 `. b6 s/ `
  43. } else9 O2 ~0 G$ Q0 v6 x
  44. {) u2 L8 n3 ^/ f, w3 D+ _, D# f% g- a
  45.         ws = new WebSocket("ws://182.61.42.187:9501");
    : M. [* m& Y3 {; n+ C
  46. }
    # w: V6 y3 o4 T' a; z! ?  r

  47. 8 S! Z5 s; z- t$ I# |
  48. ws.onopen=function(event){
      x$ v% H0 l; @# Z6 t  y
  49.         alert('连接成功');" q3 m9 E+ v/ m9 j/ [) n
  50.         ws.binaryType = 'arraybuffer';$ _) ]4 z# w  \0 W* z  n# C
  51.         draw();* B+ h1 u  i  g8 H) }. L) Q
  52. }7 q% k- m, X" k: e2 |( W
  53. ws.onmessage=function(event){
    % u: ^; @/ g6 S- T) `/ D2 h  x
  54.         //alert(event.data);
    , s$ p, Y9 f( b9 r9 M; n
  55.         //ws.send(event.data+"client");* r) ~- s6 E$ C* ~7 P' n
  56.         qrCodeImg = new Image();
    7 h2 @+ _& W$ D' {
  57.         qrCodeImg.src = event.data;. k' N; O, E1 z) _/ ^$ H
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);7 o2 q2 g/ x8 a' ?$ k
  59.         
    8 C3 ~0 z! s4 @- z/ P
  60. }
    ( z3 F3 F  M+ N8 T, s9 H
  61. ws.onclose=function(event){
    8 r0 K% |- e. b
  62.         alert('close');2 t6 E# J" ^5 s; v2 F" p
  63. }
    2 N- c7 i4 i; S# Z
  64. ws.onerror=function(event){* s: T* s1 s( e# B9 h1 r9 z8 m; R
  65.         alert('error');
    4 @4 F( f; c( ]0 m$ ?6 C+ F
  66. }
    " P4 t; o, R  f
  67. //video,标签模拟视频/ p) l7 w. r$ `( d: l
  68. $ H$ }# t) C+ p  W- U
  69. </script>& o5 @3 N- n+ k5 g0 H. r
  70. </body>
    - [& I1 a- ]4 C& z2 K, T1 B+ ]7 Y1 f. H
  71. </html>, M+ i1 N) n. |# @( A8 ]

  72. ( \- L5 ]% B4 {7 ?; j( `3 T
复制代码
客户端:
1 d; `# K! [8 B% Y! l. l0 N; r
  1. <html>! H6 \/ W, m  A9 }1 c, Z3 @
  2. <head>, j+ o8 d! U/ d: f, s1 l" m5 A/ D* h
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">
    - x( [3 a0 t5 h9 R) U/ \% K
  4. <title>客户端直播页面</title>/ b" k" Z- T1 S
  5. </head>/ Y6 R9 F/ G! C- V& q/ t; a. x8 }
  6. <body>
    1 m8 x% G/ F& m1 i5 P. y
  7. <img id="receiver" style="width:720px;height:480px">
    , ]7 F% G3 w* E( d! f8 r

  8. : Q3 ~; x# x* q4 c& f- t! \
  9. <script type="text/javascript" charset="utf-8">, n1 @- c) E) S1 E* q- o
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");% G0 h( ~1 ~6 O0 G' o; Q: G( @
  11. var image = document.getElementById('receiver');
    # E5 P$ T* @* ~1 }1 D9 X7 V
  12. receiver_socket.onmessage = function(data) {
    $ w( p; E8 q. |; Y5 ?
  13.         console.log(data.data);3 W2 D& \& b- {
  14.         image.src = data.data;5 W0 B7 @! N7 E7 S3 K$ E
  15. }
    2 k3 N0 o& d: H3 K
  16. </script>/ D- |) g' G4 _# S, M! Z. D$ H9 Z" q
  17. </body>! O$ w1 f2 I; G, c8 ~- w
  18. </html>
    # A& Q) j  M& X8 k( a$ V

  19. 7 R2 I6 X: h! Y8 x5 o' A/ K  W& o9 `
复制代码
# F* L; }4 m7 m+ ^: o8 ?

& t/ Y9 c, |" n: b0 b1 y# h4 H9 m  e) R9 O- G8 @+ d

! e% C/ r6 |: U. M; N/ F. m$ [( k5 C+ s  n

  K* k" D, ~5 j( J; V
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-17 15:02 , Processed in 0.115036 second(s), 19 queries .

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