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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket
) q  Q0 a" i- Z3 ^上代码
前端
观看页面
  1. <script type="text/javascript">+ V8 E# N7 N8 S+ O% ~- H
  2. var ws = new WebSocket('ws://192.168.0.150:9502');
    4 I" k5 m* k4 @: R' L
  3. , \/ L1 d# \; I0 q! [
  4. ws.onopen = function() {
    / i2 q$ X2 x, ?3 h8 E
  5.     console.log("连接成功");8 l! b& Z5 M& [" p2 D6 V
  6. };
    ; v4 c! L, J' W" H0 X. c: H
  7. ws.onmessage = function(e) {" k8 B9 n- `7 z
  8.    console.log(e);
    * w) Y- o/ I9 O
  9.   a+ ^# Q5 |* J% t$ ?7 I
  10.    var data = e.data;. a; M1 i( m6 y, e" f
  11.    document.getElementById('player').src=data;* m0 }" B7 Q$ ]$ Y3 p, ~
  12. };
    & h5 \% \! j# _/ `. W
  13. ws.onerror = function() {# ]2 o9 [/ I/ \1 ~$ [4 h
  14.     console.log("关闭连接");& O5 {/ n  Q- k% j0 h8 b" v" i, d
  15. };
    * o  a$ D- B9 L' b. Q
  16. </script>
复制代码
录像页面

- S2 v$ w, g) Z: X
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>
    0 V. I6 j/ |0 i: J# M9 G* b

  2.   U* L: Q) l8 g2 c

  3.   x5 [9 s* ~0 I) D* F. c* C7 z+ w

  4. 2 N9 a" x: ~- d) w
  5. <script type="text/javascript" charset="utf-8">$ a- n- C' i4 r) G2 ^5 E

  6. : s' I8 P7 \; z  z
  7. * y" s  y" P1 j  {3 j0 E$ q
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');0 P% F+ Y% X$ H4 m# w
  9.     //socket.send("嗨我登陆了");
    " d8 w* q* ^: Q: p: g
  10. 3 o+ r* q& I) _
  11.     var back = document.getElementById('output');) C$ p+ Y. G! Z6 `% K3 {" Q
  12.     var backcontext = back.getContext('2d');0 c% @7 B# s  L1 D; L
  13.     var video = document.getElementsByTagName('video')[0];' s" B0 N: F# e( h; g! V7 k6 G
  14.    
    ' F9 \  K7 L$ i
  15.     var success = function(stream){& m6 q$ {% Q2 R0 \9 D
  16.         video.src = window.URL.createObjectURL(stream);' [8 Y* f/ [8 C& m2 C
  17.     }* D8 x6 Q1 a% v
  18. ; c5 u4 }1 c  [
  19.     socket.onopen = function(){) i2 l3 C% h, L$ C6 K
  20.         draw();
    ! j" g  t$ Y( b" h/ M
  21.     }  ~$ U# I0 t% d5 V7 t9 K
  22. $ s; M; S" J; |2 i5 y/ f
  23.     var draw = function(){$ c; `! [# B) e7 J# `  V! d. v
  24.         try{
    ! n# }" v- B( y+ |; m
  25.             backcontext.drawImage(video,0,0, back.width, back.height);
    : E, V4 |6 t6 S6 u+ W" N
  26.         }catch(e){
    % w2 b$ Z' Z( K4 i& Z* f
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {; S- o* _2 I# \2 P( R5 a
  28.                 return setTimeout(draw, 100);
    ' s+ q/ @& a7 v0 b' m
  29.             } else {3 B" Y& g! z8 \; M( G7 B2 J0 z
  30.                 throw e;
    * t; ^$ S5 X- l& ~+ l3 s7 h3 _
  31.             }
    7 ^/ {6 Z* o2 T' x
  32.         }
    : u9 @) z6 W8 M4 U4 n' `5 Y
  33.         if(video.src){
    " B( o, E' X" G* p9 u6 d  Q7 U
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));6 u! w) R  W. V; X& S8 ^( R
  35.         }* r! H. O/ K* V' F! ]
  36.         setTimeout(draw, 100);! |6 F4 k4 D# C0 Y4 [5 `  d; ?
  37.     }
    ' \) Z7 k) w( |) B" R- a" V
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||3 ^: x3 M: i- o( a4 ~' j$ Y
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;+ j2 Y5 Y1 B8 e, Y$ j3 l$ p
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);! |" \3 q0 g4 q8 y0 C# [
  41. </script>
复制代码
  1. php& d$ x) j2 ^! @) K  E

  2. 7 t/ R+ \" U: D8 f) ^5 L
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);+ y2 W+ @# r4 e1 w, Q$ u* F  R

  4. 3 w5 \, K, ?0 n& E' o
  5. $server->on('open', function (swoole_websocket_server $server, $request) {
    & C8 i/ s: n" a! |; v1 {" S
  6. ) f) K  k# f  b. G, A' F0 d
  7.     echo "新用户id:{$request->fd}加入了\n";- ]! y' p# s" p. i. a
  8.    // echo "server: handshake success with fd{$request->fd}\n";( i! U4 ?# I+ B0 q: N! q: T
  9. });
    * `* X$ j7 C- _

  10. : V" w! S6 _2 l+ T
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {5 P* z* K* u7 ^% M/ r- D
  12. ! O2 n, |: ?2 V, N
  13.     //循环所有数据$ j+ o+ ~9 s4 ]; t1 `
  14.     foreach($server->connections as $fd) {
    9 n/ L) ~7 |' H3 j$ `" Q
  15.         //返回数据
    ' A; D" J4 @3 l+ O  q; W+ `
  16.         $server->push($fd, $frame->data);
    ; T/ ~# M0 V) f. j' o
  17.     }
    * N4 j) M$ n# |0 N4 B# s% z
  18.   [0 L4 c2 Y: G; s6 g& h  \
  19. });
    9 V: I. D! V* p3 S1 ~. |, R+ }* H, p2 a

  20. ; i* H; e0 h7 r4 r) Q
  21. $server->on('close', function ($ser, $fd) {
      f* R6 O& }" `9 |5 h, V
  22.     echo "用户id: {$fd} 退出\n";
    / N/ O4 e9 T6 n* O) P, z2 [
  23. });
    ' |, K& D: q& s

  24. / E0 {: t) Q3 z9 f( _3 s
  25. $server->start();
复制代码

" v$ ?5 c! V6 u. N7 h5 V+ d. h
) p8 z9 @0 w1 P" M
7 r5 D3 i- G& e
% o  e0 t3 \  Z$ @+ V* W  f8 o) W0 A
4 \6 G" g( g9 a

  i+ Q- x- c9 b9 Z; v0 D8 p
; s8 h! I) y5 ~7 w$ Y3 A  L' Z; Y, B( P; D& u
) c# p5 `, K* W8 L* d
& |+ G8 z+ j# `# ^4 e- f- J- ]
- Y" X, y1 b1 u6 a, u
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-1-30 14:33 , Processed in 0.075579 second(s), 19 queries .

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