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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码3 v3 m- N9 [3 C7 h7 o
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);
    6 P9 g4 q/ r3 m  S1 k8 c9 L" f4 h9 o
  2. $client=array();
    / M6 ~! l  X8 D9 x
  3. $serv->on("open",function($serv,$req)use($client){
    ) F& `3 b% V/ p/ i* ^6 I
  4.         //echo 'connect'.$req->fd;
    , w' Y. F, j5 }& d
  5.         $client[]=$req;
    * _+ d4 S& K2 e; l5 r
  6.         //var_dump($client);) {2 w* M; r/ C. g, I
  7.         $serv->push($req->fd,'aa');! y$ H( O. S3 s2 ~( N4 j
  8. });
    % B0 C5 ~+ ]. e0 J6 ?7 R& P8 @

  9. . L8 l6 \. {) c, Z( V& e
  10. $serv->on("message",function($serv,$frame)use ($client){
    / Y( X* A( B" B
  11.         /*var_dump($frame->data);
    - [. T  c6 O7 g% M
  12.         foreach($client as $key =>$val){; \3 @3 L3 X( f" u
  13.                 $serv->push($val->fd,'aa');
    . M2 u6 ]* F3 C7 c( G* n
  14.         }*/
    ; R- T" E- |: R+ e3 `
  15.         $client=$serv->connection_list();
    , U5 Q/ l9 F; q: a
  16.         var_dump($client);/ D$ z9 p& M2 d' a
  17.         foreach($client as $key =>$val){) k/ V/ Q4 O, [- U; W9 p
  18.                 if($val!=$frame->fd){, v: T, T# ?/ z/ a- b; `5 m
  19.                         $serv->push($val,$frame->data);' R' `# ~% ^; [% L) c4 I8 |, b
  20.                 }9 Z, Z2 K% ~) C! |+ z9 V  D
  21.         }) e6 c$ _  D; f. I* {
  22.         
    # {6 C+ Q1 C$ w# B/ c6 }% l7 y+ [
  23. });, {4 k; @* S- [; u  g. I- ]
  24. ; h! u- I5 s; R9 V  U% S2 C, ~
  25. $serv->on("close",function($serv,$fd){
    3 a* v7 i+ f0 c4 Y5 H1 v
  26.         echo 'close';
    9 }( V' p7 {4 s
  27. });
    + b2 m( D. Z' d% D0 G8 L8 \1 X
  28. 9 E/ z6 C" W0 C8 [6 u
  29. $serv->start();* L6 F, ]+ R! y0 ^$ V" n1 d" ?

  30. 8 C: ^7 @& i% V1 j
复制代码
主播客户端! h% ?) X; _2 B! v3 S. @% L* a$ A1 e0 e
  1. <!doctype html>
    & M3 w! }/ Q5 z# o
  2. <html>
    * q" x2 |( y8 {5 L2 T
  3. <head>
    ( D- Y+ _- w) o. v1 ~( u6 k/ k0 L0 w
  4. <meta charset="utf-8">
    5 v9 o) `7 }* X4 U8 a/ a: V/ h" p

  5. ; u5 f4 y( b" N4 I
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    * c/ @! V3 W5 U0 U+ ^/ t
  7. <title>404</title>
    1 j6 g9 S1 @( q. N( _
  8. <style>
    % |- F. a) m( e; _
  9.         body{
    ( ?/ m! P- U! U' P( S# `  p
  10.                 background-color:#444;2 y. t1 T1 U+ q/ _
  11.                 font-size:14px;
    + Q9 H5 _! p# K  o
  12.         }% o8 v! p; d, n% }7 ]" O
  13.         h3{8 P% @, B0 q. }% E  m: N5 K
  14.                 font-size:60px;$ ~5 b: V* |5 V- ]/ Y0 p( Q
  15.                 color:#eee;9 u& m$ h4 N% p% o  x0 H( N
  16.                 text-align:center;; i. b  X) e" i! u+ w: [
  17.                 padding-top:30px;
    ; p: y+ I! \+ S! p
  18.                 font-weight:normal;
    / s4 i2 J" M) Z0 j# a& |0 d
  19.         }
    * H* I1 J3 N* v% T+ a% k
  20. </style>
    # p0 U8 [- c0 m! P& c
  21. </head>2 E, X. p/ ?# H# u! U/ h* l3 F
  22. / N# I9 h% S5 T1 p
  23. <body>& I* b( Q" L, i* q6 J$ @# t' x5 i" Z
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>
    2 I8 O. ^$ n) o' ^+ j% E
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>
    * ]/ I" _* y- s& E3 O5 O  ]1 J, |, `8 e
  26. <canvas width="400" id="canvas2" height="400" ></canvas>
    + p) _& V* N4 C4 @2 m9 B
  27. <script>
    - H: E0 k6 U# E  D8 K" r$ @
  28. var video=document.getElementById('video');! S- y' S" H: ]2 a- I- ?
  29. var canvas=document.getElementById('canvas');# n8 n+ N" Q; K. o: P
  30. var canvas2=document.getElementById('canvas2');
    0 P# H) R. Z- G; c
  31. var context=canvas.getContext('2d');
    & Y$ c9 `+ g! @; ~! |
  32. var context2=canvas2.getContext('2d');
    9 [5 v: ]+ P- `. @$ _1 j7 u
  33. function draw(){
    9 Q: L1 Q% n, f8 ]) `7 p  b* V( W
  34.         context.drawImage(video,0,0,400,400);
    ( `4 O$ V  {, H/ o
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));$ P7 f/ P- z# G3 z
  36.         setTimeout(draw,800);2 ^* r# a" m  i3 |  O$ }
  37. }7 I* O/ b% s# v9 }# t

  38. - o% p6 P' ^, T8 t9 Q5 Q. ?, @
  39. //客户端跟服务端通讯
    ; P( i- q( p  j4 g; j
  40. if (window.MozWebSocket)
    - C; ~& |. q9 p; f  T2 e& Q+ X2 G5 F
  41. {! O. t: v7 O. S. }/ o. m: E0 j
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");
    9 G0 a! n% `' p. E( B3 M
  43. } else' a# H* ~/ z4 r  T  R
  44. {9 _5 _* I! T. d
  45.         ws = new WebSocket("ws://182.61.42.187:9501");$ C! h9 ^, l7 H4 ^+ f, |, v
  46. }  ?" g2 O) B% _$ y3 A6 u2 a+ w

  47. ! ~5 P  V- O- w7 }; r
  48. ws.onopen=function(event){
    6 o+ q) s2 k5 S( S. z) T! @
  49.         alert('连接成功');9 e! T9 J; A7 }7 \5 ?3 @+ f5 c
  50.         ws.binaryType = 'arraybuffer';
    9 A: C/ [2 M  b' g4 O( E
  51.         draw();8 r+ |' O2 @8 ~" U3 w. }
  52. }- z/ }0 I: k8 L9 X$ t- `( P1 q
  53. ws.onmessage=function(event){+ r+ |2 j  ?" \3 A$ z. o. I
  54.         //alert(event.data);
      E5 h: X) D9 {
  55.         //ws.send(event.data+"client");) p! k) p  b5 W4 {
  56.         qrCodeImg = new Image();6 d6 V5 q6 l& N; g* m, D
  57.         qrCodeImg.src = event.data;+ p2 y/ p# l# t( n
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);! e; [+ M9 L7 |% u
  59.         
    : E! |! K8 n4 A9 h
  60. }
    $ F0 g  s6 G+ l: w2 M4 f9 G2 {
  61. ws.onclose=function(event){* E# Y& x8 O- \6 ^+ n
  62.         alert('close');
    . C/ R/ t! x7 k& ^) k
  63. }
    ) o% Q$ B1 ~& H/ x' L3 u
  64. ws.onerror=function(event){5 Y, u8 g7 R8 C
  65.         alert('error');) H. n% @# X4 k9 x+ r  I4 y
  66. }- P/ a2 Q; G) Z  e0 C1 Y2 n
  67. //video,标签模拟视频9 \$ B$ n7 N' E. C8 _; p

  68. ) j, e! }6 w1 z- N+ ]2 k% v
  69. </script>
      t1 |8 p5 [% ?, d7 C5 d
  70. </body>9 a; N' Z. y2 c1 f8 o* u
  71. </html>
    % b& n* t7 w. u. @+ [% c" H
  72. 8 r6 U. P4 m$ `# D. F" z
复制代码
客户端:
0 R- ?2 m, D2 q, G& i. {
  1. <html>" e; K/ k3 o( N4 n
  2. <head>
    0 G. U7 [" r$ |& y& e# ^
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">
    $ `8 L% S" b9 @
  4. <title>客户端直播页面</title>
    " B' t3 C$ k( ]6 V+ N
  5. </head>
    8 ]: [8 p5 p9 B( M; ~
  6. <body>
    $ t. J; v: ^# n8 p
  7. <img id="receiver" style="width:720px;height:480px">
    ( l0 e0 c" p' v; \" R( |# m

  8. & Q5 y; p  d$ V
  9. <script type="text/javascript" charset="utf-8">
    ! F% w5 [( T# F$ }+ C3 M
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");: [& W7 |7 o* x0 Q
  11. var image = document.getElementById('receiver');
    # Z- y9 i; w3 ]) U& A7 ~
  12. receiver_socket.onmessage = function(data) {
    & p) k' Q- }4 `" \! g# R* q; {8 y
  13.         console.log(data.data);
    & c5 O6 r) ~% I1 B! P" A
  14.         image.src = data.data;
    , E9 M1 V1 i; H
  15. }
    1 g' l3 |. o: C# f6 L& K' o1 u
  16. </script>
    ; z) \% {+ G0 Y5 X/ n
  17. </body>
    ; e' W3 n! M6 L7 g( M7 p
  18. </html>
      w! `3 P( s+ Y5 A2 Q9 s
  19. 7 e# b, s6 q! d! o/ k4 \
复制代码
+ T" D8 f3 _! d# v- m3 O8 X  @0 ]

3 Y* N# R: i: l! m; j( ]0 I7 @3 X# ~7 Y5 S, u6 C/ F6 E
% I% e: u9 g# c/ l3 Z* n
, B7 v: [% S0 A# C: e2 F
% c& K6 w8 t3 d; T: @  g* D
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-1-30 13:00 , Processed in 0.061643 second(s), 19 queries .

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