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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket9 F! D7 O% r9 Z( j" k1 b
上代码
前端
观看页面
  1. <script type="text/javascript">
    8 ~, C+ z# ~% z0 Y
  2. var ws = new WebSocket('ws://192.168.0.150:9502');
    # [* |9 P5 s1 c# l8 F; s) R! x

  3. / D2 S- [+ Y  d0 z% e7 {, E6 F$ E
  4. ws.onopen = function() {# q1 Y8 ], l+ a% x7 n# @3 Z8 f
  5.     console.log("连接成功");* T" r& h# b5 }$ g9 @# n
  6. };
    1 d  W0 z  d+ B" O+ r, f. c5 `) [
  7. ws.onmessage = function(e) {
    0 v: t: R- w5 d) m
  8.    console.log(e);
    2 J: `6 }$ n& i9 {7 h& u; \" O' t& R
  9. ( c2 ~8 |& C$ m
  10.    var data = e.data;
    1 w) j8 R' `, I1 N% h
  11.    document.getElementById('player').src=data;
    % r( |, H3 ~2 `7 Q- N
  12. };
    2 P. o* i" @# i" ^
  13. ws.onerror = function() {1 j. g1 b% T2 J! F' U5 \
  14.     console.log("关闭连接");
    / [/ i% A7 y$ N* l
  15. };
    ( [( g. m6 H! M+ \# j4 N/ b( `
  16. </script>
复制代码
录像页面

' R8 N* u; K6 H+ F
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>: a. I9 h/ w0 p* N$ j1 r
  2. 8 w- @# @+ R( m- ?$ o/ v  T

  3. 3 e! Y# p3 H* _: c( e( K" ~

  4. & H4 I2 R& r  J: }: B; Z& ~3 |
  5. <script type="text/javascript" charset="utf-8">: n' P! |  d  q% J1 {6 R) G

  6. 5 O' V  ]* A# g2 B1 }4 `% M5 r1 ]

  7. / Z6 r/ c; G0 x4 c, ^3 r
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');
    0 Z4 }' V9 J1 ]: a+ m+ B
  9.     //socket.send("嗨我登陆了");
    - q' _" k+ G. K+ n  t( D& }+ K

  10. ; e3 O) j6 b8 j, u/ V
  11.     var back = document.getElementById('output');: S( F1 L+ J3 N: K$ ~
  12.     var backcontext = back.getContext('2d');6 g& Z- s& K! v" n& `# Y
  13.     var video = document.getElementsByTagName('video')[0];. f1 N9 l3 z4 M3 c( D/ T
  14.    
    7 I1 N, {. }! ~: K% f: z
  15.     var success = function(stream){- Y' o# R' r( {6 [7 _0 m  m
  16.         video.src = window.URL.createObjectURL(stream);
    % k: Q; e. s' q" J1 Z
  17.     }7 Y! V" t" l7 Q
  18. # ?- q; _& S- g) K0 L0 f
  19.     socket.onopen = function(){
    % h$ ?& x& |7 V0 h# M
  20.         draw();
    8 Y" r" P2 u: ?8 U8 Z9 b2 K
  21.     }  C9 A' F4 v' r- P) o/ I( T4 Z" Z
  22. ! L/ V; u+ N1 i$ ?% p
  23.     var draw = function(){
    , j- r" T2 r/ y* \2 j6 i& Y
  24.         try{
    / R! `1 F/ d- N( T
  25.             backcontext.drawImage(video,0,0, back.width, back.height);9 p* e( s; N/ @0 l- p# i0 j
  26.         }catch(e){& W* F) }* }) T: r
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {
    , z. o7 L- M5 e! o
  28.                 return setTimeout(draw, 100);
    6 l+ j. i! R* p# ]
  29.             } else {
    7 F6 y6 N0 m2 q6 g1 p
  30.                 throw e;% w# M' ]2 ~' ~. ~  b( E
  31.             }
    ' F3 }6 s; }6 C6 j  g
  32.         }
    5 P# X) K6 d! o& s0 k* H4 E
  33.         if(video.src){
    7 q4 b) u' H% K
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));3 F# x0 ~7 D+ ^& h$ I6 s
  35.         }+ k; [  _0 }5 ?7 p. q2 G! X, K3 u
  36.         setTimeout(draw, 100);6 Q  m+ O: X3 J; h' @" j/ c1 s
  37.     }
    ' ?4 j6 R: o/ Y6 y* y
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||# e3 N0 `) b. M9 ~4 \+ r, C6 N6 N
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;
    , J: y- b: P. Q! J1 u9 X! [
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);
    9 B  o2 m6 e  I1 n* r+ b0 J% X
  41. </script>
复制代码
  1. php
    4 S# }7 E2 g8 G- q: _  N
  2. . @3 H1 l3 U" _) n: ^4 v2 o- c: l. Z
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);1 b' ]1 i2 _2 C- @3 U# W

  4. 5 F; ~0 ~! g5 V' \0 O3 a& ?
  5. $server->on('open', function (swoole_websocket_server $server, $request) {( x2 |2 n2 z+ n  s
  6. # S. f; u6 E8 i+ [% Q
  7.     echo "新用户id:{$request->fd}加入了\n";
    0 I5 T4 y) C. `& E) e
  8.    // echo "server: handshake success with fd{$request->fd}\n";
    5 A7 I9 u/ }# Q! U8 b
  9. });
    ) ~5 m+ D) u6 W. X

  10. , ]4 q& V+ ~& d4 F" s$ Z
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {
    6 X; W$ @2 |: u6 ]% p. t" a
  12. % Y  `% l( n8 U
  13.     //循环所有数据
    1 O! ]$ U7 F$ d. p5 i
  14.     foreach($server->connections as $fd) {
    ; w$ V. S: F& L$ F4 z
  15.         //返回数据
    / x5 H' R6 W, v1 D& r
  16.         $server->push($fd, $frame->data);7 B' D' x! r$ e, p- {0 t" |' O! z
  17.     }
    0 j0 |" h# C2 E8 i; K2 k
  18. 6 Q1 u5 Q) v0 y
  19. });2 \3 u3 y0 o2 u8 O, ?

  20. 8 n5 `4 ]5 p5 ]. b- [
  21. $server->on('close', function ($ser, $fd) {8 M% @4 K- d( g
  22.     echo "用户id: {$fd} 退出\n";
    / w& v6 @( T* U1 r, M* o7 x* ^3 @
  23. });
    ' e  Z4 U# d' Q7 T4 I

  24.   c  b! A4 C! p  m
  25. $server->start();
复制代码

, b# ~7 @) s5 [+ ~6 v4 B7 E- Z8 P. a0 k' t  @9 B0 I
) x' B! y! x: P+ p! m8 S: z+ |& W

, Q, @- F6 M6 ~$ p! r" r( }; V" s+ _0 Z
) b3 _$ |2 H8 M! s

8 n! F5 j7 e) w: q  @* C! e0 ~8 X8 |

) @$ t0 r% f9 p5 B, H) ^
$ ?* U4 p$ y- V% l( W& Y0 s3 r  x  f4 h! v1 v. A/ `" Q
. a& g. ~* [' [) ^: }' S. M
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-17 16:06 , Processed in 0.083669 second(s), 19 queries .

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