cncml手绘网

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

作者: admin    时间: 2020-3-31 19:41
标题: swoole 直播
主要使用 webstocket4 G5 _8 s+ `1 e( c
上代码
前端
观看页面
  1. <script type="text/javascript">) y6 @: S! _  {
  2. var ws = new WebSocket('ws://192.168.0.150:9502');
    1 H, y$ s0 C0 \! h9 n; x
  3. ; {# S) ^" ]. H5 N& {0 ~
  4. ws.onopen = function() {9 e% B$ q1 N, T5 G1 k
  5.     console.log("连接成功");
    - v$ D6 l7 \( I
  6. };
    ; {5 L# k% C9 H. G; n
  7. ws.onmessage = function(e) {- b, P9 C. p6 d" c/ ^5 V  J
  8.    console.log(e);
    2 z) J5 }* l2 M) t4 N
  9. - Y& d. {: Y$ d( V
  10.    var data = e.data;4 B0 g% o+ O1 q+ S4 B
  11.    document.getElementById('player').src=data;, {$ H4 z& o0 \5 R$ o$ w( l* \7 E
  12. };+ m* N: z) Q; h3 e0 d
  13. ws.onerror = function() {
    3 q) k4 H: }( Q7 _) ^' ^* W
  14.     console.log("关闭连接");$ D* O0 y+ ]0 d
  15. };5 G" Z5 G3 F. b; U. C( i( t4 z
  16. </script>
复制代码
录像页面

% x: ]% t- m' q. Q
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>
    # X& H( ]( Z( E6 q
  2. / V! z1 Q0 t& M, D3 s6 V4 g6 o
  3. 3 J$ Z2 T% e2 S( S

  4. 9 @; n" O' H. G+ ~2 m" s
  5. <script type="text/javascript" charset="utf-8"># `# Q; o) E: |! l2 K5 l

  6. ' u7 M; B5 Y/ d; Z  w+ J+ [

  7. & K2 f" W( t- o% w
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');
    1 s. @: j( T  g  A( Z2 `9 Z
  9.     //socket.send("嗨我登陆了");. n, w- l  T  e) o* ~5 l

  10. 0 V0 U! A0 x& q1 E) A
  11.     var back = document.getElementById('output');
    7 o$ @6 @% e/ c8 E- K
  12.     var backcontext = back.getContext('2d');
    7 a  I5 E9 t. A
  13.     var video = document.getElementsByTagName('video')[0];
    ) \. k7 ~* o" y1 Q& J: t% j2 L; q
  14.     . d" V# J- m) O* h; H
  15.     var success = function(stream){
    / d4 ]9 U! r0 ]$ y" P
  16.         video.src = window.URL.createObjectURL(stream);- d( ]1 ~/ L" |
  17.     }+ ~7 A! t/ @  J& G) H" `

  18. " O2 P3 ]2 s4 l5 X7 D
  19.     socket.onopen = function(){
    $ Q" ~" u6 p! a5 f- l" T
  20.         draw();
    ( N, d# E1 |7 {  V( e; R7 Y. T
  21.     }7 n* E0 g. x4 M3 J
  22. 9 q& s3 e6 v9 S8 q* I
  23.     var draw = function(){
    % G: m: F+ h! `& c7 O7 q) o
  24.         try{
    1 A8 s  J; C+ t& u# D/ d0 J! {
  25.             backcontext.drawImage(video,0,0, back.width, back.height);$ j; y# \/ b- h3 b
  26.         }catch(e){3 n/ B- f) L: Q) h; |* |5 V" T
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {" F; c7 `, ~$ ~( Z& ?" Z/ _
  28.                 return setTimeout(draw, 100);
    6 e' V" ?7 k% t  [$ g: I
  29.             } else {# P0 n$ S3 W' K5 j& o4 M9 \& b
  30.                 throw e;
    2 ~. ?1 x# G, h  u
  31.             }
    0 t  X; H5 i( Y
  32.         }
    + ]+ Y4 h; L- i- r
  33.         if(video.src){
    0 v% X, @  j+ ~) W5 g
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));% a) s7 P: F+ C* h
  35.         }
    # z( s! j" y" Q9 l7 A
  36.         setTimeout(draw, 100);
    / J6 V' I$ U( D; }$ A7 \& x
  37.     }6 u3 f. Z- p) j* I. y. O
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||/ E5 w3 a# `  ]3 I. `6 }
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;
    & o+ q  H* }2 G4 J0 h& L: ?; e
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);% Y( |1 H. P/ y6 l! c- g
  41. </script>
复制代码
  1. php% W7 o* _5 m" L" R

  2. " e: _7 ~' H" u; m
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);
    : V$ Y$ A3 K2 T8 s( Q4 X% Q

  4. 6 S! V0 Y# I6 T) i! v
  5. $server->on('open', function (swoole_websocket_server $server, $request) {
    2 w" G0 j1 O  ]- v, h
  6. 5 r# n  {- t" q# G1 \
  7.     echo "新用户id:{$request->fd}加入了\n";# S0 F9 y2 K4 _1 W; {, O
  8.    // echo "server: handshake success with fd{$request->fd}\n";1 c( Z: K4 ]+ V+ @# ~9 ^2 o8 P$ A
  9. });
    $ E1 x9 S. p0 j1 s2 @* V+ ?' {
  10. 6 T) R. D+ c- i7 o/ G/ _$ j
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {
    . V4 y9 r# B$ W0 V
  12. ( k0 g4 S) D7 l
  13.     //循环所有数据
    4 Q/ v2 _+ S5 H+ f' r6 d- U
  14.     foreach($server->connections as $fd) {; l2 t7 f6 y) _  Z
  15.         //返回数据" u0 g0 O8 s# B) o) z& g
  16.         $server->push($fd, $frame->data);
    6 W9 J( h* i/ O" B/ q6 n# I! M
  17.     }0 V' A9 I" ?( ~& h+ z

  18. 2 o! W0 s2 U$ v$ O$ }. ]3 ^
  19. });
    7 U5 A$ i( e, u7 P7 Z
  20. 7 ^2 Y8 Q0 N( K5 c1 A4 B/ j) k7 u
  21. $server->on('close', function ($ser, $fd) {5 @7 S8 i( d5 k( E
  22.     echo "用户id: {$fd} 退出\n";9 m+ W& e- Z) |, d
  23. });# A7 a+ x6 P. g; Y  {- t. {+ ^
  24. 7 T  g5 T  x2 E# }
  25. $server->start();
复制代码

- s# @, p# u5 Y5 W% Z) T( P) L9 s1 D, g
* f7 L+ v; y9 z/ X0 Q
0 O) G5 }2 q$ o1 W. T0 M6 _& a% e  v8 R: x0 w$ b

& J5 F/ ?& Y, C" C: @' S8 E$ L+ K% ^! @$ b
* o* w: b3 p" Z; V. v) u0 v

% E1 T9 v, m4 _  Q+ D
6 `/ z' n0 \* v& p" u& t0 x2 f# f& k  |
" `( x! e/ t2 ~5 ~2 e( _& h

2 A4 N" D" g5 L/ Q8 o* H" h




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