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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket' p, K  G" W; }8 _
上代码
前端
观看页面
  1. <script type="text/javascript">; @+ D, Y6 \( q% ?
  2. var ws = new WebSocket('ws://192.168.0.150:9502');3 J8 S7 j! ^( a+ t

  3. 2 c/ \9 ?- O  ^3 t$ T
  4. ws.onopen = function() {. U/ y5 D. g5 o) I, W
  5.     console.log("连接成功");1 }+ ?  ~* y5 U1 E
  6. };7 N0 @- X7 e& ?( U
  7. ws.onmessage = function(e) {
    7 s6 D* [; K: [. q$ ^
  8.    console.log(e);( C3 y" H* v8 e2 z
  9. 4 F/ P5 ]; x7 Q- F9 y" C0 m
  10.    var data = e.data;
    / C6 G+ G( D# [3 N4 v( X
  11.    document.getElementById('player').src=data;1 M, H  u1 Z2 w' |% m
  12. };
    . w: p; W% I0 [. w
  13. ws.onerror = function() {+ J" l- Y( x' L8 F* n
  14.     console.log("关闭连接");
    / Q# X, P, H* Z) O6 C
  15. };( ?8 U% b. I4 y' m0 T* Z& l& H
  16. </script>
复制代码
录像页面
0 E1 f2 b; u4 ?
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>9 ~$ i* o5 r7 w
  2. ; Y  C  {1 C" [

  3. 8 `% m" o: @: o- t2 K1 k

  4. 0 _( d1 ?' C# {: S
  5. <script type="text/javascript" charset="utf-8">) L6 s8 q! g% H7 T( }

  6. $ M* T* y! r( }6 w: j0 |

  7. + N# i. L$ u7 [( w- J8 [1 P
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');
    % h9 u  ]! z3 _( i6 J7 p9 s
  9.     //socket.send("嗨我登陆了");
    - s- G4 r9 V1 q
  10. 7 D2 E  t8 {5 l( U" s( ?
  11.     var back = document.getElementById('output');7 f& l9 M3 {; E  G! D$ r% \
  12.     var backcontext = back.getContext('2d');5 {; k# x% _; g* P8 i
  13.     var video = document.getElementsByTagName('video')[0];; v) D2 V# k  p# K0 U" B
  14.     5 U" V6 I" ?% \
  15.     var success = function(stream){
    8 ]$ v% k4 g1 G6 j) ^, ?
  16.         video.src = window.URL.createObjectURL(stream);: l* q* C0 K1 C0 `/ n9 _& ]
  17.     }
    8 ^( v: N( h/ V4 \/ C, j. f+ y. L
  18. 9 O! x9 s* J, x8 c' Q
  19.     socket.onopen = function(){
    ( W+ B* q) ]6 H3 A6 u
  20.         draw();
    ( r' z0 L4 W0 @# A2 r2 Q
  21.     }
    5 ?& s- h; _! |0 @' ]
  22. 4 H3 h# w) G! r; j+ k$ h5 U) s
  23.     var draw = function(){
    ; K4 B8 o: b# i: M
  24.         try{
    * Q7 {" p& w; l: q
  25.             backcontext.drawImage(video,0,0, back.width, back.height);; d$ y1 k) c7 j0 l) m- B
  26.         }catch(e){
    ! c2 w1 ^4 m! }
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {
    9 t5 u* X9 K. ]/ |
  28.                 return setTimeout(draw, 100);
    $ S+ c" M+ j9 b3 M( d( F
  29.             } else {
    8 p. U/ v# E* B. g" g
  30.                 throw e;2 Y8 Y" i) q5 X1 I$ H
  31.             }8 r) y, ~% J$ Z! D# i
  32.         }
    ' [, e5 c- j% O( X8 P2 Z1 A
  33.         if(video.src){
    3 K" y9 m8 z1 n4 B* d! n
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));
    3 u0 W$ E4 p9 s7 k9 B5 R  N. Q
  35.         }( ~, ^8 j& C" F* j+ ]& \
  36.         setTimeout(draw, 100);/ s. f. Z" v; d$ v: L
  37.     }
    / Q) p0 I# @$ M% t! s. b* S
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||  Z5 g6 u) Q( ]3 f8 z
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;
    9 X' c' n% m! @/ [1 n& l" M. }
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);
    & c% F0 ?- ^0 u3 P! @' Y5 h: L
  41. </script>
复制代码
  1. php  i$ ^2 I) f+ D- n7 i. h

  2.   ^& k6 o/ L' n, V" f
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);
    , A! G5 A/ p- C7 [/ ^4 Y

  4. 8 m: T) e3 E& U) j6 Z" i, ?
  5. $server->on('open', function (swoole_websocket_server $server, $request) {
    ' x0 l# S% Y% j+ |4 x
  6. 5 U8 h% }8 o' p2 r# k$ k! k
  7.     echo "新用户id:{$request->fd}加入了\n";
    % l+ [+ q$ a* z' g7 E+ q; X
  8.    // echo "server: handshake success with fd{$request->fd}\n";
    % p9 H8 R* ~7 c6 [- a
  9. });' n; r( o+ Q+ Q4 t* H; O) s( C

  10. $ u" p7 l- b, L( c7 V& w* l# `
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {
    & L8 a) ], a2 m

  12. % f4 y: u6 Q5 J2 g6 G3 k- i: d. l7 ~2 F
  13.     //循环所有数据" S9 J$ k9 b2 Z) \4 r9 d. c, R, p
  14.     foreach($server->connections as $fd) {% ~3 ]+ K( ~: N# p6 g& A" P
  15.         //返回数据# \$ n: U, a6 I: _! ^  [
  16.         $server->push($fd, $frame->data);
    ; \* [. Z* N% g  }; k/ ^/ k
  17.     }% O# A+ F9 _" ~; H5 |

  18. ! v6 x6 ]: }/ v7 P1 r# c
  19. });
    . |9 S3 Y# \' j  Z' [  b, d1 ~* M- d$ v' ]

  20. $ r+ P4 |8 T8 d5 I; E! |9 i9 m
  21. $server->on('close', function ($ser, $fd) {# t, K* y: E7 Z  K
  22.     echo "用户id: {$fd} 退出\n";
    % ]- t7 w5 F/ ^  @1 N, V' g
  23. });
    3 d4 {7 X7 K, _
  24. 3 [8 U0 q5 _+ ]7 L4 g2 }
  25. $server->start();
复制代码
) H6 ^2 y5 c5 ~& u, ]: j$ @+ y

# ~) v" j# T. h! ~2 j. |3 b* R
* I2 P! q+ L4 y, H' D. K$ d% j" s5 q
9 S- d7 Z% r2 S; f% l) E( j$ `

5 ~+ Y. l. p3 h# f6 P8 ^+ F! t) y$ }/ n
- c  H# h: w3 M; k2 V1 D( D
2 e7 U# Y) v3 l- ^+ B7 x

# k6 p" e8 _" O' \4 r; R  Q0 c0 S8 _
! n; e' w$ f& B9 O0 s1 {! {
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-2 01:24 , Processed in 0.133994 second(s), 19 queries .

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