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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket
* \, K2 B( i3 E/ e9 v3 M- z. w上代码
前端
观看页面
  1. <script type="text/javascript">9 {  t! w/ F' [
  2. var ws = new WebSocket('ws://192.168.0.150:9502');
    3 h1 |) o% u# O9 j. l5 w/ W

  3. 9 Q! D4 \6 N% o* u& I. h, K6 r. d
  4. ws.onopen = function() {- s9 p( ?8 m* ?  o8 Q- ~, X3 ]( i0 }
  5.     console.log("连接成功");0 T8 D- a$ L$ o  b: w* A- h
  6. };( u! r7 G( b' t3 |
  7. ws.onmessage = function(e) {
    2 I8 r- |+ b1 H7 U5 j, F8 W# t
  8.    console.log(e);
    . L- W- j- {2 x  c* p1 r1 I

  9. $ r. Q4 s& j, |9 E3 n! p/ J
  10.    var data = e.data;
    / ?' N& t# w: `7 `
  11.    document.getElementById('player').src=data;
    8 h2 g. p. Y4 i6 `6 b! l
  12. };
    $ c6 k" o, E* }' T/ C
  13. ws.onerror = function() {
    " L+ l& g* t1 o1 U" Q
  14.     console.log("关闭连接");4 w  v1 z  _& h$ o; n3 P7 @7 A
  15. };$ e! R% j5 }2 Z7 K1 z6 \; ~7 E
  16. </script>
复制代码
录像页面
3 e% \  p0 a4 a9 J
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>  x6 y; N3 P2 L) n, A$ ^
  2. 4 X. ]) F8 e: d$ Q$ x' [

  3. 7 y8 M9 G& S: x4 z
  4. 3 \4 _6 p& ?' W" s4 ~% R
  5. <script type="text/javascript" charset="utf-8">! h9 a* }7 \, O1 r3 [# M7 e) u
  6. % q5 o' C" }$ F3 D
  7. 4 u. c2 N, G4 [$ B7 U3 S
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');0 x4 I/ [  h; b# T
  9.     //socket.send("嗨我登陆了");
    0 v$ I& f5 ?  v  s0 l( m
  10. 2 j% ]; _+ h# d8 f5 P
  11.     var back = document.getElementById('output');5 h" z3 {7 c9 g$ z! G
  12.     var backcontext = back.getContext('2d');! B" D- m# n8 B- C% m! `
  13.     var video = document.getElementsByTagName('video')[0];8 l# @' _' W1 b% _! g
  14.     & @: I* X, m+ {& p/ N9 ~  C0 K" l3 N
  15.     var success = function(stream){
    ! M, |* }) H- R3 I: [* {! L# C
  16.         video.src = window.URL.createObjectURL(stream);
    ( U6 U8 Z; `9 S+ O4 O+ ?) G
  17.     }8 h5 a) x$ [! C

  18. 7 C% V) I5 I+ X6 P3 g4 L
  19.     socket.onopen = function(){0 K0 H9 \7 w' a# M, Y2 x2 r
  20.         draw();
    4 g9 q' L9 d) B
  21.     }( G' H) s  e# D) Z, d

  22. : s; p. }  @8 `, M, b
  23.     var draw = function(){
    7 A( r+ G4 {3 t7 h% ]. `5 Z! ~
  24.         try{1 e$ m" ?, G, G- V
  25.             backcontext.drawImage(video,0,0, back.width, back.height);$ H+ d6 S. z+ m/ l) }, f
  26.         }catch(e){' I8 u& U% I. ?0 {7 C
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {( U6 q: _4 u- e9 h" A$ p+ O
  28.                 return setTimeout(draw, 100);0 A: Y/ s5 Y5 j
  29.             } else {, H# h; f: o5 M  n
  30.                 throw e;
    # I$ w2 l$ I( R( d
  31.             }
    8 R% Q/ N" i# Z4 u4 E. _9 f. `# G8 c. Q
  32.         }
    ! R* V1 y( V+ A/ s: e
  33.         if(video.src){
    & g, }' t4 L0 F
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));! g( D: l! z5 \$ J' d
  35.         }5 @/ j4 M+ m- \4 P: a
  36.         setTimeout(draw, 100);
    1 ~; h& \5 N7 E
  37.     }2 v& r6 r3 t& e
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||0 W: H9 D: o# S  Y1 `
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;/ k% i! V$ g5 @4 D# v
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);
    & G. Y9 w9 q( j& \4 @. Z
  41. </script>
复制代码
  1. php( n, L7 z. K" ?5 T# x8 B

  2. 6 d8 z' }7 H8 h% a! Q
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);/ s  e  g* e7 W- @" w) X- {

  4. 1 H6 M, g( Y4 |  v
  5. $server->on('open', function (swoole_websocket_server $server, $request) {
    2 C& f( ~5 d( t7 B0 i
  6.   k' [" G, u; r7 A& P
  7.     echo "新用户id:{$request->fd}加入了\n";
    . [3 S* v' u; S, J, E1 d  i/ x& L
  8.    // echo "server: handshake success with fd{$request->fd}\n";
    ' }( h. w# h  v, L
  9. });; v2 K$ U- f9 b: B  D
  10. 5 o7 `' S6 N* }
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {
    7 z& p- ?, c9 P8 v# C

  12. 8 H( M6 r, n3 S
  13.     //循环所有数据) `- D' ?; M: G' a2 f. t. d' o
  14.     foreach($server->connections as $fd) {* y* b) [# g2 s9 |$ c1 i! s; d
  15.         //返回数据6 h  i7 T+ g# t
  16.         $server->push($fd, $frame->data);
    3 v: V  r# D: e6 [$ E4 ]; w
  17.     }
    : W  ]2 ~/ h" \! |; q1 Y- m% P

  18.   y( U- T. B+ R1 L: F9 V: k: i
  19. });/ P$ C; i+ ], G9 ]  j
  20. 2 Z7 ^8 v# e$ K4 W, u7 c! q3 Q, H& J
  21. $server->on('close', function ($ser, $fd) {# o0 e5 E4 T: d9 T$ x
  22.     echo "用户id: {$fd} 退出\n";
    ' }2 ]9 k1 n+ J$ P8 s/ l/ \
  23. });& m' x6 t; o2 {% w
  24. & r: z) A  Q5 j6 u! Y# G% v
  25. $server->start();
复制代码
6 E; I1 A0 g1 f9 R4 u
% B/ L1 f/ K% I/ D/ Z

& F: S+ p+ r. m7 h3 p# J6 ]+ f2 R& {0 |* E. P

3 q! ]- G: c. x1 f
# y: T3 M; O/ R1 y9 k4 U  e8 }3 ~" e! V2 G# r4 w- H
# ~& p8 w( U8 Z( ]
  @  H3 D, s8 z% X$ M- ^

' b0 s+ @$ I2 f9 G  Q4 U# B1 x0 R- p, J) ~% x; w; {; d4 C  [

& ?" r& g# y& f' q4 E6 K
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-9-21 03:15 , Processed in 0.054610 second(s), 20 queries .

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