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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket4 C1 R$ M( H! r
上代码
前端
观看页面
  1. <script type="text/javascript">
    3 \8 j: ]# l% m9 g- I- h6 \
  2. var ws = new WebSocket('ws://192.168.0.150:9502');
    2 }. G9 ^5 Q3 x4 H1 O5 p1 b
  3. . M3 C$ `6 c3 D: m
  4. ws.onopen = function() {0 F( u  F1 g% R, e; F+ h
  5.     console.log("连接成功");
    ) o4 @$ J9 F0 K* ~$ l
  6. };
    & e+ o' T' H, k+ @" z* |! F
  7. ws.onmessage = function(e) {# R: ?# {7 e0 t) t* q  g
  8.    console.log(e);
      k: S9 i+ Q0 f/ V* m9 h8 A
  9. - q0 c, s7 x. x- M
  10.    var data = e.data;# T/ i( N* Y$ z( [  p4 m5 I
  11.    document.getElementById('player').src=data;/ g  L. E0 X+ y) d
  12. };5 Q$ P( O8 u/ ?! ~: m
  13. ws.onerror = function() {
    4 y) w9 L- M& f# G/ h( \
  14.     console.log("关闭连接");
    $ B7 [8 Y' i- {
  15. };+ M2 @1 o& A; i( J, @% o
  16. </script>
复制代码
录像页面

1 c" L. q* {4 e$ l6 m
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>
    9 T+ s7 H, c7 I: r, ?7 ^( s
  2. 3 f/ S; F4 Q! S' L1 W( \& `9 |

  3.   M4 r! L# L7 K8 Q1 b, t# J
  4. & S, T0 k4 B& S5 A9 P  l& B: X0 E
  5. <script type="text/javascript" charset="utf-8">: d. ^' ^: S6 }+ P% O, E. o* ]
  6. 8 Y3 c+ H4 i% y6 {

  7. + E; Z/ q& k, e" t/ o6 ^" g5 G1 v
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');# ~1 Q; t+ i: }: P0 k
  9.     //socket.send("嗨我登陆了");$ n) W2 D. Q7 l8 f

  10. ! S$ Q- x: M. W6 T
  11.     var back = document.getElementById('output');6 ?! |" m) |3 L8 }& @
  12.     var backcontext = back.getContext('2d');
    + S1 O- o, Q6 ^# u( P5 r1 D
  13.     var video = document.getElementsByTagName('video')[0];
    0 m0 o" [5 N* ~$ Z5 v/ y. h
  14.       |2 y7 w$ `3 {; S: g) a1 |
  15.     var success = function(stream){2 t3 `0 M! P# F' w* [; q: R. ~
  16.         video.src = window.URL.createObjectURL(stream);
    ' @& X) I' i$ \+ z" @" \
  17.     }
      J( E/ J, V" k7 q$ f' w1 j

  18. / u, _4 e# V& V" C
  19.     socket.onopen = function(){4 {9 f4 A* v' ^6 a! B7 T) Q
  20.         draw();; A% F) ]. ~0 B2 G2 y2 P9 S
  21.     }
    2 y$ |: |6 N- h+ o. H: M
  22. , ?/ v7 M* C' a+ ~
  23.     var draw = function(){
    . t' F* f) g( u: x
  24.         try{
    1 Y3 d% j+ K5 K3 _. c
  25.             backcontext.drawImage(video,0,0, back.width, back.height);6 _* c; w$ H2 i, _7 H$ Z
  26.         }catch(e){
    4 {& A5 \3 P$ J) y7 I$ w) \
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {
    / S8 V+ m' a) m: [5 L9 U, @
  28.                 return setTimeout(draw, 100);
    . p% h4 v* \  Q
  29.             } else {' B5 ~) h" X0 j* e+ }7 V$ S  A
  30.                 throw e;
    6 Y! O; q  s# ?8 d6 Q
  31.             }$ ~# u1 w: g4 U$ x
  32.         }$ K* [$ C/ s$ d- S0 T
  33.         if(video.src){
    6 m8 I0 C) A# i! C3 J( r7 G* R3 z9 U  o
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));1 A, D0 s1 B: V6 C; S
  35.         }
    6 j3 W) }9 H% m: u2 i0 m
  36.         setTimeout(draw, 100);4 o) z' e( _. v7 H# I: w  d1 `- m
  37.     }
    , i; m5 M8 I- ?
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||9 `0 J3 v) q, b7 ]- I( Q
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;) S( s2 b3 ?- c+ ]6 C( y
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);& b+ x( S0 h% E% B+ u2 n, `' X
  41. </script>
复制代码
  1. php
    5 ]% H# F' E" }) w; x* v

  2. 7 j4 c0 F3 Z5 k9 a3 h
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);
    2 n* u* D$ y$ z+ j4 C7 ?8 x4 p, R

  4. ! N/ S7 ^  M. C: l  v
  5. $server->on('open', function (swoole_websocket_server $server, $request) {" k# k6 m" Q% c4 ?1 q

  6. - ]( e& ]# p, [; y- _
  7.     echo "新用户id:{$request->fd}加入了\n";% m9 t% W* T3 W4 {
  8.    // echo "server: handshake success with fd{$request->fd}\n";
    - d; c, F, V* M6 v) G1 ^
  9. });; o" W9 b8 S" t* e. e

  10. / X9 _3 E8 W# ~. L. ]1 z
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {
    $ a8 F4 H3 V$ w4 J
  12. " L  d% m0 I0 ^" f
  13.     //循环所有数据
    ; ]* c* E: f% N8 a1 J  s, `; U
  14.     foreach($server->connections as $fd) {+ r- _$ Y9 Y- m3 t' @) Y
  15.         //返回数据% `5 X; z* X$ f) s8 n/ i. j" X
  16.         $server->push($fd, $frame->data);; u: {, R! n! Z
  17.     }
    3 A- S5 }+ {7 c; u) L
  18. ' v1 ]; S# u3 ^* j* \) B0 R+ H" H9 A7 p: ]
  19. });
    8 d- @8 ]& b- b  j
  20. , p1 ^5 L: k  }0 [3 J
  21. $server->on('close', function ($ser, $fd) {
    0 _6 a, J' R" x; u) E9 ?7 G: m
  22.     echo "用户id: {$fd} 退出\n";( a/ G) T2 q" I
  23. });
    4 @# V4 x) N4 N/ x6 b

  24. 4 Q- R' s# e7 j7 D% t0 b% q
  25. $server->start();
复制代码

9 u* I/ f. B9 v' b: C) S2 P( x% m& E3 I. H# u- S
; d. J. B: n7 [0 X2 B) e( `
, @- s, u: N4 ^5 J* Z

+ X" P% \" e0 B+ i
& t9 z  Q' q6 c  c
  ]" y4 w% Y5 V: ]
3 F7 I+ W  o/ M8 s4 P- a
8 }0 m+ u& ]$ c$ G! ^8 w" M5 V
' ]! _! K7 d+ F: j3 j7 O  U8 \" m5 V" N, D( x
) b! I, P( q* m7 v: e4 J! n( W" t3 w
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-1-30 11:37 , Processed in 0.059051 second(s), 20 queries .

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