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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket
) P( Q; m1 j1 F' v& g# |上代码
前端
观看页面
  1. <script type="text/javascript">
    $ C# w* u1 Z9 t4 ?& z5 a) v3 I
  2. var ws = new WebSocket('ws://192.168.0.150:9502');
    4 \/ V; _  j1 x
  3. & w# n( {4 p4 L
  4. ws.onopen = function() {
      P6 m- k  B) Z' ?
  5.     console.log("连接成功");; x- ~. i- F7 K  z
  6. };
    4 y" M: r0 w0 |# r0 N, U. s  p* E
  7. ws.onmessage = function(e) {
    6 o6 N' q# ^# K/ x9 R# o
  8.    console.log(e);
    ( n0 ]/ E# U2 {' d- s) j/ {

  9. ! m  {5 M9 _6 L
  10.    var data = e.data;
    4 m3 h8 Z7 v" [+ I- M
  11.    document.getElementById('player').src=data;
    2 Z0 Q2 R4 u3 Y5 _& e0 Z4 R
  12. };
    $ z1 W, {0 ]0 i* ^/ D0 ^
  13. ws.onerror = function() {- U) P1 N& u2 U
  14.     console.log("关闭连接");
    & X  |6 o9 l% j% w' d/ ~. \
  15. };& r& G6 t0 W# ?" d0 p+ \6 w" B, q  O
  16. </script>
复制代码
录像页面
' F% M( m; e5 X5 w
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>8 t0 \$ N# z5 |" ^0 b# d2 B
  2. $ e2 G7 S3 r: t# V0 |! @& f

  3. 9 B; {/ x* e: `+ ^9 s& c4 J5 M

  4. 6 g% v3 S& C3 D
  5. <script type="text/javascript" charset="utf-8">
    1 O0 [( ]5 l+ }: t6 \

  6. ( Z2 g) a! g7 J5 }+ G5 d3 C/ @2 d

  7. 3 N1 v5 l# g: X) _8 r
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');! A, R. x- r+ `1 H8 w8 o
  9.     //socket.send("嗨我登陆了");# x, K. d4 W7 G, {
  10. % u3 o" e% N1 t5 c9 Q  R1 L
  11.     var back = document.getElementById('output');6 z; {9 e1 v; \  @  ]* r
  12.     var backcontext = back.getContext('2d');
    : W( O0 n6 i0 C8 ?0 E3 }1 l
  13.     var video = document.getElementsByTagName('video')[0];
    9 ]5 z5 E- [3 j( g' R
  14.    
    2 Z9 |  I0 U$ ~( u; M' V
  15.     var success = function(stream){7 z( z5 ?; A5 ]# E; z" z
  16.         video.src = window.URL.createObjectURL(stream);
    9 D5 N" B9 v3 p& R
  17.     }
    + x. B7 F/ `- r' C; [  F. T

  18. , d6 ^9 D& F6 |2 s8 Q
  19.     socket.onopen = function(){
    + j! m: d* O* b5 F& `5 L* A
  20.         draw();
    8 C' j- Q; G& |: t" A
  21.     }/ ^1 m  i* o7 s' o/ F

  22. % @& C- A2 E# i1 ^5 Z( s
  23.     var draw = function(){( P6 o4 _- e. D- G" f- `
  24.         try{
    ( Y% M) [% v  T
  25.             backcontext.drawImage(video,0,0, back.width, back.height);) f* j8 f  @$ r) T5 q( a! P
  26.         }catch(e){
    . u+ \( b) p1 A2 |' s
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {2 X2 p* }) q/ o4 R1 V
  28.                 return setTimeout(draw, 100);
    ! u1 }9 C4 P; k- _
  29.             } else {$ D3 w5 C4 u, P; g( X3 @
  30.                 throw e;& R. {, U; L  A, Q6 R) X
  31.             }
    . E% u. U" p# U" v4 }" P# E0 w" N
  32.         }
    " r/ B4 t& W9 {
  33.         if(video.src){8 d; ~7 G, `: [7 D* S/ \
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));
    $ j* M# U' k/ ?! M7 I0 M& F- B
  35.         }9 w' R0 ~  z# y/ V2 F) Y1 E
  36.         setTimeout(draw, 100);! [+ e3 B! i  @8 C: j; K2 X
  37.     }8 ^! k% b# S, K$ W
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||
    ) [, \! e, I, E* e$ {" k
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;
    7 G0 s* z+ x7 ~5 p' l7 |+ i
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);; f3 Y! |6 N' ^- b2 C
  41. </script>
复制代码
  1. php# ?) X2 Y  e0 ^& v  }6 T  N

  2. - K3 Q3 H: U) B; }3 G; ?6 ^" T
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);) o; g2 E3 S$ v: i8 `
  4. 6 ?' V5 s: m' A8 C7 J( g' ]
  5. $server->on('open', function (swoole_websocket_server $server, $request) {
    ! R" I& x+ [; W+ p% T

  6.   b% b& w& H# C& |: k
  7.     echo "新用户id:{$request->fd}加入了\n";' L- b1 X- l" D' V
  8.    // echo "server: handshake success with fd{$request->fd}\n";
    & `+ p: U, Q4 g# |/ E) z' o
  9. });
    9 i0 M2 A+ ?7 L' [' ^. x! F

  10. ) d6 [  B1 a% X- A
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {3 W/ i$ w6 O1 S' {2 }
  12. * u6 T; t% D; S+ g( K# H8 K" G6 G
  13.     //循环所有数据$ t, I4 h8 @: k2 g
  14.     foreach($server->connections as $fd) {
    0 C! h2 h- _, X* t' c
  15.         //返回数据
    1 r* W5 ^, s/ I6 b5 O) E
  16.         $server->push($fd, $frame->data);
    * S. U) w0 N5 O( g3 z9 D
  17.     }
    ; L* ]& Z* h+ Y1 c3 {; W" U1 E: C
  18. " q1 N5 u3 s. r* E! c7 G
  19. });
    + M3 {3 C# V0 u3 A0 O2 c. K7 R4 J

  20. 8 V5 R% Y2 O, L' ]4 K  M& S
  21. $server->on('close', function ($ser, $fd) {
    & G" O* j4 g" h# ]) j3 s9 [* u1 h5 h
  22.     echo "用户id: {$fd} 退出\n";
    & d  E, i* \( N
  23. });; ?4 @4 g2 x) p9 q5 A
  24. ( C$ H* l% D8 ~8 h, _, T- D
  25. $server->start();
复制代码
+ {4 d. t) ~1 I* p8 t" s

; m5 ~2 I. h/ ~  `! |% x9 e
$ A# H6 N" ~! Z' y. _
- @' m+ f+ |$ E* d7 ]' x1 k6 X7 b2 P* l5 O

7 ]' F# B' Q8 _5 X) q
# C& y4 N( F- j) V5 s' V3 E4 G- U: B: C  V( u
2 R+ U1 k2 I) `; g
& t1 k* u  h. m4 x0 c

; U9 G. U0 o7 O
: C* o1 h* t9 Z4 G0 f$ I0 |# H* ]9 T9 r! }
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-4 08:12 , Processed in 0.065265 second(s), 19 queries .

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