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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码0 c+ W2 V& s$ `; `3 v2 l
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);, g& d0 N8 {' F5 J$ w% _& O: d
  2. $client=array();3 I2 c, V4 g# a5 L3 l$ G7 i
  3. $serv->on("open",function($serv,$req)use($client){9 x* C# M6 O. r4 M& N' Y
  4.         //echo 'connect'.$req->fd;
    : F) ?" |; ?! g' J
  5.         $client[]=$req;
    , w  s: \: O+ Z! j* e
  6.         //var_dump($client);
    # f) i9 N3 g  A, ?# n
  7.         $serv->push($req->fd,'aa');! \' `8 ?0 l( C1 ]4 d4 |! z
  8. });
    / X) B/ f5 I- e5 }1 l" s9 v2 H
  9. 2 D: f% U# T, D9 x5 f2 D! }
  10. $serv->on("message",function($serv,$frame)use ($client){5 B6 X1 R6 x: p  }* f& i1 j
  11.         /*var_dump($frame->data);
    ' U5 |; k4 C! A" {) w
  12.         foreach($client as $key =>$val){6 q2 w3 B: ]* ^& D5 |- l- v
  13.                 $serv->push($val->fd,'aa');
    * T( n1 x- o0 t) G
  14.         }*/
    ! A& Y/ C) y! R1 n$ G
  15.         $client=$serv->connection_list();
    8 a& i* N7 O1 a
  16.         var_dump($client);" |, v' K0 `8 p% f5 W! V$ J
  17.         foreach($client as $key =>$val){) {! V9 o' h7 a& ]
  18.                 if($val!=$frame->fd){
    . y2 L" a) k9 t0 j7 x
  19.                         $serv->push($val,$frame->data);# [+ y% X. Q, x+ P6 w
  20.                 }4 \: M) j+ t4 R4 L, B0 ?! `1 l0 {
  21.         }
      _0 D4 ]8 ?, j2 I# s
  22.         
    + R7 K- y% x& H9 I. f
  23. });3 ~  d: O  u# c1 q0 w5 l0 s
  24. 0 k0 ^* ?3 l7 F3 a. x* h
  25. $serv->on("close",function($serv,$fd){# S0 o. S3 w; \; O5 b
  26.         echo 'close';; ]' |6 v' m) ]
  27. });
    9 u! Y3 [  k% \) k8 _3 P1 u# g1 e

  28. ) x$ c( T( k3 ^6 @
  29. $serv->start();
    0 W' V/ B( M3 E3 f. ~2 i5 ?

  30. * T3 q7 g  p5 t/ w
复制代码
主播客户端  a5 |' z! s! g) T" h  o7 P
  1. <!doctype html>
    3 k% H; f- V; r& ^. l
  2. <html>
    ( O8 e" W  L. }8 K+ `" X8 g0 K
  3. <head>( J9 y! e, @% \9 b- D3 O
  4. <meta charset="utf-8">
    * E: P  b% ?, J; o: u: x& l  D2 y- Z0 `
  5. & o6 ?: I6 h, g2 I6 z
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">  s8 o( \, w+ j
  7. <title>404</title>
    4 |6 B4 z0 d$ x1 G' \; a
  8. <style>
    , [! I" _# E+ k. A& K
  9.         body{, Z- ~8 o- g- J' k$ ^4 f. o
  10.                 background-color:#444;3 [% v  o8 @: O" P. x$ O
  11.                 font-size:14px;
      d* g/ Q3 o8 \6 \9 e1 @4 Y. ?
  12.         }" Z6 m4 K. r5 w$ J/ L0 m( f4 r
  13.         h3{2 [% G; p: h  O: |: c, \: c
  14.                 font-size:60px;
    & k/ G: o* `0 I& v6 E1 o9 ^- x
  15.                 color:#eee;3 o1 Z, S; o: T: P6 {  \* ]! ?
  16.                 text-align:center;
    " R  k2 l( g- Y. H5 |, @
  17.                 padding-top:30px;
    3 K7 d/ d" I+ F. B" V
  18.                 font-weight:normal;; ~1 ~. n+ _, i9 ?
  19.         }4 A/ ?6 j9 s+ Z/ a, q$ R- d
  20. </style>
    ' I2 H- `; `8 N+ X! d  C/ v
  21. </head>& N4 D3 G: V; C6 M! y

  22. 6 M8 V% ~) b  S& ^4 [8 B. A7 c
  23. <body>0 p' _3 s5 V) P0 {$ }( X
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>4 D- O5 d, ^( s* E$ r1 I. J
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>
    ' Q, [! U  F: X+ l
  26. <canvas width="400" id="canvas2" height="400" ></canvas>
    6 p" I1 _& [# v4 b6 o4 ^/ d7 @
  27. <script>
    , `6 p) i, C1 T% X
  28. var video=document.getElementById('video');) j: Z5 l8 z" p5 l2 [
  29. var canvas=document.getElementById('canvas');
    8 k7 y+ H( Z  b! V/ f  m
  30. var canvas2=document.getElementById('canvas2');
    $ _- X) h3 _4 z+ M! l9 R8 o2 v
  31. var context=canvas.getContext('2d');
    8 y  r. a" g- R6 }+ g- \
  32. var context2=canvas2.getContext('2d');' q4 w6 k; a! h% h: R. A3 _' K
  33. function draw(){
    , `; F# B3 _2 @# R1 j
  34.         context.drawImage(video,0,0,400,400);% w! @2 H  f& e0 |& r3 Y
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
    6 T+ z  Y; K  }: e. v, S: m! y
  36.         setTimeout(draw,800);! v& `& w* E- B8 x) }1 W9 [! l
  37. }
    , b- E, G( a6 e  c% O

  38. 9 y; W6 R9 ]  h2 ~0 p  R! e
  39. //客户端跟服务端通讯
    9 d' |( O8 ^3 m& T: w
  40. if (window.MozWebSocket)
    - _% ]! X3 R: i8 W/ ~9 o/ o
  41. {
    5 p' T# @3 y' ?" }2 S0 r) R  b
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");
    ; w- E2 Z2 ^; C4 S, J* k- f: L
  43. } else% K8 F1 ~+ @$ o/ M
  44. {
    5 z& O! O' P# T
  45.         ws = new WebSocket("ws://182.61.42.187:9501");
    . D- k" L$ e, N0 ^5 O" q
  46. }
    : f0 p! Q/ C: `3 `/ R# P
  47. ) e6 f4 R4 e. C! W& _& m
  48. ws.onopen=function(event){
    / c0 o& O  m) [; e
  49.         alert('连接成功');
    $ n+ s) `' H  C0 n/ u
  50.         ws.binaryType = 'arraybuffer';0 D: @' F3 q2 b% j9 a  }
  51.         draw();+ [6 A2 w& |1 T
  52. }
    : |/ L2 a: l, I7 M, S- p# z# @" }
  53. ws.onmessage=function(event){
    6 c9 W5 v$ I. P- r
  54.         //alert(event.data);3 X- B" o8 B6 k" v" ]' p- ?
  55.         //ws.send(event.data+"client");
    5 ]. @: T/ H4 H; b
  56.         qrCodeImg = new Image();
    ) A2 X1 c* _% q5 ?1 r' h4 P& q
  57.         qrCodeImg.src = event.data;
    # Y1 r6 N5 k7 c$ d* H5 W
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);* `# l$ l# [2 Q7 W' b
  59.         
    6 t2 J% ]" x9 [9 C2 ?
  60. }8 ]4 \6 @0 Q" E) u
  61. ws.onclose=function(event){( `! O8 k. W, |( d) e
  62.         alert('close');
    ( p* W; d% W- `& O) j9 _* [* l
  63. }5 G( H' ?1 w( d. T
  64. ws.onerror=function(event){' H( _5 P; W; K; U  M0 Z
  65.         alert('error');9 S" @2 n5 M- r+ Q$ e
  66. }
    7 C9 R8 @; E1 b; r; N! v# D+ i
  67. //video,标签模拟视频
    . ~/ p9 B5 Q0 M" [0 O

  68. 0 i1 T  O6 X' M8 a, ^. k+ Z) Q
  69. </script>
    2 ]) d; }0 E1 p* Q3 ^  K
  70. </body>) {2 m$ q, l# |# \
  71. </html>2 B' t' y3 k5 T
  72. ! t9 Z  U. [0 f
复制代码
客户端:6 u3 e6 {! J1 {
  1. <html>
    $ Y5 `' K% L1 U& z9 X7 d* e
  2. <head>1 ~* ~3 T) p4 {
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">5 V9 C5 {6 N! F" h, i! U- L
  4. <title>客户端直播页面</title>
    ( H0 X; p  \0 @% `8 Z
  5. </head>
    # H( m. \4 F! X, d8 Y& M
  6. <body>
    4 n% \* ?+ i3 Y& R* P( X6 t& D
  7. <img id="receiver" style="width:720px;height:480px">
    ) g8 B0 Y3 O9 p, k) j. |1 I. q4 ~

  8. $ n* ]- b$ s! o
  9. <script type="text/javascript" charset="utf-8">2 V5 q1 ^$ {3 e/ F
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");# W  m: d# O: N; j$ R  d
  11. var image = document.getElementById('receiver');, {4 _& K' y, O- D  U& @
  12. receiver_socket.onmessage = function(data) {9 l! @: R7 L% X
  13.         console.log(data.data);1 Z+ d( D8 A# X% H- Q0 |% l
  14.         image.src = data.data;
    $ l8 D6 N: R  _* V+ B$ J
  15. }
      U( W7 W, M1 T! [$ N- |1 g4 S; ^
  16. </script>
    9 T( G$ u1 I" Z- i+ O" [
  17. </body>
    . w* @; ]: R: g4 t7 b
  18. </html>
    & D3 l# I+ ?. e% Y; o* d
  19. - Y8 F2 E9 b" o
复制代码

# k- @! Q4 m' E) s
# ?- m! J. R% e
1 R. E( Z1 c! H1 r' t7 i4 c* o1 q4 q% ]* q: v! ~& P1 Y+ t' K$ L0 ]

  x/ p1 F( {8 I. S1 E; R% w0 Y9 g
1 [2 ^- ?6 {/ G+ x0 @
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-20 06:17 , Processed in 0.105925 second(s), 19 queries .

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