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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
主要使用 webstocket
: a& C# _1 W5 Z. r$ ~上代码
前端
观看页面
  1. <script type="text/javascript">
    0 I5 @# r0 R# m& p+ d
  2. var ws = new WebSocket('ws://192.168.0.150:9502');+ s3 ?3 M/ H  [" ?! p

  3. - b5 _  [$ l# t- q5 u1 t
  4. ws.onopen = function() {
    + f* C+ @, H1 o; H9 O5 _
  5.     console.log("连接成功");
    7 F" `; u8 r& V2 a% A0 M. v; y
  6. };
    2 U. n/ x) t6 w# i" i
  7. ws.onmessage = function(e) {
    3 [% Y; s  f/ `$ i
  8.    console.log(e);, ?- m) R2 d: A* |

  9. 6 P$ @; Z. f5 D! s; t8 h
  10.    var data = e.data;
    ! ?% f  S9 A- _, ?, `. M
  11.    document.getElementById('player').src=data;
    # D; U+ h# e# X7 z, ~! K
  12. };7 f* P8 H5 _2 o+ P4 F
  13. ws.onerror = function() {  J+ s: M' Q+ R! m" n
  14.     console.log("关闭连接");
    , }' [2 y( n" t! m- A
  15. };$ C; x# D6 V. J$ u
  16. </script>
复制代码
录像页面
- F. |; ^/ Z9 x# H) r5 P
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>
    : }6 ~* f1 J% |3 n
  2. 4 v# k, J& K$ ?6 F8 x6 x' \
  3. : x* r7 E6 ?. D+ J6 U# z
  4. + {* r8 |3 R! {" ?* C+ s' t" p: r
  5. <script type="text/javascript" charset="utf-8">7 k$ [9 h' M5 U: {2 N3 T
  6. 5 X! x3 h1 e% c" z* W! e

  7. 5 l2 J- t) X1 @( {( {) `" T% \
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');' i, u6 @( ~0 k! j
  9.     //socket.send("嗨我登陆了");  w. F( _# c' H1 H3 `3 ?" V5 k6 `
  10. 0 ?6 K; G8 e2 M4 ~0 \# r2 y
  11.     var back = document.getElementById('output');& s/ d2 f& n; D" |! q2 w
  12.     var backcontext = back.getContext('2d');
    $ X: f! B8 q( W& f
  13.     var video = document.getElementsByTagName('video')[0];' q9 h7 o4 D; }; O' Y) N& ]# @
  14.     0 C, s) n. E: K* i  c& O! D/ G/ r4 x
  15.     var success = function(stream){  i& d; d# X4 q5 p8 U2 o* t
  16.         video.src = window.URL.createObjectURL(stream);6 |, B# P) O% U+ q4 B
  17.     }
    " m; J+ @$ ^; h% w6 }5 O' Y

  18. * _! T% W3 f4 k& J# B/ s
  19.     socket.onopen = function(){
    ! v; R6 _" q$ ^, @" F" Q" }5 D
  20.         draw();) T5 u4 V+ R" ?2 k
  21.     }& ?# V* Q# O/ K

  22. 9 A0 n( u  ~7 d3 K7 N& _
  23.     var draw = function(){
    + ^* D9 o5 K/ p: R; E5 {
  24.         try{* D. K4 w  ^6 c
  25.             backcontext.drawImage(video,0,0, back.width, back.height);
    6 X$ L$ H0 v: s) x1 }$ S# a
  26.         }catch(e){
    / t8 W( p3 p9 Z4 \2 k0 e+ s# |
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {' D& w: o4 C8 }5 f
  28.                 return setTimeout(draw, 100);
    - A6 I; p" o& }, \2 D) [# c
  29.             } else {
    " M& C9 Z* J3 {( \) n9 e  _
  30.                 throw e;  a+ b( V+ y# c$ A: x, G% ~& w7 y1 F: P
  31.             }7 X, |- V3 q4 M- r8 E. k) @
  32.         }
    4 b! {0 u  o" q  e5 {% @
  33.         if(video.src){+ t; X2 z9 `" ~% m/ k- v" B
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));
    ) X3 ~" E+ Q; R* s& f% i& G& n
  35.         }
    2 N" K" t4 R; f6 D1 z
  36.         setTimeout(draw, 100);$ ^- i" @% s( n( n
  37.     }5 z7 y7 F; a$ h- m! Z6 w' N# U
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||4 k9 j# m0 y& Y# `% m
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;
    ; K1 t' ~& a: D# z) B
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);
    ! n; R" p7 s& }. l. z1 b* v- X9 s* P
  41. </script>
复制代码
  1. php' A  h7 }, w# P$ M- r

  2. 2 H7 w. ?4 c0 F9 Z. c& p2 w7 I
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);) r  T. V# p/ }3 W2 Q
  4. ' \* J) I' y% ]+ R. {0 A
  5. $server->on('open', function (swoole_websocket_server $server, $request) {9 V  t  J0 `, A
  6. 2 h  `. Z' T  U9 R4 r3 Z; \: b
  7.     echo "新用户id:{$request->fd}加入了\n";
    * ~" ~0 u+ D/ o
  8.    // echo "server: handshake success with fd{$request->fd}\n";
    : ]0 U& b# X. p. E
  9. });5 h! U6 T# Y$ o8 ]& J; j; B

  10. ) M1 j) c6 J( D3 E& Y; c  ?$ }
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {3 c  a, z. W1 y# V3 C

  12. ) o; j/ p/ a1 Y  P0 }4 i7 L% ~
  13.     //循环所有数据
      W: C7 T  L  Q7 X
  14.     foreach($server->connections as $fd) {8 y) ]0 E# a! X1 T
  15.         //返回数据( j$ C& O, g0 R8 E
  16.         $server->push($fd, $frame->data);* r2 t8 m  ^4 x; ~
  17.     }6 x/ |( A; X4 u: ?7 I& Z/ P) O9 {

  18. + M0 D5 ?2 Z8 a) k) c! [8 \
  19. });$ b1 i% }8 u' s8 }4 J0 n; ^
  20. ; P) U/ k/ q  ]
  21. $server->on('close', function ($ser, $fd) {
    ' P6 r+ c2 v# @+ G0 c3 K
  22.     echo "用户id: {$fd} 退出\n";& ^) s$ V- W2 X3 ?' ?
  23. });
    # n1 d! R& A! g5 v* v  h
  24. 6 Z+ Q3 X* k; x" q3 [& J
  25. $server->start();
复制代码
+ R1 k) u5 e0 \$ |+ D" B+ ~
0 H" H3 f9 W- B" H: d% [
  w/ K: R( l6 k

& x; ^& s) ^) m, \- P& I# g' B
. ^6 n) T! X6 j7 c' p6 z+ Y% I% l6 O7 |+ y) n) v

9 Z' A7 u/ A7 }$ _( ]: \+ f. E8 {: f: Q* O

4 l* A' p( `9 E" I$ h6 A2 a8 N0 o& F7 \$ [1 U" {9 f8 d9 A
; g/ m) r* ~* \5 r/ M; M  [8 w# S

/ ^* j" q8 T. B, v$ `
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-16 18:17 , Processed in 0.049741 second(s), 20 queries .

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