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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket# K# f0 \8 z+ P
上代码
前端
观看页面
  1. <script type="text/javascript">
    4 O) b% B, a' u+ w3 v! H( R, D
  2. var ws = new WebSocket('ws://192.168.0.150:9502');
    " P4 X5 t  H: @3 e- @4 R% Q, ]6 I

  3. " _' C5 z" J: A
  4. ws.onopen = function() {0 U+ J: Q" U! E) z* t3 F. S5 ?
  5.     console.log("连接成功");
    5 Y7 K$ Y( L% E) b5 s
  6. };
    7 n* w. h0 f# i$ `$ B! ]2 r1 D
  7. ws.onmessage = function(e) {% F6 u+ K, H9 I1 S6 v
  8.    console.log(e);
    + ?0 }  c& J& f* v# J. T

  9. + J/ ^  `& j5 q9 c3 E: [5 S$ d
  10.    var data = e.data;
    4 J: _0 M5 s, G$ l9 ^) v; m
  11.    document.getElementById('player').src=data;
    $ ~& `/ q+ i; v6 x
  12. };5 @, D+ `7 D  E6 Q
  13. ws.onerror = function() {$ u- T* ?5 D2 B: _8 a7 s
  14.     console.log("关闭连接");
    $ z3 A* ~" p3 ~2 L% }
  15. };
    0 H- K) s9 C) Z% T3 ?: o: t
  16. </script>
复制代码
录像页面
0 ]; V  Y* N1 `7 X( m; U
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>7 t- E& A  y' R- e0 ]0 Q1 {

  2. 2 M" S' y* s& T+ S
  3. ; b3 |1 D4 |  N' y

  4. 4 j9 q% P3 s; ?5 `% W; `  H
  5. <script type="text/javascript" charset="utf-8">$ x4 ^' }9 ~4 E5 H% N: w

  6. 4 E+ Q% k, [) @* q, E# d

  7. 6 d  m. n" }# I& k
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');" I& a' c( @6 n! y' E- I8 B3 ~1 |
  9.     //socket.send("嗨我登陆了");
    : ]" q2 G: X3 F- Z& \

  10. ; A9 l+ I3 o$ |, u
  11.     var back = document.getElementById('output');2 A5 P: @$ N" A/ W
  12.     var backcontext = back.getContext('2d');/ j  ?$ i4 `+ S5 ^7 T8 Z; b& p
  13.     var video = document.getElementsByTagName('video')[0];
    ' O7 {$ {( Y  L7 G% V
  14.     , B5 g& ?5 |& U* s- n! H! x$ ~
  15.     var success = function(stream){
    6 M& x0 c3 q% R! W& g1 x
  16.         video.src = window.URL.createObjectURL(stream);- ~6 a7 G; B5 T8 G1 `0 T3 L. G
  17.     }
    5 m) W8 A+ i5 |6 D+ S$ r# j( Z
  18. % t/ g! p; Q6 o, F0 c
  19.     socket.onopen = function(){
    1 s$ r5 s0 v2 l. {4 l6 X
  20.         draw();( f& }% O8 N- W! ?* S: k
  21.     }! z6 o3 |1 A- e# ?) f1 w: ^
  22. ! B2 G7 g3 ]( G
  23.     var draw = function(){; |" J6 R: @1 h$ e- S5 T" K" S
  24.         try{: @- K, A$ A* Q, I+ f
  25.             backcontext.drawImage(video,0,0, back.width, back.height);; b+ x# ?: u. s5 m( O9 Z
  26.         }catch(e){( f) X% N3 b1 |+ j4 a& t' I
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {
    & G7 R9 M1 B: t9 q$ e
  28.                 return setTimeout(draw, 100);
    ' f' v; w. a6 m' ^: a& S% f9 _3 _
  29.             } else {* ^. ~0 ?3 ^; z" \5 t9 T/ m' v; c- L
  30.                 throw e;0 _/ e* C- X6 ~' ^3 S
  31.             }
    - r8 r& ]  t: b
  32.         }/ q# i5 Z7 t1 `+ U, n
  33.         if(video.src){7 c. y0 ^6 Z: e, m- X) D3 g
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));
      I. z  @: I; V+ B* |/ U) B& I
  35.         }
    % V8 P( e7 l1 Q9 g
  36.         setTimeout(draw, 100);
    # Z  T2 h& T& k3 U8 X! H
  37.     }4 ^& v+ E6 M& v' q
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||% G" ~% }' d5 ^" M
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;
    / `5 ]$ B9 K$ C6 l8 g
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);
    ( U6 j1 {1 R4 N& q* @7 L; m, e: G; w
  41. </script>
复制代码
  1. php% H; [; i: |. E% b
  2. ( ~! ]- t6 {8 K2 Q: ]
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);
    . h$ ^/ B" n' r. w5 j1 p
  4. 6 B7 I$ A  o" s6 k$ c
  5. $server->on('open', function (swoole_websocket_server $server, $request) {* T* s- x. ?+ F& O
  6. 4 ?: t7 G( j7 e2 \  f5 c
  7.     echo "新用户id:{$request->fd}加入了\n";4 q) }8 F$ c  _) b7 t
  8.    // echo "server: handshake success with fd{$request->fd}\n";. B8 h: x' A6 [( D' X9 l
  9. });  l6 ~$ I3 t4 N$ N% z7 H( R$ M

  10. ' K' x7 y& Z5 V8 L# ~
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {" y( J6 r$ C$ B! ]0 D6 B. a
  12. - n. B$ U  b7 w6 |  E' [* Q
  13.     //循环所有数据
    4 S: z; ~) X( ^& z; N1 ^
  14.     foreach($server->connections as $fd) {
    9 m4 H" O7 t0 {5 o
  15.         //返回数据
    8 n& s; Y# x% E$ M0 F' E2 v0 @
  16.         $server->push($fd, $frame->data);
    3 y3 S2 ]: R! r8 `
  17.     }3 R/ d0 V5 N; B

  18. 8 i4 j( _  |& O2 ~# O( v$ S* T+ P8 f
  19. });5 f3 w# B) @" W9 X% W5 A, |

  20. 8 m% h; p' m% A3 d
  21. $server->on('close', function ($ser, $fd) {
    ' u( _- _, k; h& ~; O, u! L( W
  22.     echo "用户id: {$fd} 退出\n";) o& i) m% o9 f! j% \; d, `
  23. });
    ' Q8 H* q7 R+ u  y9 R

  24. & n: b- |# x: T9 P; M$ n9 V
  25. $server->start();
复制代码
) o- ~+ y% b4 q- b* T& D
/ B% _! v0 |. v4 h. r# u: e
# f& O4 z3 N" u) D3 X' u
) Y" ]: D" [/ G1 X

9 S7 M) F* {" l& t0 J; T! a9 M2 ~+ W% b: w" h

: c+ ]! b( h- ]6 p  \: n$ _6 G6 I$ J/ O2 [- X

+ d1 m" x, f) Y
4 z1 q3 t- ~8 V' M8 V+ r, M7 p/ V& O. ]! u& T

/ P% g9 Y% y: T* d$ }  k( ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-1-30 08:10 , Processed in 0.051774 second(s), 19 queries .

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