cncml手绘网

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

作者: admin    时间: 2020-3-31 19:41
标题: swoole 直播
主要使用 webstocket% G/ U! Z7 X9 @5 l! g4 R6 \4 x
上代码
前端
观看页面
  1. <script type="text/javascript">  |* M) @7 L2 d1 h) i
  2. var ws = new WebSocket('ws://192.168.0.150:9502');1 W/ Y0 i% p0 F: k

  3. % V# y+ _7 R5 I, F( Y+ @/ Z
  4. ws.onopen = function() {$ _3 X/ `; K/ \' Q# X
  5.     console.log("连接成功");! n. C- f, X6 \9 d# o$ H
  6. };
    4 F0 c% ~' f4 A% @- _' w3 T
  7. ws.onmessage = function(e) {
    " m2 L9 f- n3 F! [( J$ M4 e" P
  8.    console.log(e);
    - M- F. W  J" ]9 H' ~$ [- }

  9. * h0 g$ n, i/ J/ d
  10.    var data = e.data;5 Q: ]0 h8 W2 U. j+ z5 s& S) o2 N6 a
  11.    document.getElementById('player').src=data;5 k; t9 X2 N2 R3 E
  12. };; [5 ~4 h; }5 a( ?" a
  13. ws.onerror = function() {
    ) z$ v# o8 G" I% q6 }' t  N% i
  14.     console.log("关闭连接");. T) P  M% X% x9 d9 D- v
  15. };4 J" |! A& u4 L3 P3 O; ^6 C1 q
  16. </script>
复制代码
录像页面

+ x+ f7 d7 |, ~& C
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>
    % [: M9 T0 J4 Y
  2. . e2 j9 n, @/ s
  3. # M8 q: i8 I% J

  4. : ~: x8 c: e0 X3 ?4 R4 k" W
  5. <script type="text/javascript" charset="utf-8">
    $ V# d/ j2 ~/ M" ~2 X
  6. 7 a+ y( E0 J) i! _

  7. : w- t. c: ]/ j2 k3 A- J6 _
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');
    , H# L0 ?, C( n( ?2 i1 z" f+ S
  9.     //socket.send("嗨我登陆了");
    1 q" ~$ Y# Z8 ?2 n! U' i8 [! J0 O
  10.   e/ L+ S! n: |* z
  11.     var back = document.getElementById('output');6 i' _. V( P: j" V
  12.     var backcontext = back.getContext('2d');; t# A* m7 p# h# k+ t3 {
  13.     var video = document.getElementsByTagName('video')[0];
    - [9 q2 G+ `% k1 v5 T
  14.     4 N0 V9 x' |. K6 J' o6 }
  15.     var success = function(stream){* g) y6 K$ ?; E5 f3 M: e8 j5 |
  16.         video.src = window.URL.createObjectURL(stream);/ v  b! b% a& f
  17.     }
    8 h, D( n' [9 v

  18. ( M8 p: |' }  _, A) {
  19.     socket.onopen = function(){. a( X: o2 |% Y$ j
  20.         draw();, J4 [& N6 y* p" p1 L
  21.     }: ^# K! W' {+ i' D. U- t! A9 |

  22. , ^; E7 h3 y* M# V7 @% f
  23.     var draw = function(){
    / Z# `, b# T9 A1 @- @6 P2 {
  24.         try{
    : y3 q4 n; a' o5 w4 H9 n
  25.             backcontext.drawImage(video,0,0, back.width, back.height);# K4 [0 a1 D. s- E
  26.         }catch(e){
    4 J3 M/ n6 L3 j7 p2 Y' y
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {
    & |6 a6 m& U! y. V
  28.                 return setTimeout(draw, 100);
    1 k" J5 z3 O+ n- G* q  a
  29.             } else {9 @) Y* i% ^5 |) p1 q  L' y$ [
  30.                 throw e;
    % s% G  z. G; g# o2 k
  31.             }
    - J4 l" @* Q, z, N; d, R: Z
  32.         }
    0 k% z6 E) m$ i; q
  33.         if(video.src){4 \1 ^1 ~+ g3 |
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));
    $ l5 ^& J8 h; j6 f- G. z
  35.         }
    2 Z9 I/ O- D- i4 }" ]+ x2 [1 Q
  36.         setTimeout(draw, 100);
    ; u2 a& y7 t  F+ f  p% Y  d( s* W
  37.     }) ~1 b7 o2 d- J8 e
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||
    6 `; y5 B5 \; x; |
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;
    # N0 X) @* a! z1 x1 T' z  `* u9 v2 i
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);! u* B  Y; T$ Q: B: k9 }  \. M
  41. </script>
复制代码
  1. php
    2 t2 _: G' E1 w- k$ K& \! c9 t

  2. ) ~5 Y3 e/ A- f0 t  ~
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);: P# f; x* ]" p/ G

  4. : ?1 s, e& ~7 Q. \
  5. $server->on('open', function (swoole_websocket_server $server, $request) {1 |; G$ ^  I' v6 s5 e( [! ]( a
  6. 0 K: I% X3 N5 W5 \& @: K6 Y* X
  7.     echo "新用户id:{$request->fd}加入了\n";
    6 j1 d- [& v/ X( C
  8.    // echo "server: handshake success with fd{$request->fd}\n";1 u$ a# u, Z8 d
  9. });: |+ [: H0 T5 n- M( Z

  10. % i$ Y$ N8 P" y
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {* ~2 a- f, \/ I; \% v& Y
  12. , b2 w2 _6 P% o) ~# H: H8 s7 ~
  13.     //循环所有数据
    1 e+ f2 O9 S3 Y; h+ A* ]
  14.     foreach($server->connections as $fd) {5 v- n# U* G( Q& k, s1 [
  15.         //返回数据
    0 z. _& }0 b* ?) X6 ?; I& s
  16.         $server->push($fd, $frame->data);
    . y# n/ z' A8 n  ~, O, w* ?0 O; l
  17.     }
    + q3 h0 P; Q& J. X# x1 ]1 |
  18. * T' Z- ^! d2 k" }+ N
  19. });
    7 w+ ~2 q7 _5 r. r6 O

  20. $ ]( O' Q# M! b! {4 p/ K
  21. $server->on('close', function ($ser, $fd) {& m$ `' w- N3 |' S) A; D3 c- ]
  22.     echo "用户id: {$fd} 退出\n";2 }( n9 x) y  q2 h/ l& B
  23. });/ j3 |$ C5 A' F3 Z/ d4 B
  24. 6 K0 `) X8 {- Z  D; T0 T; ?
  25. $server->start();
复制代码
) w6 z3 W. I/ J; P

9 a/ f, N2 w# b( m6 `4 z) `& Z4 F! X& F3 U( Q) k4 p

+ K8 W+ |* S$ J
/ f( m9 I" Q0 J$ [% S& f% h2 ?7 s' R* L# z
3 Y6 \# o: c9 \0 L2 S

4 h' f  i7 P5 l. k- L8 O
) D/ z% O9 L1 O: @8 N& h; S- N, E5 r' S

( l4 W0 ]9 A8 I7 A! s
8 d7 V0 F+ O4 k3 f6 y, ?




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