cncml手绘网

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

作者: admin    时间: 2020-3-31 19:41
标题: swoole 直播
主要使用 webstocket' w  o% ?" s2 G% H! ]. u* o# R( p
上代码
前端
观看页面
  1. <script type="text/javascript">; ?+ u! `* @! z, N3 o# {  S. u
  2. var ws = new WebSocket('ws://192.168.0.150:9502');
    0 b# h3 N1 O% p" J
  3. : p3 ^& y, m5 |0 g  e) ^
  4. ws.onopen = function() {
    2 {2 K" R, D. P: N& q
  5.     console.log("连接成功");
    ' q* X, E- c8 l2 y
  6. };6 n: u+ U0 L8 v* n- P
  7. ws.onmessage = function(e) {; ]! ?( I0 d7 [
  8.    console.log(e);
    1 i9 h: y, [  q  Z
  9. 5 c% z4 e) N, p" C
  10.    var data = e.data;
    - O& r: ?# k5 l# b/ ?! M; l( k
  11.    document.getElementById('player').src=data;7 s+ k* I/ n) {! _. F" w
  12. };
    * V0 Q$ V9 I3 {$ c/ T$ G
  13. ws.onerror = function() {
    / k2 h; T) {7 l
  14.     console.log("关闭连接");
    4 P! J: E: a! Z) G) V3 l& i* r8 w
  15. };3 C, \( C9 X% y0 f7 {
  16. </script>
复制代码
录像页面

6 U8 w8 v7 z$ s) B0 d
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>
    + f- r& V: W1 J, S: B- l
  2. % i3 m1 S3 M3 c- o# u4 h
  3. ! j" y& e/ U9 i# |. M3 W

  4. : p$ }7 E# V- r. V
  5. <script type="text/javascript" charset="utf-8">
    0 L( D1 h5 T7 `, J; H1 R8 X

  6. * ?, @$ @' A5 y3 w$ d
  7. / ?7 F  E5 k' Q0 D, _0 U9 r5 g, L
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');
    / m' ~# K' S- H) N) l1 ]
  9.     //socket.send("嗨我登陆了");
    . |8 J; V/ Y2 B+ K( N' Z- b
  10. 2 ^, ^9 j" q. v
  11.     var back = document.getElementById('output');
    # C) [0 A- b; R+ h' |5 u$ L8 R) g$ ?
  12.     var backcontext = back.getContext('2d');+ f, ^* o; u$ A9 U: ^# ~7 |& s
  13.     var video = document.getElementsByTagName('video')[0];+ l5 W' e1 W; ~& o0 M+ r: G. K
  14.     + V, o3 G; d0 r* W/ m! o( j( A# _
  15.     var success = function(stream){
    & p# R" O0 T  p0 B7 p5 [% P
  16.         video.src = window.URL.createObjectURL(stream);5 v- h6 j( C+ s5 {4 k
  17.     }  R* e! K& _/ H: }

  18.   Z- \0 k  e0 _% x4 A2 f
  19.     socket.onopen = function(){
    + k$ Q8 Z( O1 B8 E* e
  20.         draw();
    ( G* @% U; }, P( O. q
  21.     }6 `& W; o4 f) ^1 h* Z& [1 N! s' K
  22. ) g  c6 ]) G+ \( R! S& v
  23.     var draw = function(){, X) W; j  z' U  `6 T  D0 ^8 `# a
  24.         try{
    * E# r  k6 F8 j& L0 r9 w- ~6 A8 B1 {
  25.             backcontext.drawImage(video,0,0, back.width, back.height);
    5 w& W1 W: W1 {. W
  26.         }catch(e){, {( G( C8 b$ e: V$ U) E# ]0 z- @
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {6 ~5 S( u% S% d3 B. ?0 i2 M
  28.                 return setTimeout(draw, 100);/ P: Y. f0 @; O+ T
  29.             } else {1 C% v1 `9 h9 t+ D( v$ N
  30.                 throw e;
    + R# Q& I) S. ~8 B% w0 N
  31.             }- Z, N4 o4 p" ?& a- z7 f& H" Y# V
  32.         }3 u( W: j' l& y5 \
  33.         if(video.src){
    $ f3 H; t9 p" j. p1 D% N$ i
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));
    : {9 }8 V4 a+ G, J# c. T7 \
  35.         }
    : Y/ n7 \3 u7 K8 j' t' h3 o% D
  36.         setTimeout(draw, 100);
    + h, O; p; f, [9 v) l) l
  37.     }9 d- z/ l7 S# ^) f
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||
    & t# s, @/ y$ z* _6 @4 N* f
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;
    # O, B: ^7 B9 }$ E
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);
    $ D1 {$ s; T) d" }/ X
  41. </script>
复制代码
  1. php$ S, i0 @. h4 @- m0 M7 [  Q

  2. , u' W- d" d: \1 c% \9 b
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);! s* B4 \( @# @3 S8 m
  4. 2 }3 V1 ~- M) v/ ]
  5. $server->on('open', function (swoole_websocket_server $server, $request) {, U9 W4 M  Z) B

  6. 1 L7 n% e7 v! h0 n8 }& V& y1 I
  7.     echo "新用户id:{$request->fd}加入了\n";8 }3 N7 |0 W# T: ~0 J/ y3 W: m2 n
  8.    // echo "server: handshake success with fd{$request->fd}\n";1 J7 Z/ P3 v* I; N
  9. });
    $ P. ?: {5 ?$ `. O: g1 t1 J

  10.   J# w, k% l9 ]  Z
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {8 u. N1 R7 W5 z: b: `( q

  12. 8 v$ Y3 F4 V/ F
  13.     //循环所有数据& s4 m" B: i" m
  14.     foreach($server->connections as $fd) {
    ( B( ~, b5 v$ C5 ^
  15.         //返回数据
    - G3 s6 I1 Z5 ^! ~  m. L
  16.         $server->push($fd, $frame->data);
    + }& g6 ?( @( i9 l  A
  17.     }# j# W' L* I! d
  18. ) x0 M+ R* W( i3 [
  19. });5 N) E% w. b) ]& e# D

  20. ' M/ j, W2 W1 p) m, U& }) w6 `
  21. $server->on('close', function ($ser, $fd) {  U& b) C1 \/ f& y6 x) v- O
  22.     echo "用户id: {$fd} 退出\n";& p4 L8 ]0 s! w" |/ n8 H! r1 ]' j
  23. });) Q+ R6 w" ~  }0 o$ t
  24. 3 {' O! s5 ~! c8 n, c# M
  25. $server->start();
复制代码

1 w; P3 B& s4 g
" u; y3 v( w9 {$ Z9 U2 L9 P$ Z' d5 @& C6 t' L2 `/ O' ~

8 E  I9 M5 N& i$ `; X  d3 O; [9 U$ ~. z2 u) a0 T: U

9 B; H6 o# f" q2 C) i2 B! b. X- u. w/ t3 D& q% B5 E' `

9 o# W, K( ^* q3 Q, l: M) e# k: |- s
- I' W- q2 o9 P
9 M. s% Q; I1 X' [5 ~
# g) }3 Q  y9 K2 _





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