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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket
" |6 B+ O5 f3 l( B上代码
前端
观看页面
  1. <script type="text/javascript">
    4 p& S" I, s3 J% l
  2. var ws = new WebSocket('ws://192.168.0.150:9502');0 k+ ]* e6 u% w/ I

  3. ( ^8 i' c6 n2 K' T; H0 j0 ~4 R7 X
  4. ws.onopen = function() {
    : w& g4 H$ B  @
  5.     console.log("连接成功");
    % }( }: M) h+ G) q
  6. };
    5 N- L9 `. W& k# L  r! A: c
  7. ws.onmessage = function(e) {7 ?: x1 p. K" U' u$ T) V5 L) R9 ^# _
  8.    console.log(e);
    ; N0 v0 ]& y/ M1 l6 \% M

  9. & W5 z6 O' y9 a$ L' t/ k
  10.    var data = e.data;7 y- m2 B, Y- J7 n
  11.    document.getElementById('player').src=data;
    0 G, X. g6 ?: i% Y7 j8 G, q3 u5 g
  12. };
    ( V7 s6 s: @1 ^$ ~4 z
  13. ws.onerror = function() {4 ~1 e. O7 E6 S2 C0 T& |/ q
  14.     console.log("关闭连接");
    8 I7 C* C8 A- N. e; {
  15. };
    ! i9 o; _) t. q; i, C2 A
  16. </script>
复制代码
录像页面

" g6 e; f* f8 F0 E. V
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>8 M3 a6 y  z! V1 Y& S& U7 g' ^

  2. ( \2 f) E+ o% ^5 `9 R$ {
  3. ) z+ E& ]! D" T: v  ?2 G

  4. ) I/ Y- n( V7 r. s" z( m
  5. <script type="text/javascript" charset="utf-8"># d* B. u& G5 J" q3 z
  6. * E- |0 Q: Q# u: z

  7. ; A( r' a6 w5 U. _& [, S' @
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');
    5 |( u& ^; l& W+ V& p- V0 l/ O
  9.     //socket.send("嗨我登陆了");
    . t, `, y7 p4 Z% f

  10. ; t9 E% Z) y# c* q- s  X) m
  11.     var back = document.getElementById('output');
    3 }. [6 q" J2 M% N: C
  12.     var backcontext = back.getContext('2d');& l- p7 Z0 P8 B. U6 v$ L
  13.     var video = document.getElementsByTagName('video')[0];; k. N3 b, B, i# b: V) |
  14.     * x' ?( A# t3 w* d! m" c5 j
  15.     var success = function(stream){
    8 m4 ?( d: y. J6 [3 R
  16.         video.src = window.URL.createObjectURL(stream);. K% u% U; P, C
  17.     }
    ! u: J. I2 ^) O6 Z4 J
  18. 0 H; j0 y( n( G- H* P: p
  19.     socket.onopen = function(){
    + j  K7 q- \9 K: a# |
  20.         draw();
    + K/ G: j2 |9 F+ k
  21.     }
    ; b+ y- u8 C+ V! m; r) u: V  H
  22. ) k' A+ O; c4 j& k2 C
  23.     var draw = function(){4 a8 R+ O( l# f
  24.         try{3 G+ ~+ g  P$ J# D( c, x
  25.             backcontext.drawImage(video,0,0, back.width, back.height);
    + H+ d* a5 Q* x5 f
  26.         }catch(e){' p: x% O* N* e0 J
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {
    ; {6 ^' Q3 B4 P% r
  28.                 return setTimeout(draw, 100);
    $ V8 b5 b  h' P7 M# r$ e( o
  29.             } else {( z' i4 T+ p9 y# f" z
  30.                 throw e;+ `! A  l7 D2 v' z; q
  31.             }& Y/ g" ^) N, E. w7 {* V( ]
  32.         }
      A0 X7 Y2 [& o* B9 ~6 |+ B
  33.         if(video.src){  G+ J. m9 L' K% o3 F  c1 o( M
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));
    ; D" m7 r- v/ L
  35.         }. @  p& ^& ^. w8 C9 [! P) m
  36.         setTimeout(draw, 100);
    . ^7 M6 V7 W- Y; \7 u
  37.     }
    , U' N5 b* Y9 _  b: z  z
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||, e9 U/ W) [& s* R' E" l
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;) |! ?$ T+ P5 y! P
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);
    7 s0 F1 l6 |0 l$ E; |, X8 H
  41. </script>
复制代码
  1. php
    # k$ t$ D3 [4 W4 r
  2. # t. k, _1 d8 z" r
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);0 N$ z' j0 H) n9 j
  4. , ?% a- M2 m& r& I3 x; K# f
  5. $server->on('open', function (swoole_websocket_server $server, $request) {# g) i/ y* R/ y! L* {
  6. $ ?$ a( J$ o# z2 z+ ^- B5 ]
  7.     echo "新用户id:{$request->fd}加入了\n";
    4 N1 B3 {. E' E3 b+ ^. D
  8.    // echo "server: handshake success with fd{$request->fd}\n";
    / j6 e+ K7 }$ T' T0 O/ F/ S+ _6 @
  9. });
    $ c& r) x7 W) X% c6 ^% a  C2 o

  10. ; c  m* N7 F) m9 v, l
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {
    , Q) G; P8 ~8 O  Y: W

  12. 9 e5 A9 r* q3 [3 H
  13.     //循环所有数据
    , x( @( E" l3 a, @
  14.     foreach($server->connections as $fd) {1 t7 k4 h5 C" u, Z1 D# J- ^
  15.         //返回数据
    : m' D$ ?* @; l# U3 h
  16.         $server->push($fd, $frame->data);
    7 e' Z1 F9 f: z; S
  17.     }' `- c" H9 Y9 q: c
  18. 8 ?7 L/ b  U; S- `- y5 d1 Z
  19. });- a% q/ Q4 ?; X! c

  20. ( N  E3 J+ S; x  T# [/ W% M
  21. $server->on('close', function ($ser, $fd) {# m  l0 C3 ]5 J8 ]9 L/ T+ u7 M
  22.     echo "用户id: {$fd} 退出\n";# ~* j4 B0 _: u
  23. });) M& n3 ~3 p7 q7 }
  24. 9 b! T' B5 B$ y" y8 e6 M
  25. $server->start();
复制代码

" X$ `8 p' ~5 ]* D  c! f' L" l5 y- `$ L
4 p5 Q; @/ b4 ]- H
1 m. Y" P5 ]; }6 @

5 @5 W5 w$ s& y' p& K# ~8 [4 C3 x4 Y+ `% s
3 b/ K1 A: P6 C5 I+ F. @6 m

+ t5 @- l* J5 i! v* |1 D* X& s+ L5 |9 U8 R

/ c; _% C2 s8 z& v6 |8 \4 Y& k. A8 k; A2 d
% E4 y; R1 a0 c+ R( y3 K( [
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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