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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket. ?. p! c& s4 p
上代码
前端
观看页面
  1. <script type="text/javascript">6 J- I( d0 k3 ^2 O% u$ C& D4 O
  2. var ws = new WebSocket('ws://192.168.0.150:9502');. E# h- p. x' c* z; E' }( P% J4 n

  3. 6 @3 L* e. z: M0 {7 d
  4. ws.onopen = function() {
    , w& h6 {" [4 k) {8 t2 l- `
  5.     console.log("连接成功");% h) ^: @0 v  c
  6. };
    9 S( y) M' U+ k( t1 w
  7. ws.onmessage = function(e) {% L  {. o, _, U! G" {
  8.    console.log(e);
    5 Z0 e( X8 K6 w; c7 ^- r9 S6 M

  9. 9 m% m* |- U( o% B8 v  P- _
  10.    var data = e.data;
    1 i# u& N9 V) W
  11.    document.getElementById('player').src=data;
      K( k' c0 [# \- m6 k' e; K! C
  12. };
      _! R0 v- \6 j# p
  13. ws.onerror = function() {
    , I+ k/ b; E& c0 X
  14.     console.log("关闭连接");' Z. y3 W8 d1 X- I$ {8 M- F
  15. };
    3 N1 |. K8 L. ^
  16. </script>
复制代码
录像页面

6 J  ~4 M( m! _" M4 u
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>6 m" W6 D" h; S4 Q

  2. 4 _+ e6 H- c' \0 Z; c3 M
  3. 2 L9 w: J* n  H4 ?  |6 N" C4 a

  4. 4 l4 S; A% \2 ~9 v% G
  5. <script type="text/javascript" charset="utf-8">  H" v1 e) d7 K6 `. z' V4 n

  6. ( _4 M% ?9 l1 _4 L6 n  _! W; p

  7. 8 |! M0 L( a/ X, I* D
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');. u# p5 n% j# ^/ H
  9.     //socket.send("嗨我登陆了");
    & C9 _$ v0 n% r: G

  10. + l7 t. ~- R9 H9 f/ V; j
  11.     var back = document.getElementById('output');
    $ C2 F' _( z- W  k! W
  12.     var backcontext = back.getContext('2d');9 L/ H8 I. A5 e$ Y+ g6 `
  13.     var video = document.getElementsByTagName('video')[0];
    3 o& X% N4 |0 A* m
  14.     / Z' [" }9 Q0 F. M5 E: A
  15.     var success = function(stream){* I! X, c4 ^. b2 z
  16.         video.src = window.URL.createObjectURL(stream);2 B, r/ t: E: w8 ~) s
  17.     }; |% C  B1 ^1 n
  18. - g7 p% D" [$ ]" t% W, T2 [) J* h, V
  19.     socket.onopen = function(){) w8 S8 d6 Z2 G6 d3 P& G
  20.         draw();; s4 |, z. S* B" x. \& m' f' S2 I
  21.     }
    * {4 j" N* @# |% P" A+ W
  22. 4 K! f. ^, K8 Y/ X
  23.     var draw = function(){
    * g( N* k: A1 d& N+ c, ?( x" d3 _5 }3 j1 R
  24.         try{% }' J: p0 o. e4 d+ C% c
  25.             backcontext.drawImage(video,0,0, back.width, back.height);) @* ?4 v9 W' V8 t3 b, C) M- n
  26.         }catch(e){2 B1 r+ s2 H. o+ E  p; `" b' }3 S. m' x
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {
    ' W, q7 r% W" h% w8 C
  28.                 return setTimeout(draw, 100);
    6 I1 S  D. J* [' ~
  29.             } else {2 s6 [! N8 ~. t6 j
  30.                 throw e;1 M4 h) C" W4 Z* N7 W7 i- E
  31.             }
    1 s, a& F9 R' M3 j
  32.         }
    $ L+ k3 L# {1 b
  33.         if(video.src){& S8 l' G" C" Q% q
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));
      l# o3 X# G1 G' ~9 a
  35.         }
    . l' z  \* N/ @
  36.         setTimeout(draw, 100);2 Q" _9 `: f7 j3 b
  37.     }! x9 T& y$ o& v' h/ x, x% c. j
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||
    % c, b# i$ d. o5 \! R
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;7 Q  T3 u& s  l- D/ l: v
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);
    ! P/ y/ p- L7 @: Y! o6 r
  41. </script>
复制代码
  1. php3 g$ F& c8 C. d  j

  2. * ~) l6 {" {9 {/ H0 r
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);
    " y0 U8 B! `4 F+ V0 D. H; i) b
  4. 4 Y$ x) ~) v8 E7 ~8 ]3 t
  5. $server->on('open', function (swoole_websocket_server $server, $request) {2 w3 Q2 t" P( s7 b  {

  6. + K, z' _! l) v
  7.     echo "新用户id:{$request->fd}加入了\n";
    , A3 O" C5 ~' \4 a
  8.    // echo "server: handshake success with fd{$request->fd}\n";+ _7 R3 B, Y( B
  9. });5 @. l" D9 h( A4 c3 H4 e
  10. 7 ]! U2 n, ~. K. D. e. h9 X
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {
    + u& C: C- d% @4 ^
  12. ' ?# n: i8 E) T$ H& L3 i
  13.     //循环所有数据( [& H0 W4 v& Y' L5 D. e7 O* u8 i
  14.     foreach($server->connections as $fd) {
    3 _: i! N4 b2 v" v9 S0 k
  15.         //返回数据
    6 n1 ~  @$ x  M; L
  16.         $server->push($fd, $frame->data);* M7 S' C8 u( _4 Q0 X+ S  Q
  17.     }  {2 j' e; c  m; ]. `7 w+ P! Y' `
  18. 6 m: }* {6 b0 D+ r
  19. });
    0 q9 @  v" z4 t0 E+ J7 C
  20. ( ]9 {3 N+ z: o& E
  21. $server->on('close', function ($ser, $fd) {
    $ g! c# b, U8 ~5 r1 b" k' M
  22.     echo "用户id: {$fd} 退出\n";/ M+ ^9 S& Y: P0 E0 i: ?' M
  23. });, @1 _* s6 y1 l+ H& y6 z' h* y
  24. 3 y* ~0 ], K# ?5 N8 M  y0 @% N
  25. $server->start();
复制代码
6 P1 S0 {9 p* b* o8 U' r, _8 S+ X

: I* |# p5 v' [+ ~5 _$ g6 ^
4 M+ J% Y+ ], g; Q% d6 j
1 p$ F5 G0 K  G$ f7 \3 q( [. G4 M& v7 I. ~# f, l9 P; k# P

/ v: {: Y2 `; F8 ^, I
. U) [( v8 A: w' G: s8 k  [
5 F  T: e. u0 H+ l3 F8 Z7 p6 ]! f3 k# k: m7 S
3 u3 R! G9 v; R% F  x2 m/ U6 D

% T% Y7 E8 o" C% j; h) [* a1 T
7 U8 W5 \. D3 @9 k  d6 x8 i  _) [$ A
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 11:10 , Processed in 0.110006 second(s), 21 queries .

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