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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
主要使用 webstocket. \1 |) ~+ F/ K) |; ~8 e! J; y1 N0 w
上代码
前端
观看页面
  1. <script type="text/javascript">
    , d) w0 B! p/ }" _
  2. var ws = new WebSocket('ws://192.168.0.150:9502');
    4 A. E, M( f3 i- H2 D. a
  3. 0 Q5 n5 t' C8 F& ^) @: c8 H
  4. ws.onopen = function() {# ^' k1 L+ S! ~& R2 D
  5.     console.log("连接成功");
    4 b5 r1 T$ C3 r3 U
  6. };
    " j6 X  ~: `( K7 B! G! F! `
  7. ws.onmessage = function(e) {, Z( A  e! m5 f3 i" U; ~$ r8 Q
  8.    console.log(e);
    ) V1 X3 n1 B/ W1 R! k0 z
  9. , d, L9 R0 a9 c) Q9 ^, N
  10.    var data = e.data;6 S5 r' d7 [: s* F2 A4 B
  11.    document.getElementById('player').src=data;
    % d* m- O. i9 T$ C
  12. };
    # d+ W4 p5 v  ^# D
  13. ws.onerror = function() {
    + V5 B4 {4 w  T% C1 \/ V+ I% ^
  14.     console.log("关闭连接");
    # Y3 a$ T* f7 c( j/ ~
  15. };
    / D  ~6 h, r% I: @. Z/ J8 K
  16. </script>
复制代码
录像页面

2 a/ ^( Z5 u" G
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>- D" e* q8 h, Q
  2. . G$ p9 I0 M. h* g& C8 x! _$ s

  3. ; D, ?3 H2 R; c1 h* {
  4.   l& ]3 A2 y7 B7 J2 V
  5. <script type="text/javascript" charset="utf-8">0 P" l. S* I- ~1 r2 Q7 C
  6. ' n) x! S2 c: ^: W/ E

  7. 3 P) b2 w6 o4 o% s* v! u3 M
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');% @9 j% X& c. o
  9.     //socket.send("嗨我登陆了");
    " S' Z( W! N' @* H" m

  10. - G% e, A$ W9 D
  11.     var back = document.getElementById('output');) o. l+ q8 f3 }" P. O
  12.     var backcontext = back.getContext('2d');- G3 x, V; A" t. c, \2 n
  13.     var video = document.getElementsByTagName('video')[0];
    3 i& W& s! {1 ?: l* K8 a
  14.     " g, p6 E! i' |( X9 Y# p! ^) S
  15.     var success = function(stream){
    ) J9 o* i2 Y, q+ r. i! V$ O
  16.         video.src = window.URL.createObjectURL(stream);6 C, x/ z3 H0 J/ |5 P; {
  17.     }
    ; |9 w7 i+ Y* t7 c
  18. - Z4 _2 P6 s* ^) Z  W
  19.     socket.onopen = function(){
    ( u0 |; h! ^* K) v4 ]
  20.         draw();
    : L# ]7 G& V3 X
  21.     }
    1 @8 B5 Q' I" v+ Z" z8 u# p" e

  22. 0 Y" V, y  x5 ?  M5 O& d/ g9 Q
  23.     var draw = function(){+ ~; J" k8 \0 Y) o: _/ t) U
  24.         try{2 Q4 o) F( H: C* h+ e' X
  25.             backcontext.drawImage(video,0,0, back.width, back.height);
    0 X' m: g* Z' o$ ~% u* w: x8 o+ ?
  26.         }catch(e){
    ( |/ H2 c3 j- V* e0 T' I  \; b
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {
    - A1 o8 ~9 y9 h
  28.                 return setTimeout(draw, 100);9 U; j- Y7 W+ ~0 ?& }: V9 o: r
  29.             } else {
    0 R9 h+ E: |$ }( r9 A8 u
  30.                 throw e;: t. n, x8 L/ h4 b5 T& d
  31.             }
    6 e% ?! f- _: o
  32.         }
    $ K# u/ |1 P$ D) C7 U; a
  33.         if(video.src){
    / s2 g8 e! d. O! ~$ S7 g# S" d) @( d
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));
    $ S( L1 c  Z+ q9 I
  35.         }
    ' i$ H! v7 {) T+ E& I
  36.         setTimeout(draw, 100);
    8 N* y7 Z+ _0 J6 z9 `$ W9 Y
  37.     }
    . z3 c. A3 ~; e8 ]
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||. M) h3 b/ y7 j7 x% X7 H6 b
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;
    / ^- |+ }( Z; Z+ R1 S) |# v0 V
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);
    ! ]8 T) k9 F7 m5 [: H6 V
  41. </script>
复制代码
  1. php3 ]- c4 j" ]  w4 {

  2. ! i6 ~& B( U$ A( n' M7 W. }; s: C
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);
      J, ~3 ]& z4 U" `$ U. a- Z' o: S
  4. ; Z! M* @1 g' y
  5. $server->on('open', function (swoole_websocket_server $server, $request) {% P+ T' O/ x: v3 c

  6. $ b4 q2 B* ?5 p- D4 }% u+ A+ P
  7.     echo "新用户id:{$request->fd}加入了\n";8 t  g3 U; b, |, z& q6 `& |
  8.    // echo "server: handshake success with fd{$request->fd}\n";
    9 m# B) X+ F" ]' G6 c! L# F
  9. });
    : p. T+ q- O* ]( g, x  U  c7 V
  10. ' \. Q( y. a% `7 h+ q
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {$ F6 ~. N/ z3 V; a

  12. & z1 I$ R3 G* y8 J+ v
  13.     //循环所有数据
    - M, j8 d7 A, D. l& N- N
  14.     foreach($server->connections as $fd) {: D" E( H+ m0 x
  15.         //返回数据
    ' o' l; |6 P  \/ L& C) q' F  J
  16.         $server->push($fd, $frame->data);
    6 Q1 q% Q( _) N5 D
  17.     }5 A$ H! ?" z3 F0 ~
  18. % P+ F4 G5 q2 p
  19. });
    ' z1 U: j/ k; J8 v! }. B

  20. ) Q) r; p3 n! f, U& G) m
  21. $server->on('close', function ($ser, $fd) {
    , F: H4 U. c; \/ ^) R' w
  22.     echo "用户id: {$fd} 退出\n";' z; [9 a0 o4 @% t/ G4 c
  23. });1 v& C7 P5 Y+ Q9 v8 ?

  24. 4 I/ a+ l* _4 @
  25. $server->start();
复制代码

0 H$ A. p: N7 Y# z) \1 ?3 h& D8 x1 w9 Z2 G

6 J* `8 \) e% l( g+ D" C
, L8 w, K: ~& t2 Z' ?; \/ u: `9 Y+ e/ U- t7 T% X  _6 o
: a# U5 t% r& x, M* I% r# P

7 @0 J% q; k9 D0 k# l" w9 v" Z4 N4 {& N# z: i# J" n6 A

2 E4 k; ~, y% b7 ^; d5 g
2 n6 i* y% T/ i3 x, U! y$ o& ]! O- K# J8 r- E7 U
) `7 A# A9 @3 T# N
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-4-30 20:50 , Processed in 0.085002 second(s), 20 queries .

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