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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
服务器代码( q4 t1 N, f, M
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);
    4 @; |0 W7 [0 a5 ], u  c" D' z2 b1 |
  2. $client=array();! o3 [# Z0 v2 M: }3 G5 p  P* r9 ~
  3. $serv->on("open",function($serv,$req)use($client){- ?# y& x: f( ?4 h3 w
  4.         //echo 'connect'.$req->fd;& ~. d( q$ |! Z1 j
  5.         $client[]=$req;
    7 S7 }3 U9 G  e
  6.         //var_dump($client);6 ]! {0 k+ X  y# `" Y9 ]/ I* \# Q
  7.         $serv->push($req->fd,'aa');+ ]& X; a2 p& B$ V
  8. });
    , M2 z: D9 A6 i

  9.   G4 S1 M, a1 H. Z7 h
  10. $serv->on("message",function($serv,$frame)use ($client){1 p1 Y! K: [0 k8 S/ D  _
  11.         /*var_dump($frame->data);
    ' ~0 S. i3 O# O8 G! P* Z. g1 |+ w
  12.         foreach($client as $key =>$val){& {) f& n9 i+ t
  13.                 $serv->push($val->fd,'aa');, K& e; b5 o; G) W0 Y
  14.         }*/
    5 ?" J, G% t, l' i; W2 o: P
  15.         $client=$serv->connection_list();' @! y+ u' ^; k
  16.         var_dump($client);: _/ e  j  g7 a  o
  17.         foreach($client as $key =>$val){+ C7 {* P/ X# C, T) ~# S
  18.                 if($val!=$frame->fd){
    5 Q4 d( O+ M& |( B' C$ ]
  19.                         $serv->push($val,$frame->data);# C; n$ }! ~+ t$ S3 f
  20.                 }
    1 g: b$ z5 b3 \1 T7 a
  21.         }/ s6 Q# J9 }" k0 `: ~9 ]" P
  22.         
    6 V; z# w4 O% ^' l+ T; s, m  O
  23. });2 g8 L7 @: {+ ?& D+ j8 G

  24. & T* g) \, Y/ |, \
  25. $serv->on("close",function($serv,$fd){
    + [6 R0 B$ H# U8 a' O! F+ H8 i
  26.         echo 'close';
    ' O* G( s1 ^2 o) `* G& Y4 f# [
  27. });
    , E* C! B! h7 Q# W
  28. ! ^9 B& u; w& @. V/ w
  29. $serv->start();
    : e4 I9 w' g  S# v  z
  30. 2 f. ?  W* h- g
复制代码
主播客户端* f+ D+ }3 i8 u- o* ^  C) n; ]
  1. <!doctype html>
    1 M  |1 k9 ^9 ~
  2. <html># y! Q2 t4 `5 {1 f/ \, y$ r
  3. <head>8 s1 R0 u: y+ W0 ]& @
  4. <meta charset="utf-8">7 V; O1 N, z/ s/ G

  5. + H$ m( O$ @" z7 ^
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    0 Z" h  `0 Z; ^' d1 ~
  7. <title>404</title>
    * Q; j) X. ]9 k
  8. <style>
    + H  _8 v: I& Z# _7 o. d
  9.         body{( H" A0 k; w4 |0 J- k  g
  10.                 background-color:#444;" ?: Q, R: ?8 B  r
  11.                 font-size:14px;' K# H1 n+ _" V+ \! I" h2 k
  12.         }6 `2 \; [& M5 W* d5 A; [
  13.         h3{) M; S- ]  B' N0 A
  14.                 font-size:60px;
    4 ]( Y0 I& h4 u4 V; f
  15.                 color:#eee;
    , i4 h6 g  _$ A1 a/ m3 v
  16.                 text-align:center;
    ( |% L1 x$ ]" L
  17.                 padding-top:30px;% Y7 l. `8 C* m
  18.                 font-weight:normal;( m( Z8 w# R0 @3 w
  19.         }
    2 I3 T2 n! }, x, k0 {1 Q' r- ^
  20. </style>
    - I& g8 c/ |& B& T
  21. </head>" V* @6 B  e* k! k

  22.   h) l2 R; y: o2 T2 y, e
  23. <body>6 d! s0 U% U  |9 T
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>6 n0 Y3 Q+ O0 J( q4 h1 o& K
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>; `  \) p) \& U3 Y* w! l
  26. <canvas width="400" id="canvas2" height="400" ></canvas>
    , Q& A  ~% d$ k  ?
  27. <script>; c" e9 R# T* ], u3 P
  28. var video=document.getElementById('video');
    - ^8 x7 l9 c: V8 U( j4 [+ ~
  29. var canvas=document.getElementById('canvas');3 F; ^/ K7 |$ I2 S4 O4 n
  30. var canvas2=document.getElementById('canvas2');
    6 l, s+ g' l- X2 k
  31. var context=canvas.getContext('2d');( r) _5 U$ j" x' C% c) r3 V
  32. var context2=canvas2.getContext('2d');( [5 `5 a7 p- R$ H, Y: _& Y
  33. function draw(){! }+ D, D( M/ ^: I6 b1 T
  34.         context.drawImage(video,0,0,400,400);
    4 y! ]1 o  v8 i; C6 Z( x- @1 c
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));3 [6 K6 I' l* u4 E
  36.         setTimeout(draw,800);( S& n" ~/ h3 M- J; F
  37. }
    4 @9 {: E7 d7 ^- ?

  38. * D- K7 A7 x4 T0 v
  39. //客户端跟服务端通讯/ A8 @& ^8 G0 V
  40. if (window.MozWebSocket)
    1 x9 c9 o" Q* u# Y" V) y2 e( `
  41. {2 c) l. l0 Y. ^! `8 P  w
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");1 [3 S# f5 ?& T+ _. G# S7 W# P" O; L
  43. } else
      X$ J( D* y$ G- o$ o& A- u
  44. {: O( H8 b* q" `( w
  45.         ws = new WebSocket("ws://182.61.42.187:9501");( g4 |( L4 }, B& H
  46. }
    ; ^5 O  C8 A* M5 C" I
  47. ) _- K* C- O3 I! i$ t
  48. ws.onopen=function(event){
    7 N& Z2 S& N" U4 J/ |
  49.         alert('连接成功');2 s* s% e! t) S- `
  50.         ws.binaryType = 'arraybuffer';" J1 n  z/ h/ g7 Z8 m
  51.         draw();
    ' Q5 ]' f4 E& I
  52. }; B: g6 b5 p; E& z! }
  53. ws.onmessage=function(event){
      E1 ]  i  \1 N% @& b% Z
  54.         //alert(event.data);3 \+ @/ E; M  }  @
  55.         //ws.send(event.data+"client");
    & \+ j7 Q1 ^3 v/ A& z9 P
  56.         qrCodeImg = new Image();! J" _% c0 T  B  v! X
  57.         qrCodeImg.src = event.data;
    " g4 K% t& d4 a9 [1 {: \  f. N
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);3 A1 M% F! W; P8 E8 C9 N+ O1 R
  59.         " B; w* Q% u8 _% J: c/ z+ C% l2 y
  60. }4 X1 B) j/ X/ i& i5 h
  61. ws.onclose=function(event){
    ' U+ T+ s( \3 h1 f
  62.         alert('close');
    * L  G- _# y( P+ y
  63. }/ V, x  G' P7 ^7 T% G' \# `; v
  64. ws.onerror=function(event){+ A$ ]3 B5 j# @* l$ o( X8 I" w
  65.         alert('error');
      l0 @9 w3 D- e, |9 b$ X
  66. }; Q" e2 p- P& J! u( G: `
  67. //video,标签模拟视频
    + w. w' E! w; t* j. O/ R- D
  68. ) F. X) D! p; p9 z  B8 J  B
  69. </script>- W# L. s  }2 X3 d
  70. </body>
    $ f7 B3 ^: m. Y7 m
  71. </html>) m9 z3 Q" z" P% q: H9 i

  72. * m3 i8 M+ Y& p, K1 k' k8 Z5 Q
复制代码
客户端:- \' @/ }9 L. g* B9 I+ k
  1. <html>  G/ e9 e$ S' @) I* I* s. i8 `7 ^
  2. <head># `. U3 d6 h! z" ]+ [. {; B
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">1 P# `7 L( `4 v" N
  4. <title>客户端直播页面</title>
    4 K" e' [# j# w/ r  U
  5. </head>& {3 k0 K5 q; H0 T4 @1 p* l; @
  6. <body>; x# z2 Z1 U" J* I+ z) v
  7. <img id="receiver" style="width:720px;height:480px">3 B3 z& U2 K8 L, b0 j' \& Y

  8. % @* Y3 b5 ?& N1 v7 g* ^
  9. <script type="text/javascript" charset="utf-8">
    ; d6 `0 R3 ?7 d
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");
    % s. M0 |% ~9 }* A
  11. var image = document.getElementById('receiver');4 W7 {1 k. [: ~3 O  ?
  12. receiver_socket.onmessage = function(data) {5 y# k; o7 [4 R  @
  13.         console.log(data.data);
    % L/ v1 N; O7 t+ j  ?2 c
  14.         image.src = data.data;
    . s) @( h" o- o: z
  15. }5 j' B6 D' M+ }' X: f
  16. </script>
    & ~( `) ~9 n1 \% n5 U; ?
  17. </body>0 G! R% s" ]8 j; g+ @1 y5 K# r/ a
  18. </html>
    ' T- C: ~" [0 x6 P
  19. 6 R. z1 Q- Q- P* m4 @6 V2 q: Z
复制代码

' \# Z  i3 X% y/ Q9 t+ K3 z. P
- ]3 q& E' l4 q3 F) D7 k" N
, i1 F9 T1 ]5 H( E4 r6 j. n
3 J1 c% s7 ?$ f$ I
6 h; O5 V' Y/ `
6 G) y) N+ r7 h# I, `9 X* i. l+ Y1 \) F
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-17 18:17 , Processed in 0.120152 second(s), 20 queries .

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