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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码
3 {5 d0 c0 u5 J* }( v
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);
      E$ V% J* Y6 d
  2. $client=array();8 \" @, b' s4 }; F4 C
  3. $serv->on("open",function($serv,$req)use($client){9 _( X) s0 D" [# m) w* O
  4.         //echo 'connect'.$req->fd;
    3 i' G% c, h3 T) g# X' K
  5.         $client[]=$req;
    / W  n7 X- H$ O. p! n  |4 E* o$ F
  6.         //var_dump($client);
    ! I3 _: r5 r5 D0 u* K! Q
  7.         $serv->push($req->fd,'aa');
    9 J4 b- D+ n  L8 m& L
  8. });6 X( `" ~% h0 n, }9 [$ u9 l
  9. - ?. Z( F0 }! s& G  G
  10. $serv->on("message",function($serv,$frame)use ($client){; p2 r* F# e& c- w
  11.         /*var_dump($frame->data);
      e4 Z( d+ O' J3 n6 W. J, M
  12.         foreach($client as $key =>$val){; R) A( M8 e9 @/ b
  13.                 $serv->push($val->fd,'aa');
    # v6 q% s! S0 L0 r: G5 T1 \2 A
  14.         }*/
    6 i, f5 ^9 u" s' \" V
  15.         $client=$serv->connection_list();) D( R  m: q6 P, Y
  16.         var_dump($client);4 V- @5 P% g% g) w. Y
  17.         foreach($client as $key =>$val){
    . x. X$ N; R# j6 J+ S4 ~
  18.                 if($val!=$frame->fd){: \) e) T7 l0 H# M4 r7 x2 x$ x
  19.                         $serv->push($val,$frame->data);8 h$ V- B9 a0 S
  20.                 }3 e/ W, {9 g7 j/ E: P/ p
  21.         }, \4 S4 q# Y- _/ g+ V" \5 M
  22.         , J4 E! w6 b% x! l0 }& h
  23. });
    4 O/ ^. c" N+ L3 ~

  24. . Z, k. v$ Y& Q+ H2 {% K- i* J
  25. $serv->on("close",function($serv,$fd){
    0 @, E! n, f0 D9 l# K" A
  26.         echo 'close';, s. O6 h+ b& L  ~* \; q( i$ m% y: h
  27. });! `' f: u$ }( r* |
  28. ' D% B+ |( t7 L8 _- b/ N
  29. $serv->start();# V1 j9 V8 U+ D0 t' W

  30. 0 R* P# n& k) e
复制代码
主播客户端5 H# _; k- b' j6 K& k
  1. <!doctype html>+ Q6 h5 A7 v; t
  2. <html>
    " }; @% c$ S$ T5 Q1 p& X
  3. <head>
    , S. q! L2 b' O: O  b
  4. <meta charset="utf-8">
    6 S( O' V4 q1 ?7 h& U+ k
  5. & D  O" X5 V7 N4 x# a
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">5 s- A- [1 V4 ~) ~
  7. <title>404</title>  F4 z  X& n, @! a3 W
  8. <style>3 I6 |; {, r4 a% ~, t+ x/ Y! C
  9.         body{
    4 [# K! Q: _9 K& P+ N: O6 K; F
  10.                 background-color:#444;2 p" H' ?+ a! M7 v& {( {7 K3 `3 q( c
  11.                 font-size:14px;
    2 r" ?/ f9 z2 B- ^+ p
  12.         }
    + Q  e0 f; D5 f5 u- }2 ^: N8 D
  13.         h3{; F* R, ?7 k6 d: w4 Y, _
  14.                 font-size:60px;. |; @- q) k8 x+ ?. a. F. ?
  15.                 color:#eee;% W" o2 k9 R" [. O- V' W: a# o
  16.                 text-align:center;
    2 G+ B: G* u: o! n& ~9 ^" j' c
  17.                 padding-top:30px;! P" t/ `7 ~# Q
  18.                 font-weight:normal;: A# |0 x* B3 I$ W
  19.         }( L, s+ s2 l- q7 r: H6 C/ |
  20. </style>  l6 i& t2 ]! Z. k
  21. </head>% P: z3 O  M, d- l/ p1 x) w

  22. 7 M- f5 U: i% U5 A4 O
  23. <body>8 F/ m# ?" [% o
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video># C" r! D9 q2 @% I1 V
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>
    % a3 q- z  L& b7 y3 n# @
  26. <canvas width="400" id="canvas2" height="400" ></canvas>" x) J3 w8 R/ s1 ?, F4 J: u: `% s- l: m
  27. <script>" h' V2 |: K6 V0 l/ [4 _
  28. var video=document.getElementById('video');- _" O1 w6 J, A2 Y
  29. var canvas=document.getElementById('canvas');, h/ D/ `1 g5 U, ?
  30. var canvas2=document.getElementById('canvas2');
    2 G  H( a- r1 J2 a+ N0 Y7 `$ ]
  31. var context=canvas.getContext('2d');
    % n# x" I. y1 f0 g: f
  32. var context2=canvas2.getContext('2d');
    1 l! B5 s. q2 f
  33. function draw(){/ V: G3 l7 I/ L2 _1 N0 K0 |
  34.         context.drawImage(video,0,0,400,400);
    ' N% n( N. C5 L6 s; Z4 C
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));- i9 M+ h# @5 l1 g, c& G. }7 q8 F
  36.         setTimeout(draw,800);
    / {9 @" ~; S) ~; ~( ^
  37. }+ P3 [+ _) C& E* U+ W
  38. $ e- O5 u3 }! `# @4 F! A9 O
  39. //客户端跟服务端通讯
    # e7 x& ~1 Q8 L0 Y1 Y$ M: Z# p  i
  40. if (window.MozWebSocket)
    ) M' ~+ n1 S4 B6 \9 {. j
  41. {
    8 d6 |; n/ E, @! i
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");
    ! [& o- T& g/ m  S
  43. } else& U* x; z1 o, B, I- A" E
  44. {
    ( c( q) f0 |+ I5 ?$ A$ W4 F1 G
  45.         ws = new WebSocket("ws://182.61.42.187:9501");; x) h8 F% b6 l! E, Y
  46. }8 V9 B# e# }- i
  47.   q. t5 z9 L) j# }
  48. ws.onopen=function(event){- k9 ]; j6 l1 ]! ?+ ?
  49.         alert('连接成功');! s% k9 }5 [. N1 z# V. b
  50.         ws.binaryType = 'arraybuffer';
    " K& [7 o6 b* U/ f3 Q' b
  51.         draw();9 A+ Q3 v* L/ ?; j2 A) K! H
  52. }8 u( C$ [0 j' g& W8 J
  53. ws.onmessage=function(event){
    8 Y$ H$ ^6 \% x7 L
  54.         //alert(event.data);1 x1 x5 Z1 R: l: q
  55.         //ws.send(event.data+"client");& }+ k- |5 p! F1 ?6 X# C# W
  56.         qrCodeImg = new Image();
    0 f4 Z1 Z4 I% Q  N/ L& Z+ p# u' r
  57.         qrCodeImg.src = event.data;
    ' I0 `& U3 {$ {* o
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);) e8 V5 Y# |/ l7 e% T
  59.         + K2 a1 x- f6 I. B: b( p
  60. }1 ~7 {7 \5 F5 y0 P
  61. ws.onclose=function(event){
    ' S, Z) t5 t* |4 {( h, t6 N
  62.         alert('close');
    + w/ H) m" q+ P  s* b; `
  63. }
    1 @/ y4 `- |, X: A/ ?
  64. ws.onerror=function(event){
    * c9 q1 w: h; k" G2 D; f. ~9 @
  65.         alert('error');5 C: M  p3 d0 R3 Q8 b4 M
  66. }
    ) e# _! b" t# B% w, c/ R9 M
  67. //video,标签模拟视频6 z4 D% m  V% `& ?
  68. 5 R( R/ N' Z1 H3 J7 Y- a9 F0 t
  69. </script>2 S, ^: Q7 N6 N0 Z( e3 n) K
  70. </body>
    0 j- [2 u4 _; y0 ^3 a
  71. </html>5 d- R. `  F* p2 ], F- g
  72. , G" P  w2 ]3 Q; \; p2 Z0 B6 g
复制代码
客户端:
5 I- O6 d$ X, ?4 s- B
  1. <html>* v) ]% Q$ K3 K' [
  2. <head>
    3 |. z, G) I( o; X* \
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">
    5 f- k' K8 u) `" d% C7 O1 y+ Y
  4. <title>客户端直播页面</title>: [2 w% A' a1 g( Y2 c$ Y+ A
  5. </head>+ R' o% g( ]# E. F
  6. <body>0 `$ x2 \( @8 X2 k8 J6 n: ]
  7. <img id="receiver" style="width:720px;height:480px">$ P3 D* ^3 ?6 N. H9 W. F

  8. % D8 v- c0 r7 W8 {" @" i6 n; B
  9. <script type="text/javascript" charset="utf-8">
    ! {" d+ ^1 v3 v
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");
    ' Y" g: P* B3 M+ _3 S0 }# U: l
  11. var image = document.getElementById('receiver');
    # ^) ?$ C7 F* Y0 M- [
  12. receiver_socket.onmessage = function(data) {
    - ~: g; @/ y& S) T
  13.         console.log(data.data);" V5 |$ j3 W! _+ {/ w3 V: N
  14.         image.src = data.data;( d6 f1 @1 D. ^8 t9 k! n2 v* @
  15. }  P6 |; `3 P9 w& a
  16. </script>9 D/ L% y* _( t5 v
  17. </body>
    8 D9 @+ S5 B+ k3 G( N! \
  18. </html>5 ?+ Y9 h/ K+ y2 {9 p$ ^
  19. 1 ]2 t/ r& ]. o6 ^
复制代码
7 i9 u/ m# n3 E* L, A

0 a  D  q$ f6 S9 E& f
2 Q# y9 T- {$ F# p* y+ E2 `9 G: J# K: I9 _' b' t
7 d  f" @1 |: u5 e9 f
1 t6 B$ {! l9 b; D$ G; \3 O
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-9-21 03:19 , Processed in 0.075705 second(s), 19 queries .

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