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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码9 h6 o; n2 P  P8 ]/ u2 j
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);- v3 \* V, Q- x, H, ?
  2. $client=array();3 B7 ?# t/ X' _1 ]  q/ B
  3. $serv->on("open",function($serv,$req)use($client){
    ( d3 z$ z- f" @' @3 u( H
  4.         //echo 'connect'.$req->fd;
    2 _" E# {! @( D9 Y" R
  5.         $client[]=$req;+ G5 \; D7 ^6 ]5 @, c& q6 q, i! e, q
  6.         //var_dump($client);
    ' B! H1 O6 @5 [0 H. k
  7.         $serv->push($req->fd,'aa');$ I; }1 f% @$ x( Q8 g% N/ y) }, [
  8. });8 b' G; M3 W1 d

  9. 1 F% K' E1 w5 m/ O0 x$ l
  10. $serv->on("message",function($serv,$frame)use ($client){5 V$ Y* t* E- \/ H+ o% F
  11.         /*var_dump($frame->data);7 x  ^  _8 I  p: {
  12.         foreach($client as $key =>$val){
    8 ?& l8 ^  T" P" u0 a
  13.                 $serv->push($val->fd,'aa');
    7 f/ s- t8 {% X  n( o! k
  14.         }*/+ S5 O% \; b, O. d: c- w% F
  15.         $client=$serv->connection_list();" a7 s- B# ]" q' g
  16.         var_dump($client);' Z, s3 T$ S  `& B6 G
  17.         foreach($client as $key =>$val){
    , U( W6 W- K; Y1 G8 Q3 Z, w9 U
  18.                 if($val!=$frame->fd){8 Y- Y& p7 {! F  L
  19.                         $serv->push($val,$frame->data);8 B; @* c# R) j% P; E  K# X- X
  20.                 }
    8 G! D% L: f2 |2 x: X" M5 K
  21.         }) m- H1 J7 u' r4 M/ \) S( C
  22.         3 X) f& V* h9 w7 h
  23. });
    # N2 q6 k# E8 n& J- ]+ h
  24. ! F- P0 K! n3 ?3 u
  25. $serv->on("close",function($serv,$fd){
    4 P' o/ G5 a2 J4 ]% E" I+ U* x& T
  26.         echo 'close';5 ~1 ~1 {6 J1 R/ q6 f" G( }
  27. });' i2 {) t; y" Z, i9 s& Y
  28. ! _% z+ f0 [( j. u2 q
  29. $serv->start();$ N0 K. w% ]/ m& w; T

  30. 3 k- p* V) |( h: p' u8 J3 L
复制代码
主播客户端
" k' M. y( k2 p/ N
  1. <!doctype html>
    - z2 P. d" @% K$ d2 Q7 N
  2. <html>
    ' D& L- m0 ]) U- t9 y
  3. <head>
    ) e* F% W& i" m8 z; X1 P
  4. <meta charset="utf-8">0 {3 J$ Y) q0 m9 {0 k. s: N

  5. $ r% K% y7 Q& X( S
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    ) T- t. z8 y% k
  7. <title>404</title>
    & `" V3 E% ^3 ^! i7 X
  8. <style>
    $ o# D. Y7 ?1 E9 u
  9.         body{
    # D' \# E! Z" G: F( l
  10.                 background-color:#444;
    3 @. v3 g5 ]2 ]5 r- b) {& I% }
  11.                 font-size:14px;
    0 P0 W+ y; X; J4 }) B. F: d# G
  12.         }# `: e+ J7 r8 y' ]
  13.         h3{
    4 o7 h1 e" `+ g
  14.                 font-size:60px;  s* h0 n6 d. d% Z3 w6 s
  15.                 color:#eee;
    3 }: f8 ^- k" e- O3 `9 V
  16.                 text-align:center;
    5 Q) c  W3 u/ v2 n
  17.                 padding-top:30px;
    : E4 Y3 E' O9 e0 Y
  18.                 font-weight:normal;
    1 |# M5 z6 k3 r% a/ f
  19.         }+ K( x! a9 E2 v8 k
  20. </style>
    - M! f/ F7 L2 {$ @. w6 Y* \) j
  21. </head>6 e! `6 c  O3 ^" {  m( |
  22. / [4 y- [& I$ a2 ]) ^, Z4 \
  23. <body>% R$ S. W2 c  B4 I7 ^" g: B
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>
    3 S# I$ s: J+ R
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>1 W; R8 @4 g7 m8 F
  26. <canvas width="400" id="canvas2" height="400" ></canvas>
    * {) U1 G  t4 u! V7 f7 y! S
  27. <script>7 ^5 s4 B( @* a; y( P# C: V
  28. var video=document.getElementById('video');
    8 A& u- s+ B& L% I1 B
  29. var canvas=document.getElementById('canvas');3 N- d& k' T) I) M$ H. A' _6 s
  30. var canvas2=document.getElementById('canvas2');
    1 t3 A. Z# K( C5 s0 V) y* \0 y- B+ }
  31. var context=canvas.getContext('2d');
    & q$ v( @* W6 j/ w) `
  32. var context2=canvas2.getContext('2d');# S& o& ^( m$ T1 p" X
  33. function draw(){
    % R3 I4 P9 d' F) H: o" t: H
  34.         context.drawImage(video,0,0,400,400);" `+ [! ?9 }* Z3 C) l! v
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
    ' s) s1 T2 r4 y9 n* F
  36.         setTimeout(draw,800);5 e# a$ }: Z' F3 w7 [2 T( y
  37. }
    : I; H  v( g4 o/ T5 A1 u
  38. 5 t7 s$ l/ E/ O7 O( `
  39. //客户端跟服务端通讯
    3 T. l2 X( u2 q
  40. if (window.MozWebSocket)
    & q! A4 |1 g4 c  N! Q% ]
  41. {5 M: S( X2 [% j
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");: z# ?1 A# d, D
  43. } else. B& W9 g- l& h7 S3 D
  44. {5 |: _+ N' V+ X+ t( g
  45.         ws = new WebSocket("ws://182.61.42.187:9501");
    / t5 e) F* h- ~! p: T1 I
  46. }
    * u; E& s  U! a+ h0 [4 N' _( g
  47. $ b0 V( i& v! r# T
  48. ws.onopen=function(event){
      g% d" G3 f7 W" ], b0 V
  49.         alert('连接成功');
    # \+ P$ y. z2 o0 [
  50.         ws.binaryType = 'arraybuffer';3 h% E# u( C# s* r
  51.         draw();
    7 ~& W- \9 \0 m# ~- t
  52. }' q8 {: q9 w# W
  53. ws.onmessage=function(event){, M* q) A1 B" N. z. o! G+ T
  54.         //alert(event.data);
    - L  @9 |0 ?, ^. Q
  55.         //ws.send(event.data+"client");4 S2 g4 z! W1 a7 X* W6 m
  56.         qrCodeImg = new Image();
    ; D& Z- M0 j8 F" H
  57.         qrCodeImg.src = event.data;
    0 g1 f; z9 w# _3 N2 c' g
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);' \: o6 V+ W' [
  59.         
    ; _& [, h+ A' i1 R" q
  60. }  k3 S% ]* q  X% i) I' Y
  61. ws.onclose=function(event){
    " N3 O0 P* `( M, G  Z1 A/ Q6 ]- z! c
  62.         alert('close');. u& P* y) t2 F8 C' E
  63. }* C8 y7 ]- d% v& k! S! M
  64. ws.onerror=function(event){) J1 m/ e( P) L/ M8 \
  65.         alert('error');
      @5 W) Q2 E* R( v2 ]! r
  66. }/ N* a4 g3 w6 D; U; t
  67. //video,标签模拟视频
    0 N7 O: l# E9 S2 s0 S
  68. + J0 G/ k) z/ @  P- X6 @+ O& J
  69. </script>* U, m0 y9 i: j! Y* C
  70. </body>
    : M9 p1 l9 I6 D7 S% N4 S( q0 p5 L
  71. </html>
    & R/ z( {  u/ g( @$ i- }: {

  72. 2 V0 N' |6 n( G" D, i
复制代码
客户端:- P* J! I4 U6 C8 r; w% v  q' L1 A
  1. <html>$ C5 L6 i" ]2 F9 C8 Z: ?  X+ L
  2. <head>
    - E2 H5 l# k  i3 H, O/ V1 {
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">
    ) g" K: y% O3 p1 _9 G2 ~
  4. <title>客户端直播页面</title>
    9 M4 \# O( h! n0 ]; L
  5. </head>
    / Q) X  b( ~" \! k
  6. <body>
    ; v0 D) V5 P: l6 a
  7. <img id="receiver" style="width:720px;height:480px">* {4 X7 O9 y; b- c
  8. 2 @5 `' \9 n# |; V
  9. <script type="text/javascript" charset="utf-8">
    . c6 ~4 |. B+ x1 H( ]! v% R
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");% O/ y& w+ K3 g- D5 M1 K# q6 \
  11. var image = document.getElementById('receiver');
    % X* i( ]+ A- \: L9 Y: b
  12. receiver_socket.onmessage = function(data) {
    4 G0 S# J( s5 G1 l: ^" z$ Z& \
  13.         console.log(data.data);; ]  H' ]5 i+ _3 y
  14.         image.src = data.data;
    + a- r2 H: i9 d6 m3 `+ z
  15. }
    # I7 f8 ~- `$ K; G7 g1 b
  16. </script>8 @% R; U- d+ x
  17. </body>
    # H  t) H2 h0 S
  18. </html>1 M  f5 _3 m1 `# @( O

  19. 7 x  v* F' Y+ d0 M4 O  j4 A3 }/ Z
复制代码
  M# o3 ]0 ^  v0 L9 A
4 {2 M2 D9 m* }3 |" m9 a& d; ?5 u, l
* x: Y1 T& s9 x3 c
2 P0 m8 s' v: q  U6 t

4 l4 E2 V9 i6 A6 ^9 d, `& c2 L) o4 O; f
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2025-2-5 20:02 , Processed in 0.114439 second(s), 19 queries .

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