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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket
4 J! u/ _. g' d, q, O5 t0 W上代码
前端
观看页面
  1. <script type="text/javascript">
    ; f1 Z- n5 M; F
  2. var ws = new WebSocket('ws://192.168.0.150:9502');2 T' y% z! o. ~! ~5 A: n
  3. 9 {: J2 |7 h0 O  M5 a
  4. ws.onopen = function() {  \1 z8 X( u6 T1 h- I
  5.     console.log("连接成功");
    ! s( T$ |% d: _) m: D
  6. };
    1 ?5 I+ N8 r1 ?3 v3 z) Z
  7. ws.onmessage = function(e) {
    2 s$ {8 G% n/ P7 v! p% i7 q+ y
  8.    console.log(e);, U: v. K# `* N8 y8 l

  9. $ E- [8 j  ]& M6 o) V' ^
  10.    var data = e.data;
    6 v* |" O6 q0 V1 |7 I( L
  11.    document.getElementById('player').src=data;
    ) X" q8 T1 O0 A( S4 x. q
  12. };/ m5 _' `) v* p" }6 p/ |- U9 z
  13. ws.onerror = function() {& r9 c$ B! H% G5 K" s
  14.     console.log("关闭连接");
    7 N. a/ Z- D2 R7 @* s- j. p1 h! q/ g. L
  15. };
    9 S: s# a/ D0 _5 T% M+ ~: M# w
  16. </script>
复制代码
录像页面
; k, f$ p* d3 R/ L0 V
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>. K6 f2 _3 x7 X: y: x
  2.   p3 }1 E1 g% I8 F
  3. * T# S  R+ t" u/ K1 J( N
  4. ; k5 q3 i+ ?6 ~5 s8 b4 J
  5. <script type="text/javascript" charset="utf-8">
    - @) Y8 A" c* _2 d5 l
  6.   ~! K. p$ s+ n9 N" B" F
  7. 2 Q; j1 @( u) {# b# m
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');
    " S) i& K  `: d
  9.     //socket.send("嗨我登陆了");! M: E$ D; A- Q6 I6 O- ]5 V( Q* l6 h$ J

  10. + e2 y0 {3 ?8 C! a# ?' g
  11.     var back = document.getElementById('output');/ H6 e5 b9 r6 ^( A) n7 w
  12.     var backcontext = back.getContext('2d');
      c0 f+ J2 d% ^: }& `7 i3 a
  13.     var video = document.getElementsByTagName('video')[0];$ @3 y: C0 w% p" U. U* y
  14.    
    2 d) `% F1 P- Y4 }
  15.     var success = function(stream){, z" A1 ^6 |% |2 K3 o
  16.         video.src = window.URL.createObjectURL(stream);
    * E3 x  ?6 f3 H8 W* i8 H* G
  17.     }6 [: z% O3 L8 u/ c  t
  18. 7 H. k* k* X% D( b
  19.     socket.onopen = function(){3 T% J. D4 s1 d' [1 D. Z6 V
  20.         draw();8 D: F1 x0 e9 H6 Y2 h- R3 M
  21.     }9 ?( c, D! C4 U! \9 P6 e- Z

  22. ) P/ g. ?1 ?2 K
  23.     var draw = function(){
    ! i% l& y8 z) S2 K+ q7 ]6 \1 m
  24.         try{) b" ?' K) B' d" x$ C
  25.             backcontext.drawImage(video,0,0, back.width, back.height);
    5 |% J7 [% [6 l" x4 F  ?
  26.         }catch(e){! ~( r# m  e) J. F0 e
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {
    # Z/ ~, T. d: Q3 ]6 Y
  28.                 return setTimeout(draw, 100);
    " f, w  l/ Z* n2 F$ X/ k
  29.             } else {
    , m1 E1 m" k' }
  30.                 throw e;* i7 ]; m! F, l0 n/ Y
  31.             }6 r( o+ s5 I$ w7 }
  32.         }
    $ k& \% O" K: G
  33.         if(video.src){/ ~3 L, s4 a1 Y. P  S' J
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));
    : T- t: l! ]2 u: A: c
  35.         }
    0 y! R9 v! [% A1 q& Z5 `; p
  36.         setTimeout(draw, 100);. t" F- D$ \( X! E8 ~( D
  37.     }
    " {" W  w. K* D2 c
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||8 N0 e* I+ r* C# Q( x! [6 d: D
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;
    7 ?! `# @$ K8 j$ q! g) g
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);
    0 ]6 r. Z+ t4 H
  41. </script>
复制代码
  1. php: S- O& T/ ~; ]  A% j& E
  2. * o# E6 q3 v+ \5 a0 R
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);7 [* H* G5 h; b
  4. 9 Z9 G1 A- J2 F& x
  5. $server->on('open', function (swoole_websocket_server $server, $request) {
    2 q- ^$ J, ?! C0 D4 S

  6. ! D" b7 `$ H" b
  7.     echo "新用户id:{$request->fd}加入了\n";
    ' |7 p: P: U# J% p# W* n# i( t- N* p
  8.    // echo "server: handshake success with fd{$request->fd}\n";
    * q9 H+ M5 d# Y7 E) Q
  9. });
    ( O& Q8 W9 a$ N, S5 {0 W

  10. 6 G. R- K, x% ]
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {3 b% e  F. n6 l8 A) s& w: ~2 ~+ D
  12. 8 K# h* Y" G0 R! P' u8 Z) t
  13.     //循环所有数据
    - H  b8 `8 y! T5 p8 |7 K9 P# h
  14.     foreach($server->connections as $fd) {
    & B+ J$ L' P0 M* N- Y; F
  15.         //返回数据! U5 v) T% e/ J% R: F
  16.         $server->push($fd, $frame->data);
    / E2 ?6 e, m  C4 |2 ^* Q
  17.     }
    * W& B; N! S2 R1 O4 z
  18. 6 D, D, ~- t, U+ m- d  P, x0 C
  19. });
    * U: t: X; h5 G6 Z9 [1 }0 {

  20. ' h/ P. ]. J: |
  21. $server->on('close', function ($ser, $fd) {; K: j! F; Q+ ^! z! k
  22.     echo "用户id: {$fd} 退出\n";, B7 q& t5 O: M+ j0 a% Y; i
  23. });
    1 K+ v* ]3 D2 R# v6 K" c2 D* d+ `

  24. & U  j5 z2 Z: |' f% K) D% o
  25. $server->start();
复制代码
2 j9 k" R; o1 x* z

2 q7 G7 S: L$ K0 [4 J4 p
8 r. ^  K1 |- [- V2 v& G7 h# p; \% [: Y

1 }7 u2 c# ~2 L' j& m5 ^8 ]  D$ R% V3 D
' x* p( g2 H: y; B3 n: E0 J9 p

3 M5 n. U$ s! N9 @+ s
7 S: X+ G, o+ C, z( T4 A7 r) W3 e9 `0 c) E) }

6 {! f# `0 z" }$ O' d. S6 j4 T4 p6 j5 }% \: y" a( Z% N+ k3 t$ D
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-17 18:43 , Processed in 0.134397 second(s), 19 queries .

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