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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket' R) Z/ T/ N' `* \8 O9 k
上代码
前端
观看页面
  1. <script type="text/javascript">0 O2 ]2 w( r: X: i' D
  2. var ws = new WebSocket('ws://192.168.0.150:9502');
    1 z3 }4 l! Z. P+ z9 \

  3. 4 R& y+ s# B* D' b! a
  4. ws.onopen = function() {
    , y3 Y$ W: U% i" w0 o! {5 P
  5.     console.log("连接成功");) d1 g+ }2 ?2 j! G( K9 ^
  6. };
    : _  A: g% U; n7 n1 t% o
  7. ws.onmessage = function(e) {
    1 z2 f) \- w- S, v# E2 }
  8.    console.log(e);, K) m# \" J" ^+ T  o

  9. , d, g' r' M/ ?2 n& h- H
  10.    var data = e.data;0 a+ t/ m" |! r5 t- g3 B
  11.    document.getElementById('player').src=data;
    ) X) ~7 ~* L( X- |/ L* ?+ e) `
  12. };4 I8 g  c8 z5 w. d, v) ~2 o) B) c) p4 c
  13. ws.onerror = function() {0 r% C: J% D4 n6 w5 c9 X4 Y
  14.     console.log("关闭连接");
    9 h" l, X" l  y" B1 Q
  15. };3 j5 A) c2 u5 w) s4 o
  16. </script>
复制代码
录像页面

9 W1 K% l$ H5 {
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>7 M, H- T8 q+ z/ k- k

  2. 5 X6 v6 q" Z( T% g
  3.   M* V3 B1 X2 W& ]1 l- j; p  J

  4. 2 R" E1 s) D$ ?/ {2 H3 N  `# t
  5. <script type="text/javascript" charset="utf-8">9 N# s+ z+ M. p
  6. 3 V9 V3 P* {- h, n! r& S6 N) k

  7. 7 v. b" H3 p+ Z- R! A
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');' L% s" h4 E4 O. f
  9.     //socket.send("嗨我登陆了");: o  H7 Y5 ~) O! t2 G# h) U
  10. % |4 P/ m) v7 g0 J5 G4 `; Y/ ^
  11.     var back = document.getElementById('output');: f" W7 M$ K* J! t! G
  12.     var backcontext = back.getContext('2d');' p1 ?5 [" G: H" R* N
  13.     var video = document.getElementsByTagName('video')[0];
    2 D2 V2 F! }8 Q0 w1 I
  14.     ) Q1 _/ o- d& \" r
  15.     var success = function(stream){
    7 d% i, V  b( l: _9 k/ i
  16.         video.src = window.URL.createObjectURL(stream);
      o: J) o# h% t, v( |& R" b4 v9 F
  17.     }
    ' _* o  B$ h: J- ^+ D& y6 l
  18. & G& E" Z( Q' J' N  o$ N9 V/ F) K
  19.     socket.onopen = function(){
    7 l0 [1 K, i* ^
  20.         draw();$ S* i0 S- K2 u, k, L' K/ f. d4 Z: C
  21.     }% ?1 G- g+ s! ]2 }
  22. % S6 ^, ?) m% G9 B( Z: Q1 {
  23.     var draw = function(){/ F, N' D. m+ E4 l
  24.         try{' Y* \# [% ~+ e$ G  ?7 Q3 S
  25.             backcontext.drawImage(video,0,0, back.width, back.height);
    ) o" a- w- ?! ]6 f: b. z
  26.         }catch(e){! e8 z0 H/ _4 ]" V9 G; j
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {/ o9 D& y& K: E  h6 o
  28.                 return setTimeout(draw, 100);3 M/ X$ U) o# N# z4 G! g7 V% y0 b
  29.             } else {5 [* z$ ~4 q. D+ X
  30.                 throw e;
    7 j4 K! R8 d5 [9 n3 ?0 r. Z
  31.             }' o" v5 l- @, p$ d) x- Z
  32.         }
    : u9 X- L( P8 G
  33.         if(video.src){3 i. g7 j( O; _9 n/ H% a0 @; l2 T
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));
      q3 e* A# g" o/ B6 c/ g
  35.         }
    ! P1 I0 ?5 J* p9 ~# m3 a+ b. f
  36.         setTimeout(draw, 100);0 a% b; F5 D2 R+ D3 X$ o. f
  37.     }
    ; l2 ^* I$ ~' [& [) i6 O( ?6 q
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||
    + k3 K! n1 e. e/ S+ y' u
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;
    + N# V" q7 q# F$ H* I2 p4 T
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);9 a. j. v& ]1 \) b
  41. </script>
复制代码
  1. php2 S9 ^9 |- K( Z- s5 j. F

  2. 2 ]  h1 t7 D0 |1 o: B# k
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);3 T" f- G) r% h5 b9 ?
  4. ) v+ E/ H1 u$ m7 A, P4 y
  5. $server->on('open', function (swoole_websocket_server $server, $request) {+ u+ Z0 o1 K. K4 e# a
  6. % I  q6 g& l2 o. A
  7.     echo "新用户id:{$request->fd}加入了\n";
    # q/ Y6 E1 r4 x7 T
  8.    // echo "server: handshake success with fd{$request->fd}\n";0 G# J# e: ]2 j+ F" k' E2 Q
  9. });
    " Y: a3 p$ {8 B0 p) Z
  10. 8 V# H1 v- p# F( M/ ~
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {# D( G& x# B' }$ _: I

  12. 1 n0 f& ~6 T6 _5 S& S8 n* ]
  13.     //循环所有数据
    . r0 m6 _1 K- V- a+ d
  14.     foreach($server->connections as $fd) {
    * m4 K% V: ]  o+ o) `3 W
  15.         //返回数据/ Z4 E9 e, [: O* b
  16.         $server->push($fd, $frame->data);/ I# ~. N+ d! ~+ k- C- ?. T4 y
  17.     }
    $ ]  }' m, w$ J  h* A8 O

  18.   P7 U' x# l/ ]# n
  19. });
    / @, H2 v# }" K  N) Y: P5 F3 ^% L
  20. 3 P4 Y" f) \) N5 s9 X9 K7 q& O( [
  21. $server->on('close', function ($ser, $fd) {: {# i8 J& |0 H
  22.     echo "用户id: {$fd} 退出\n";
    5 D  ~. `0 U# T/ w, ]
  23. });
    + z5 I+ D2 z/ P0 o; ]9 L7 \
  24. 2 Z- [" }; O+ C, Y- D% C
  25. $server->start();
复制代码
" ~' ^- C9 N: D' A

" t( k% q# H, X$ x* _7 Z; V  j4 r
& K5 s: P* i- T& W, ?$ {2 @
, l& K4 y. s1 |! e0 P. H
. V# V/ I9 [2 S& U* O7 n" {: I. c
; m2 J' j% L4 }+ r" v
4 u& L9 [# `( n

7 N+ H, K; }/ A% x6 w( b& R* a) J, S% K8 H; x
1 f- W  J! |% o5 U1 e4 p8 Q

- u: v1 l. b2 T. H9 M" A
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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