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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket: ?6 P8 d8 W, ]( t0 u
上代码
前端
观看页面
  1. <script type="text/javascript">% l: f& V+ \- ?, w
  2. var ws = new WebSocket('ws://192.168.0.150:9502');
      a% ?+ k' V2 V* P' _

  3. " \! r$ A& ?, C0 ?8 P' a
  4. ws.onopen = function() {/ L+ B7 H7 H( c0 `" Q/ @
  5.     console.log("连接成功");3 g/ s! Y1 G4 C& E! P
  6. };. C. l$ z) C- t3 ?0 b5 ^% f
  7. ws.onmessage = function(e) {; _* @) D! a+ }, Y6 E
  8.    console.log(e);
    + i& ]- N  ]9 p5 U

  9. 2 k5 f4 J9 `$ R' \2 h8 k
  10.    var data = e.data;3 P7 j$ w* K3 d9 I: w
  11.    document.getElementById('player').src=data;  P" H/ e. Y$ |
  12. };4 ~( I% n% k9 y
  13. ws.onerror = function() {
    7 M2 m: B8 U# z3 t, K
  14.     console.log("关闭连接");, T, `; b; [& B2 l9 s$ r5 M
  15. };
    1 D$ |, h. c8 v, {1 |
  16. </script>
复制代码
录像页面
( A6 t- E+ B# a! g' A4 P- T& P; s
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>+ j, B3 l& S0 x& r. p4 n5 G
  2. / D4 T/ |$ f5 _" S. p
  3. 1 N0 w1 }' x0 k' ~
  4. + G$ _* n0 x1 R3 {* t- S! Z1 k4 W
  5. <script type="text/javascript" charset="utf-8">
    8 C, J- N# J3 }/ l! u4 Y
  6. ! c3 l( O: `; S' K

  7. 9 l3 n: p( b7 a) Z) ~0 L) c3 ?2 `
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');' n# |+ m+ X5 j! L
  9.     //socket.send("嗨我登陆了");
    2 J" h9 Q% i) w1 g

  10. ( Y& o9 `7 \7 {2 Z. g( D
  11.     var back = document.getElementById('output');* S' `* L; ^+ @
  12.     var backcontext = back.getContext('2d');' u% t; t. r$ Q8 r, X- w- y
  13.     var video = document.getElementsByTagName('video')[0];- L: H' E5 d8 }2 U2 h+ H' x
  14.     ! J: Y2 ?7 o5 b5 R& F& q
  15.     var success = function(stream){
      i9 y, `" u9 h9 x
  16.         video.src = window.URL.createObjectURL(stream);
    6 o) w8 J4 c& n
  17.     }2 X$ H% X3 @: D8 i4 o; L
  18. 3 ]/ o) L- q% y& _6 V! f2 W7 i
  19.     socket.onopen = function(){' u$ j- t9 g' X9 k! w
  20.         draw();
    : W+ x9 r  u7 O5 l. D# o- m1 d
  21.     }
    & Z3 f  U' u, Y% o( M

  22. 8 m2 J8 v9 J0 E
  23.     var draw = function(){
    ! _3 N. c: C7 ?2 k+ u& v
  24.         try{) O/ }: @! W4 l- h! [' b
  25.             backcontext.drawImage(video,0,0, back.width, back.height);
    - c9 E! u3 s2 W# c0 m! A* ?& F
  26.         }catch(e){
    7 e8 |: F  o% }* i
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {
    % e& S( }1 r( s8 Y3 n; Z2 g
  28.                 return setTimeout(draw, 100);' ^1 z! J4 C* d4 H* K4 r- T% _% M
  29.             } else {
    ) t( L% g) l) G# _5 {' ?% C
  30.                 throw e;
    # b& C9 ]: v, m5 L1 U, ?. `
  31.             }$ G4 a* p( O/ J+ L( P5 u  P4 r# z
  32.         }& q, E: A9 [/ C( s5 u9 C( b4 y
  33.         if(video.src){
    6 @8 o: P7 q* `2 L' |5 ~; ~
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));- N$ [: p$ W7 G
  35.         }
    7 Z; c0 K6 M8 K. O! h( c- w# R
  36.         setTimeout(draw, 100);
    ! @- i  o; B( J) r* X' H
  37.     }. A9 r' _. {5 a! n" x
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||
    1 p) z9 y" k. _! T+ x- D
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;
    ; L5 y5 _* ^4 \: j% F5 }' a
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);: n2 ?8 i2 v7 e! R& O
  41. </script>
复制代码
  1. php
    & N! w( V9 k; U1 d* P

  2. , N0 Z0 x8 U( D9 y6 ?% {& f" B
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);
      |4 I6 _2 n* ^/ o
  4. ( S- Z. N1 x! d" l: u( h7 C% P
  5. $server->on('open', function (swoole_websocket_server $server, $request) {' k+ w  }0 p3 N! n

  6. 5 T. @+ g+ C% Q
  7.     echo "新用户id:{$request->fd}加入了\n";
    6 E5 L1 d$ H7 D0 R. g0 L4 G+ M
  8.    // echo "server: handshake success with fd{$request->fd}\n";
    ' `7 r- m( D: p3 K
  9. });' R8 }1 d% U8 M6 J9 q+ i

  10. ) Q, d* n8 R* X- F) A
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {
    , x0 e# W1 O% t! p8 C

  12. ( [8 p9 D4 C! }" }8 y
  13.     //循环所有数据" a9 n4 M1 C) x" O7 w' o
  14.     foreach($server->connections as $fd) {
    * Q1 P- [* |3 K7 }. J' r
  15.         //返回数据  j- f8 D; F) [) v9 N1 k4 q. w4 B& d
  16.         $server->push($fd, $frame->data);3 y! _1 V+ @- @+ x
  17.     }
    & @+ ]% d4 l5 B2 {( T& ~

  18. 8 v0 {8 _; p; O2 s% x! \% }" Z8 z" S
  19. });
    - r1 G) o6 M3 O! E+ I4 z
  20. % ^  p  W* o! V+ b: N9 I
  21. $server->on('close', function ($ser, $fd) {
    7 u. }- |, U" T! Y: W, v
  22.     echo "用户id: {$fd} 退出\n";% `1 o( h" _/ ~( A2 U
  23. });7 g6 n+ o, {# |. f" a  y
  24. + |0 B1 W1 V) v0 Y2 s
  25. $server->start();
复制代码

4 a/ e# m6 M/ {4 T: S2 X# P% J: t( V6 \% b% r, n. ~: u$ r" _

8 e& ?: h# H6 d9 ?- }. G/ y# L1 }  T$ K& a7 u' {" n- m
4 p+ v* L" l- z& K4 M) t

* i! @* i1 e5 U0 F) S4 l+ \4 {) S- l. t6 Z$ n
2 k. o9 t8 Y, [1 t3 Y5 ], i

/ A4 k2 _1 `+ T
3 D! i- N, r4 t5 `6 I0 ^( a4 \8 p  ~5 V

0 B( Y7 J0 F! L8 h4 T' X) o
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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