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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
主要使用 webstocket
" m* n# Z! v2 j5 C上代码
前端
观看页面
  1. <script type="text/javascript">: _8 E: F6 A& k
  2. var ws = new WebSocket('ws://192.168.0.150:9502');
    4 Z3 g) w8 P3 j( [( U% M- L  K

  3. 7 l" Z+ C, F5 k! _0 ^& d9 l& V( Z. ]
  4. ws.onopen = function() {
    # o( P3 ?3 g) {4 t! k
  5.     console.log("连接成功");
    + V0 G4 r: e& A& g3 f( o6 s: f
  6. };, I0 Q+ U8 k3 }$ S( m& |  r6 C
  7. ws.onmessage = function(e) {3 q* p0 o, p& M/ R/ M3 _- _
  8.    console.log(e);( W# g* `7 V* A! @; W+ [, J$ F

  9. ; _: T2 ]  X, I  g/ j  n
  10.    var data = e.data;0 C, [8 x! u* U
  11.    document.getElementById('player').src=data;
    & c, a# y8 c) t6 q, Y! ^
  12. };
    2 b  D& H5 Z! Z) w
  13. ws.onerror = function() {, ^: n# I+ y5 S! ]: f, ^
  14.     console.log("关闭连接");
    # Y/ a  z4 {/ v& d# B
  15. };8 s/ n- [$ s7 Q4 u1 V
  16. </script>
复制代码
录像页面
4 J1 J& f" x2 [. A% t5 W. q
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>* H, x! Y+ }- C( ]% F8 Z

  2. ) d. {4 E- r* S, x7 @8 ~

  3. 0 r) F. k3 g. y& r. \) M- g
  4. : U4 q7 Y  O2 `: {7 `' C
  5. <script type="text/javascript" charset="utf-8">
    4 g3 r' F& i( B1 S- ~
  6. - D. ~% y) M1 Z, @. s; @

  7. ; m# M6 B! |' O1 B1 u* l
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');
      W* B  I" U4 S9 Q4 p4 j
  9.     //socket.send("嗨我登陆了");
    ! a5 M0 r' b3 z6 G1 |1 ~

  10. - R' t1 b8 H, M8 g$ k
  11.     var back = document.getElementById('output');6 W/ X" r' z% U
  12.     var backcontext = back.getContext('2d');
      o0 W& M. y" J: b
  13.     var video = document.getElementsByTagName('video')[0];) D7 K8 d6 _! v" d
  14.     & D* U1 P( k+ s6 ?
  15.     var success = function(stream){
    ( @% @1 s  r& Z7 n
  16.         video.src = window.URL.createObjectURL(stream);
    ( ?+ {0 p4 \( f- ^( m
  17.     }: x# k# q4 o' w0 v; b" o5 \; C
  18. 0 e0 C) H5 c' {' d( O, l
  19.     socket.onopen = function(){
    0 }, z  A$ C' {5 A. @
  20.         draw();' h7 J) f% \$ o0 G8 x. O
  21.     }
    % {8 V9 e* g9 L2 b
  22. * K+ g, s$ S7 e! D. ?* X2 C) L; i( ]
  23.     var draw = function(){
    - ~# \1 p2 f5 e- Q1 D$ X  D
  24.         try{
    4 _1 j, y: Q" c+ |7 Y) [! p
  25.             backcontext.drawImage(video,0,0, back.width, back.height);
    5 m( x8 |+ V; o6 _' ^! y9 s% W- E9 d
  26.         }catch(e){
    - j9 j) I# _( y& H% f$ e0 p
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {
    6 K/ v. c# X! m. Q( w+ E
  28.                 return setTimeout(draw, 100);7 K3 ^% W- q( D& _8 t# u
  29.             } else {
    + |5 J; l" @; h4 D
  30.                 throw e;( _+ s2 e; y9 |
  31.             }
    / J+ M( D9 V0 v! V) I& H
  32.         }
    ; u" N3 G5 @9 c1 ]/ t
  33.         if(video.src){
    ; q" s5 E5 @/ z& J9 Z8 H
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));: i* d! \' z8 B. H
  35.         }
    " G  K/ j  a4 }& V  B7 O7 Y
  36.         setTimeout(draw, 100);
    2 T& ~! w; A% i: s5 Q, G# f/ ?, {
  37.     }
    7 O# E' ^3 n; c- ^4 b5 J+ ]0 p! {" `
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||9 P4 R- I* M$ P: O1 J. [, c
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;
    ) j% S3 S* D9 o
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);
    % ?% i% _/ N. m2 y* f
  41. </script>
复制代码
  1. php; J7 H* c) v, Y7 d2 i

  2. 1 a1 o/ T$ ~' s$ O  E
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);
    % C( |: A  Z$ ~. \4 v) ^2 a

  4. 7 `& p! `) F( x6 y4 C
  5. $server->on('open', function (swoole_websocket_server $server, $request) {5 D- c7 W& P6 o0 J: }3 N0 S

  6. , u) x7 ?/ k0 S6 ]# H; ~9 Y( Z+ i* b
  7.     echo "新用户id:{$request->fd}加入了\n";
    . }/ T( q# u4 C; a) d/ ]+ w0 p
  8.    // echo "server: handshake success with fd{$request->fd}\n";
    & F* P; n; x' R3 u
  9. });) [- C; O' l* G1 e- f

  10. # D! n) o/ }4 w: \8 Y) e7 ^
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {! M# ]1 g0 q/ b* h) Z. N( Z2 l- g
  12. . ?  I( P1 t3 A: z+ o
  13.     //循环所有数据2 i2 v3 W; N0 H' z
  14.     foreach($server->connections as $fd) {' x  }, j. j7 [
  15.         //返回数据
    ! }3 J4 T: N6 Q* M4 h
  16.         $server->push($fd, $frame->data);
    6 q' w& o) S) k; s8 t  Q
  17.     }/ l& H' c# a% F) B
  18. / \4 N, n! V) ]+ ~. F  C
  19. });
    . w+ @' X) `8 R: Z  h5 l8 X

  20. * P! o, T& C4 u6 H; \; ?
  21. $server->on('close', function ($ser, $fd) {
    7 D0 Z& [5 V: G7 `4 j  X
  22.     echo "用户id: {$fd} 退出\n";- k. s4 B1 U3 G7 T9 Q) `
  23. });
    0 N! w- l- P% U$ e* W$ r. A$ a! r% |8 K8 Z

  24. 9 \) C1 `# h1 |+ l7 n' g
  25. $server->start();
复制代码

, B, a) V# U2 I; n; Y- X. ?: D* R/ X! p
! Y& G% u: V1 ?. K5 c
2 k9 _8 @+ G' v" m
9 o6 r( l5 j5 u/ k

4 }- u/ M, y6 n% K
! v2 y" D- {/ k) u, J: ?0 ], d7 B3 d/ h" a8 A, J9 g$ V7 [5 b
* p: V1 \# z; Q
: e3 {9 m' A! h5 h5 s( h: L$ Q9 [- L

" I- Q3 u0 U7 O3 b9 ^# l1 ^
$ J! Q9 I# f5 L3 i- t1 }
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 16:17 , Processed in 0.118723 second(s), 20 queries .

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