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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket
. I3 k- ]- X6 i6 ^2 T' [2 ^) ^上代码
前端
观看页面
  1. <script type="text/javascript">0 e& G( }# Q( R9 Q0 w9 t7 z; U
  2. var ws = new WebSocket('ws://192.168.0.150:9502');
    8 [' f/ h' G, r- d4 C; n$ N
  3. 2 j  y9 Y2 l  E; F
  4. ws.onopen = function() {7 X) \" a4 w( P' O
  5.     console.log("连接成功");5 m6 X) c# F2 N4 L
  6. };
    8 J1 ?# i# c& v0 U/ P; S
  7. ws.onmessage = function(e) {! t: Q& L9 G( H
  8.    console.log(e);
    . t+ t& A  Z6 e" p: ~. i. L
  9. ' i- F: Y/ J2 w: t
  10.    var data = e.data;+ d& }( z7 v3 E$ @  H& D! U- G6 T. G
  11.    document.getElementById('player').src=data;# r/ ?) _$ J) k+ |0 E
  12. };
    $ c; [# F( ~" T3 o
  13. ws.onerror = function() {& N; L4 u2 Z4 P" X2 I2 r7 g
  14.     console.log("关闭连接");6 _& \5 |: n+ Y# v8 q+ O
  15. };
    $ m3 I1 l- W$ d+ |0 u
  16. </script>
复制代码
录像页面

1 _; t/ G8 [2 s0 G) n
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>1 Z: I3 d3 h- T& R0 \8 V

  2. ! D! B, I* F7 U& j% g
  3. 7 G) Z- _6 D9 z2 M
  4. . E1 l8 @" n9 W$ e- z0 e
  5. <script type="text/javascript" charset="utf-8">
    + Y8 x- {( J5 w

  6. / l7 W# K# @& s( t) E

  7. & S+ s8 y/ g9 a1 r( x# X
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');
    ' S1 o8 Z" u6 }
  9.     //socket.send("嗨我登陆了");
    ' `5 B- F8 m8 U3 `- R
  10. ! l# o, f0 ?0 c) n3 \) L
  11.     var back = document.getElementById('output');- ?3 Z' l, [4 l+ F9 p2 p9 J  c
  12.     var backcontext = back.getContext('2d');
    + X2 ~: x- n% M( L+ ?, `
  13.     var video = document.getElementsByTagName('video')[0];
    - V0 |( t) y' `, [, a
  14.     % ~) h1 l8 J$ K$ B* A
  15.     var success = function(stream){; ]' F4 I9 ~; D& q9 v
  16.         video.src = window.URL.createObjectURL(stream);
    . ]% ~0 D* |* F) f% N
  17.     }
    % d- P4 D0 I2 y5 d9 f/ B

  18. 5 P$ F- ~& H4 J. o" g- [% ?9 X
  19.     socket.onopen = function(){3 ^$ ]! \+ [( v; z2 A
  20.         draw();4 [; u2 u9 U: S5 S
  21.     }
    $ v' K. k4 I! m+ W6 u1 o$ Q# a

  22. " O! j1 s. U6 ?0 n3 G1 }- S: V
  23.     var draw = function(){2 T/ Q0 N. l. a" y4 H8 U  Z
  24.         try{  s. }- \5 E( w
  25.             backcontext.drawImage(video,0,0, back.width, back.height);
    " j. P' L" k- j* a- T
  26.         }catch(e){
    % A& t, e4 M' M( L5 g" c
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {7 h2 a  g; j* R% I! Q  }# R2 m( Q
  28.                 return setTimeout(draw, 100);
    / U+ ], n5 _% H6 _% ?, x, ~+ a
  29.             } else {: z( g- {9 g: t) [0 t
  30.                 throw e;
    ) i8 c" k6 n* I5 `  M4 \- S
  31.             }
    6 I1 y/ c7 Y* ~* m, ^# Y
  32.         }
    ' r* |3 \4 D" s, W( y2 v6 c8 j
  33.         if(video.src){$ K6 E1 g8 [4 e+ a
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));3 k$ ~0 r, s! P/ J$ {
  35.         }
    : b  D- q& X. f2 R
  36.         setTimeout(draw, 100);
    / @# C! ~& M0 G  L4 x9 q1 b, c, y3 r
  37.     }! B( Q+ ]) p% {  E
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||
    5 r# l' |. m3 v# W, W, y0 u
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;$ A5 `4 l# o8 v( j' [5 S
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);
    * C% ?4 m( H$ l3 ^: @) r
  41. </script>
复制代码
  1. php
    ) C- Y2 |  ^1 ]6 k3 Z4 |" {; T' w

  2. & d" i2 U6 c; R. C
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);
    1 y6 `- b: {( ?
  4. 9 v7 O% k- E2 b8 d$ R1 ^
  5. $server->on('open', function (swoole_websocket_server $server, $request) {
    & I: Y- z( \+ \6 n! \
  6. 1 Q3 q8 e, m# f
  7.     echo "新用户id:{$request->fd}加入了\n";
    8 D/ Z1 ^+ A1 _+ W7 p* {
  8.    // echo "server: handshake success with fd{$request->fd}\n";
    & `  [/ }( c5 r3 \  @1 }
  9. });/ b  w% m  X7 b) a3 H9 V) a

  10. 8 ~: _1 ~" [, w$ o
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {
    # _( [) H; j6 G# }' v$ a

  12.   ~; Y9 x) G  S4 \
  13.     //循环所有数据
      R) w) i- }! |0 n. ]
  14.     foreach($server->connections as $fd) {2 w( N; @2 F2 |6 J2 N- w
  15.         //返回数据/ `6 b. Q) F% n% ~6 g: b+ k$ V* j
  16.         $server->push($fd, $frame->data);
    , E7 }6 L# }; |1 q' L( e( I
  17.     }
    6 t2 g& I- p6 L$ U, v% Q

  18. ( k. n/ P( o; }/ p# b
  19. });
    ; P5 Q5 v8 \; @: x7 Q5 D' b3 z

  20. 7 ^$ @1 O6 E& }& l
  21. $server->on('close', function ($ser, $fd) {
    9 b2 Z  K; R( z( |
  22.     echo "用户id: {$fd} 退出\n";
    " B( e) w9 G* A
  23. });$ p9 ?* L; i  H, d8 Y# U1 {
  24. " }4 {$ C( H) c# z2 L
  25. $server->start();
复制代码
/ k# i! K8 x2 e1 _
; i- O9 I8 m6 Q& R9 E
- Q* n3 [8 R6 q% Q6 c8 u1 W! ^
% ^0 n' o& v' L( h6 M

$ \0 [5 M+ e* O6 g% S
8 \7 f. E0 H. ?9 r" ~8 z1 C
4 p! `3 N" T1 |$ j5 H4 @& r) |4 T! `* P/ A/ ?8 ~  t3 n' Q

# ?. h' e8 D/ u
3 S# n* u8 W$ q! U; R6 |, a* P1 g9 z  O$ ^; h0 E

, O! }% n. }" e" Z. ]3 C( S6 _3 h
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 01:01 , Processed in 0.150907 second(s), 20 queries .

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