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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15300|回复: 0

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

[复制链接]
发表于 2020-3-29 18:53:53 | 显示全部楼层 |阅读模式
服务器代码" e. j. b# [* |4 H: e9 e0 `1 f1 d
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);. X. n$ W. }8 _1 Q: \/ b
  2. $client=array();& H( \4 a% L9 `0 Z" ^1 g
  3. $serv->on("open",function($serv,$req)use($client){, e4 J/ ], r% C5 @! o5 w
  4.         //echo 'connect'.$req->fd;
    & b5 Y0 `' q) a  e; N% o- ^
  5.         $client[]=$req;
    # o9 P* A  g) ~  P% s; n( x$ d
  6.         //var_dump($client);
    # o% v, U4 e9 J6 T
  7.         $serv->push($req->fd,'aa');
    3 v8 ^% {3 c" T& D
  8. });
    . B' A* G+ U+ O

  9. 0 [' G: c8 k  i( _: f& p+ G
  10. $serv->on("message",function($serv,$frame)use ($client){
    7 ?! i; B+ P" o2 y" z7 ~3 X
  11.         /*var_dump($frame->data);
    # i: k0 m5 e+ A' \9 a0 Q; ~, i
  12.         foreach($client as $key =>$val){; G9 y# C: @% S. m# c
  13.                 $serv->push($val->fd,'aa');
    - {( w7 L$ r0 Q0 A$ `
  14.         }*/
    0 `5 j' Z2 Z5 \7 O) }& i; k5 j
  15.         $client=$serv->connection_list();
    5 k- r% U7 h! r$ `. s
  16.         var_dump($client);
    , G0 Q! I+ C. P/ R9 s, n* J
  17.         foreach($client as $key =>$val){
    , }2 ^7 Q3 e0 h7 ^8 t6 A  |
  18.                 if($val!=$frame->fd){! O- C- q$ j% t4 \) c" K! V
  19.                         $serv->push($val,$frame->data);
    ' u: N! n( ?; e
  20.                 }5 y* j( w0 V$ n, m. V; w
  21.         }" v3 Q' Q* D, S  M) C0 E* Y1 P
  22.         
    ! b4 e+ A1 n- S. I
  23. });  O9 x7 u! |& ?' F
  24. $ a! n" i1 G5 M$ d2 I+ `0 r
  25. $serv->on("close",function($serv,$fd){
    6 D# {8 _2 h- w8 _/ a6 |; ?
  26.         echo 'close';
    ! o, G- y! A: _& X
  27. });/ Z+ N2 y7 Z7 @
  28. 3 ?0 h. e8 D$ j& y5 b
  29. $serv->start();
    $ P/ n( t' o' X; M1 Z
  30. 6 y$ D% ^, R  ?  ~
复制代码
主播客户端
2 g! [; {! k7 M7 q. r7 S
  1. <!doctype html>
    * w. S% `2 f% r% c4 r, S8 W
  2. <html>
    8 b3 n5 ]& h3 n( G' {
  3. <head>4 J; z5 h9 U% \& v% W! j
  4. <meta charset="utf-8">
    ' a( ]1 G! \- I2 q7 F3 y3 K) E
  5. 0 @8 G' F8 y/ A
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">6 ]1 {/ n4 y0 C: \8 N: ]
  7. <title>404</title>( h; P; Y8 S( B) N( L3 j* k- {
  8. <style>; h( t! p7 t/ r2 }- @( M, y7 p: X
  9.         body{- R6 p: d  C( Q: u0 F- Z2 B
  10.                 background-color:#444;
    ! Q( r, e% s5 r2 ^- [
  11.                 font-size:14px;
    8 d% q6 g% M6 X$ l; A
  12.         }
    7 f! v: p, u- l  `  a( ]
  13.         h3{
    / b5 P2 U% M6 N6 R3 s1 @
  14.                 font-size:60px;
    # l8 b: A% \: F0 E5 M( b9 l* b$ D
  15.                 color:#eee;6 L/ G3 U$ V5 I+ ~! m  F2 V- t
  16.                 text-align:center;2 T$ {- Z/ r! o0 U  @2 ^: ]& n
  17.                 padding-top:30px;
    " U7 _3 Y2 M- R, j. w) A1 {5 l
  18.                 font-weight:normal;  t& R* B! _: R9 t
  19.         }+ `: j+ j  j7 u1 f% n* L# l8 K
  20. </style>
    " g( T1 X! d; e# c& ^6 H- V
  21. </head>
    / B; h: z" d( }1 e- I* |

  22. 4 j8 \+ ?9 i) S" Q4 e$ D  q/ h# c
  23. <body>: a  \. j' c0 M
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>- e0 Y% m& x+ i% l8 i
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>
    3 d9 M9 w. J: d' [( j* A
  26. <canvas width="400" id="canvas2" height="400" ></canvas>
    9 f6 ?- |& O# ~% V, w, f3 \. V0 _
  27. <script>
    ) G+ b6 C$ v3 d& D/ ~/ r- F. J
  28. var video=document.getElementById('video');  ?0 O# ]4 t) t, l- T
  29. var canvas=document.getElementById('canvas');
    " }8 b% ~8 K  y
  30. var canvas2=document.getElementById('canvas2');
    8 S+ ?# F* `% k' ~0 Q
  31. var context=canvas.getContext('2d');
    + v! c, N1 P5 |5 N8 P
  32. var context2=canvas2.getContext('2d');& z1 a5 x5 X& S2 M. K$ ~' ^
  33. function draw(){
    1 s; r- p$ M. T$ F8 J( v
  34.         context.drawImage(video,0,0,400,400);6 O$ b  L& Y; U, b; x& Y+ [
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
    ! u- q$ e0 E& D5 H
  36.         setTimeout(draw,800);) Z/ k' P/ f2 K% B
  37. }
    4 ]# S# o$ j5 Z; m+ z

  38. 9 M* e2 T( b- @
  39. //客户端跟服务端通讯
    9 \$ \; s; ~8 M5 U" g; H. U6 a
  40. if (window.MozWebSocket)
    " ]4 o$ u% d; q$ `" l: [
  41. {
    8 h4 [* e8 J' }3 `6 k& ]- F
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");
    , L: r8 w& ^/ |5 n- |
  43. } else
    ! b% A& f8 j/ d; F
  44. {
    ( G/ |0 z- U' O
  45.         ws = new WebSocket("ws://182.61.42.187:9501");7 S& \9 i% e: H! C$ f$ e9 R
  46. }  F. B2 J. D6 t: d. H  k
  47. 2 L) E2 w$ X" j7 E3 M$ ]
  48. ws.onopen=function(event){
    , o. T5 }  y9 G6 H
  49.         alert('连接成功');+ {4 ~2 w& ]  A
  50.         ws.binaryType = 'arraybuffer';0 F" {. M( _5 |, c% ~. v& y& l3 T
  51.         draw();* H! ~1 g9 w. s- d" J1 X* t
  52. }% B7 m8 w! F* I. {! e  J
  53. ws.onmessage=function(event){
    3 o  \* ~/ F8 Q- n8 _5 l# O+ d6 q
  54.         //alert(event.data);. u) n" X. @% b; x% m
  55.         //ws.send(event.data+"client");
    & Z% k( I2 a# }. j3 e
  56.         qrCodeImg = new Image();' k  y, P* T6 X) L% w$ J
  57.         qrCodeImg.src = event.data;
    9 U3 N! Y- B4 O0 D
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);  ^; \/ R7 B4 D2 t6 s
  59.         
    7 d9 Y2 y$ }: D. i/ t) q* H
  60. }. ^; X1 R8 y" P9 z/ ?5 `
  61. ws.onclose=function(event){
    % ~! J! x9 _, U
  62.         alert('close');
    $ a; G! M5 ^1 m  d
  63. }/ N) H5 y, `& h0 q
  64. ws.onerror=function(event){
    8 B+ X. k/ p6 @5 `( }/ P
  65.         alert('error');; [% [/ O& e* d- Y! |! j
  66. }
    ( A* [7 ]2 m4 d: v) _4 B" x
  67. //video,标签模拟视频
    0 G5 F# T& m) I" d0 i- l1 r* k
  68. 8 M! Z. g# ^& N3 A" p" s% A% i* {
  69. </script>1 `& Y& ~8 u% ^; Y  V+ [
  70. </body>
    2 i1 [3 Y0 Q3 M1 ], I! d. X' O
  71. </html>
    + c% e5 J" d, p3 `3 S9 N

  72. 6 p3 ~1 k* J2 M& x0 \4 h+ S* K
复制代码
客户端:/ l; S' C6 m1 k4 ^0 G
  1. <html>9 {% [+ |8 C$ q  L5 R
  2. <head>$ f8 w# B3 U/ a; B" J9 m3 y& G+ K2 M
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">1 a9 P! `* x$ i6 z0 m
  4. <title>客户端直播页面</title>
    $ \6 s. f5 s- k& a' T
  5. </head>% m+ x& m" F: y+ c# w, @! y/ p
  6. <body>
    " O0 J# Q" v6 x7 @! b  M8 d/ ^
  7. <img id="receiver" style="width:720px;height:480px">7 u, F& n. p; V) w% O7 Y

  8. ! y& y! S7 B' w# o! v8 p8 |7 u
  9. <script type="text/javascript" charset="utf-8">" k8 U* o$ w& [2 b* F5 A) m+ d
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");
    2 C# @* [" g# o/ T
  11. var image = document.getElementById('receiver');
    8 K$ q2 Q7 s9 _( n- Y5 ^! B, V
  12. receiver_socket.onmessage = function(data) {
    ! L% V) H0 \3 d+ R- b* ]) k# u
  13.         console.log(data.data);
    ; i( D3 q* j6 n# F: B; |9 w
  14.         image.src = data.data;7 W9 @' t/ y1 m) ^2 b' h. l$ Z
  15. }
    7 ~' @& @6 a) `& n6 q3 z
  16. </script>- e5 m7 R4 |2 z9 S3 I- Q( ]
  17. </body>1 I3 d8 N$ y7 S# i1 c/ M! i2 q: B
  18. </html>
    + @! a  F- [1 \! h

  19. + w% h$ P" i& |
复制代码
6 v8 Z% |2 T" ?( h  m% F
1 \% G- B$ s! I
  c& {8 M6 C" P" K- w  c+ r

2 R" W5 J" W2 I/ U: ?# F% @+ l6 U8 Z/ @, |! K! C
! K! Q: ^- D9 B! z  l
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-9-13 04:56 , Processed in 0.069797 second(s), 20 queries .

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