cncml手绘网

标题: swoole 直播 [打印本页]

作者: admin    时间: 2020-3-31 19:41
标题: swoole 直播
主要使用 webstocket
3 g  _9 [8 h# k( O( i" o, l上代码
前端
观看页面
  1. <script type="text/javascript">: M+ R) z- T& l/ B
  2. var ws = new WebSocket('ws://192.168.0.150:9502');+ Z0 y' Z  M4 P
  3. # i( l9 l% K/ ]8 t4 t
  4. ws.onopen = function() {' X; I/ n% S1 w+ H; j
  5.     console.log("连接成功");
    ) W! I8 U# @9 @1 L
  6. };
    : t! K, Q  l# j8 y
  7. ws.onmessage = function(e) {
    & F2 j; |! i$ u. F* v
  8.    console.log(e);( X. L! L' c7 y8 E$ X
  9. ! e( T+ D8 [7 e* J9 E# f) k
  10.    var data = e.data;
    9 p7 A4 J8 H# A
  11.    document.getElementById('player').src=data;  a1 _( C: y3 m: A) z, ~) N
  12. };
    - G0 H- ]: ^3 x/ w  z" d
  13. ws.onerror = function() {
    # ]0 t& r8 L' ~3 ?, D# R) `
  14.     console.log("关闭连接");
    " ^, @& `* N6 B. a3 G
  15. };
    0 X1 F# ?  D3 x: ^( L9 u4 ~1 u9 V
  16. </script>
复制代码
录像页面
6 {8 ^: q, r) ~& ]
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>8 `+ B1 ~! b; Q* f
  2.   d( M" R( H- ~, x5 }$ t+ E
  3. - G( ]3 C6 R7 D
  4. 5 M! f7 G. A; U
  5. <script type="text/javascript" charset="utf-8">0 ]( q6 \! E& Q+ x3 e# J8 _6 V
  6. . @+ n' }) n  x+ ^4 ^( I; M
  7. ( W" F* D! m* E6 L& Q
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');
    ' n' w/ |& V& I% t9 u
  9.     //socket.send("嗨我登陆了");
    * a: q. y0 @: g% O$ p& o* a; Y

  10. 5 _& o: r% A+ @8 ?
  11.     var back = document.getElementById('output');
    : p- n/ o, u0 j% k. m5 L3 O
  12.     var backcontext = back.getContext('2d');
    . {% ^* V- V# B+ n$ l
  13.     var video = document.getElementsByTagName('video')[0];
    , {% u5 f. l8 o4 ?
  14.     - u0 Y" o3 h9 q! f
  15.     var success = function(stream){; l) g7 T+ r$ v9 H
  16.         video.src = window.URL.createObjectURL(stream);
    ! w/ Z' F* M* J9 [# v$ J
  17.     }
    # r, R+ o, ^# \4 `: t6 f. q
  18. + T7 ~8 ]# O9 G* K3 L
  19.     socket.onopen = function(){
    , ]# S7 f1 j1 j( h/ `+ _) b- V
  20.         draw();
    ) D; c  F# b2 i
  21.     }: T( P5 N/ Q- j2 S1 l1 s

  22. 7 B1 W+ |7 ~. R% _; F2 A% e
  23.     var draw = function(){
    4 ^" T; k& A) s
  24.         try{; f/ F& Z: a  [. Y" ^/ C2 Y
  25.             backcontext.drawImage(video,0,0, back.width, back.height);3 G6 @  o2 O- W& X! R7 D
  26.         }catch(e){
    * Y6 H; i' a1 V* E  M8 \  }8 z" I
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {
    ) U' Q8 ^6 z. m# d/ H" e  J
  28.                 return setTimeout(draw, 100);; A- }7 q2 w' A8 d5 E9 U
  29.             } else {1 E% t) \) Y- v7 [5 E
  30.                 throw e;: J7 v" w3 `! d5 F& E% f, c" `
  31.             }9 h) B! y! N' |4 V0 a1 S( A1 ~# q
  32.         }
    1 F7 y4 J6 U" v
  33.         if(video.src){
    1 T% ]: u1 _1 V2 W
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));
    5 A" ]5 G3 t; f
  35.         }
    " r5 U4 R/ ?! F
  36.         setTimeout(draw, 100);
    ' J" ~  @/ _/ Z8 k% y
  37.     }
    . l+ J- t5 g# c# h
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||" y0 c! T6 Q2 o, g
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;
    # m3 P" j1 L7 H. g5 c2 k& s; H0 z
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);: T  j8 z. q; M
  41. </script>
复制代码
  1. php# G1 s9 k  J  W) t% v' y3 X
  2. 8 N+ {& b/ t- E- u( z
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);% I0 A0 F. M! Q9 Z" A4 b
  4. ' r$ S0 R" Q1 r* `; N' w
  5. $server->on('open', function (swoole_websocket_server $server, $request) {
    ' W+ D1 i- |/ n, T$ @* j6 p
  6. 5 O# Z0 P: V" o% s- K* R( I5 A" d. _
  7.     echo "新用户id:{$request->fd}加入了\n";
    % Z/ M% |' U' t/ \& h& J) M
  8.    // echo "server: handshake success with fd{$request->fd}\n";: R* l: ]+ d; |6 H
  9. });7 i9 `3 H5 v$ A' `2 Y

  10. 1 M  W" Z1 {, Z( g: X
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {
    % \: B' A  {/ _7 [* L
  12. + B' V; i2 z! Z( G5 ?6 Q+ P. U/ m
  13.     //循环所有数据
      T6 Y- N( n' S. N- S" n1 d
  14.     foreach($server->connections as $fd) {
    , r6 g; u. j6 o9 B2 v) o' ^
  15.         //返回数据4 W$ r' i4 Y: m% {. v
  16.         $server->push($fd, $frame->data);$ w8 C) L! I: ?1 _' c4 t1 `+ }
  17.     }
    * a2 G! u3 b' d+ X" s2 q

  18. / {! s0 t1 a/ ~; Q) E% }1 T
  19. });7 [' ~/ L2 b4 l$ t* t0 t
  20. 2 @1 `' L) ?$ P( f, r. J' |0 `
  21. $server->on('close', function ($ser, $fd) {
    " Q3 L! p* c6 e2 |3 T/ m/ C
  22.     echo "用户id: {$fd} 退出\n";# r5 @  D# F& n  K1 A) ?" z$ ]
  23. });
    ( M: f. p% j' l, r( {# {+ k+ U
  24. ; g3 m) A. Q, {. Y
  25. $server->start();
复制代码
, E6 A% k5 }% O) o

! j( B* d: X5 A/ ]! _5 h8 S
4 o6 X7 H+ c/ |! S+ Y  b$ N0 n" ]
' s; G! u9 u+ b. ]4 }! h" \( c/ L4 f7 o* T4 m
: O! r! H8 i7 V- i% y
) y: H# j, K. F1 E

5 D" V! u  Y: b. d% l+ S0 N* R4 A0 O

8 w* {5 O) x3 M* W* e
; ~3 S0 q+ Y) j+ Z$ I& R6 R* i# v: `; D7 M/ S/ A





欢迎光临 cncml手绘网 (http://bbs.cncml.com/) Powered by Discuz! X3.2