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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket2 L6 H; _8 G$ ], A7 V
上代码
前端
观看页面
  1. <script type="text/javascript">
    : c9 V- |! P4 g/ F- X
  2. var ws = new WebSocket('ws://192.168.0.150:9502');
    7 _3 u: R& X( `& D  b, D; K

  3. / Q6 |! K$ A8 B& M1 G0 ]) I
  4. ws.onopen = function() {9 J# J  A) c" [( F3 U. {3 ]. }7 z
  5.     console.log("连接成功");
    & `) ~7 \: p  l
  6. };
    # D5 l; S) T# Q" |2 k* P) |, @
  7. ws.onmessage = function(e) {
    ( f  H3 b2 F" l
  8.    console.log(e);# {2 ^  u3 a/ K6 ]8 [3 C9 }1 Y
  9. " G8 n/ ^8 {: @7 U/ a
  10.    var data = e.data;
    4 x- D& e/ t5 Z- B
  11.    document.getElementById('player').src=data;
    - B) x% R3 ]4 H; c- M0 m
  12. };
    # }: a1 T, k' ], n- b
  13. ws.onerror = function() {1 m9 }: f) G$ C; e, t
  14.     console.log("关闭连接");! `' |- A! H3 D" ?. X! S. h
  15. };5 i" S$ @- C) Q& R
  16. </script>
复制代码
录像页面
7 i, g' G" a. h" E7 B' F3 ?5 F+ P
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>. c* h4 p% h! m3 p- z, D8 U4 ?
  2. ! [% i3 B; A+ d0 F0 ^

  3. ' B( b" X! W& c1 C2 c

  4. , s: t0 ]6 a6 \8 P
  5. <script type="text/javascript" charset="utf-8">
    ( f' ^; I) g& B

  6. $ G1 r* M4 Q9 x) Q

  7. & k6 b2 N! D  T& g& i) \
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');2 E6 U9 |% A* ^* V7 _
  9.     //socket.send("嗨我登陆了");
    ( ^6 f( w; ?$ \" Y

  10. 2 r% Q4 @1 P( B3 U. ~
  11.     var back = document.getElementById('output');
    & x- Q/ \0 ?$ ?
  12.     var backcontext = back.getContext('2d');& P' c. z# T, q& H2 r
  13.     var video = document.getElementsByTagName('video')[0];
    : k/ A6 N3 q# Y4 h  i' K' M, s
  14.     7 l" V9 f( e* j7 I1 N% ~
  15.     var success = function(stream){
    6 W0 q2 Q' r5 k/ n8 N- A, i" A* r; w
  16.         video.src = window.URL.createObjectURL(stream);
    + T! `7 t) ^  i, q
  17.     }% w3 K. f3 \! Q0 V" R5 }

  18. $ m6 J7 ~) [* ]1 R
  19.     socket.onopen = function(){% _1 M/ r3 O% Z+ ^+ @! a
  20.         draw();
    ! f0 V6 O" Y' D
  21.     }
    6 C! X; G3 f! n

  22. # H$ C6 r$ w% m, v  o3 E/ D+ Q
  23.     var draw = function(){
    ( M; @# k4 Q& u/ O/ R: Q2 h
  24.         try{$ M0 U8 p1 z; s6 W8 X  E
  25.             backcontext.drawImage(video,0,0, back.width, back.height);
    * }9 H" s  s* t' Z7 `3 o' Y. L- U( }4 y3 b
  26.         }catch(e){, Z4 C8 [; J  V8 s4 B( a$ L
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {5 w! Y; f/ z5 Z3 Z& K! e5 \% \( i8 q2 }
  28.                 return setTimeout(draw, 100);
    ; n- {( T3 f' v! R) p
  29.             } else {
    & ~4 w1 `8 N. }' b; A3 y* G9 {
  30.                 throw e;
      z0 h! k/ x% V# }: u
  31.             }+ @. [& G0 w9 m/ h
  32.         }
    % B0 X( k6 l) ]3 ?' A( W
  33.         if(video.src){
    * W0 V: T7 b. v& N
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));
    : B- P: [; E" u' l
  35.         }
    : b- f* @! x% H5 `/ n. c# F
  36.         setTimeout(draw, 100);0 `4 G( n% p; C! ~
  37.     }% `  W4 k5 X* H" B# y
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||1 q; A8 R% C0 F2 @3 O: e
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;
    * n$ ], c: p; ?" }( T! p) q4 m
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);
    4 A+ M5 N) E& `" T7 \2 ^5 d
  41. </script>
复制代码
  1. php# K& u/ S3 _( b/ H1 B1 O( E7 ]

  2. 2 c: r- Z7 F8 y' t( g3 h( G
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);, o$ `) A1 o1 D- t7 V  ~2 r8 B
  4. 9 I. i2 Q8 V4 W
  5. $server->on('open', function (swoole_websocket_server $server, $request) {
      n1 @) \; p: `: {4 l3 E
  6. ! c* q  N3 g' y* |* c! T
  7.     echo "新用户id:{$request->fd}加入了\n";
    ' c/ h% ]9 D: Q- }5 m  ]
  8.    // echo "server: handshake success with fd{$request->fd}\n";
    # o' k1 p' D" z9 T
  9. });; }' }' O1 l3 v# i+ s2 y
  10. & ~" H' b) G) ~5 m& _
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {
    ( ]& S  c, x8 M$ J# d

  12. 3 a" K; n! v+ h! b
  13.     //循环所有数据
    4 ?6 b! J  p; M/ x; r; [# Z
  14.     foreach($server->connections as $fd) {
    ) K" A' w& A, J% e$ j2 U
  15.         //返回数据
    ! |8 P6 M7 E* ^6 A0 K6 v
  16.         $server->push($fd, $frame->data);; z. _" y% z/ T' D
  17.     }
    % |. A; o: {; r. c
  18. ! p( T' k- [& L
  19. });1 d! `' C! ^! t9 _3 Z9 P. o
  20. 2 {& }6 k, J* P( u
  21. $server->on('close', function ($ser, $fd) {, N# c; m- t9 }+ r- f
  22.     echo "用户id: {$fd} 退出\n";
    ) n3 n3 g2 g% k0 M: `1 K
  23. });0 W( S! b& t. v% N& e/ v" f
  24. 9 {9 s. q$ W2 X" K
  25. $server->start();
复制代码
' s/ C7 b6 J3 e( I* ^& n
+ j, `- H" e- J# q; Q& U9 J
. C( Z4 l  w. [' Z
3 y0 }" P& Q* S5 u6 s" B' U
2 z: S9 G( N6 o, L

( R$ i- e& B+ v5 f( x
8 B# N& i# @# n4 B8 E5 A: R( I" y6 e2 Z' I

& O( Y4 S1 P6 t! Y
' i+ T+ u! |* c' m$ _- Q1 B% A+ L9 z% O% n3 D
  T- [  ]) `5 \6 U- L+ S
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-16 18:18 , Processed in 0.069445 second(s), 19 queries .

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