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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket) y. m, x& z* j4 h: Z6 O, ?
上代码
前端
观看页面
  1. <script type="text/javascript">
      L7 V- u/ ^0 w% t
  2. var ws = new WebSocket('ws://192.168.0.150:9502');1 z2 q2 C' @( |

  3. : b' Y$ i6 R# M: z
  4. ws.onopen = function() {  I# ~; m. D5 P) i
  5.     console.log("连接成功");
    . Y5 R+ @4 n; z% _, p$ J
  6. };2 f, n. F- p7 p
  7. ws.onmessage = function(e) {% }* V# R5 P7 b; }- V% h2 p8 Q
  8.    console.log(e);
    2 ~4 k5 C8 ]0 j2 ~5 @* r) w

  9. 0 d2 [3 g3 l. F# b6 P
  10.    var data = e.data;: H* |: l* p  n5 X7 i0 J  e
  11.    document.getElementById('player').src=data;, S7 r+ G6 S% c7 z4 E5 k
  12. };
    # i1 Q. q. M* ~' J1 g9 b2 Q3 G3 N
  13. ws.onerror = function() {
    ' Z5 Y4 z0 x0 `7 w2 \4 ?2 l7 S
  14.     console.log("关闭连接");" u! Z$ W" @4 b# \5 |4 k) q. T
  15. };  p! W5 T9 z9 t% o  F6 h; `
  16. </script>
复制代码
录像页面
9 ]0 }! L+ [" k( K( a
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>
    3 _2 N# w7 x2 }; O4 h

  2. , S! c1 G7 I$ [) c/ a9 X
  3. $ e& ^% R3 V; F! \. N
  4. ; G  A- ~2 ^1 I6 i9 K
  5. <script type="text/javascript" charset="utf-8">/ \6 a6 z/ r3 d/ W3 i% l
  6. / m% G0 _& ^: Z9 Z
  7. ( q$ S* K; L. I% m; T) S
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');
      B8 b3 x7 F- `* l4 x; B
  9.     //socket.send("嗨我登陆了");
    0 @* o) d& u7 M; |6 p
  10. 3 N- p: x% L% v7 a! U4 E4 V+ r
  11.     var back = document.getElementById('output');
    ! m3 b6 O5 Z+ {, N) h" T! Y
  12.     var backcontext = back.getContext('2d');8 {) ^' V. v0 `% e" l/ A- e$ W
  13.     var video = document.getElementsByTagName('video')[0];9 m2 M5 S: I! L( u
  14.     6 _6 t9 y2 q, S- U+ r
  15.     var success = function(stream){
    ) P* w4 y, n. O+ P- ^
  16.         video.src = window.URL.createObjectURL(stream);9 g' C4 N- J8 V1 j  @
  17.     }
    ! [' @0 K; _) G" H% s( w- }  p
  18. / K+ L4 |8 x/ k9 S0 f/ j8 l( E6 V
  19.     socket.onopen = function(){$ n8 A8 O- H: K
  20.         draw();: l3 i( Q/ z2 @7 b
  21.     }0 p  V$ M% z" g
  22. 6 }3 o" a# |, v9 g- W+ D
  23.     var draw = function(){$ T- e) t/ I/ {6 C( ~6 p6 W8 }9 D
  24.         try{- l  ^3 J# i* \( {3 {
  25.             backcontext.drawImage(video,0,0, back.width, back.height);
    4 e9 o1 h8 C, N3 M2 `# e3 w
  26.         }catch(e){
    ) c4 T4 k; s4 A: ]9 ~6 r1 f
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {3 H+ Q2 \' Z4 N3 |2 L8 j
  28.                 return setTimeout(draw, 100);& F- J8 i4 A" p/ o: [3 m4 X: P
  29.             } else {
    & Y. W& W0 n) @% ^3 d' \
  30.                 throw e;
    0 S% Z& f2 J" s' t% _+ j
  31.             }
    - F; E6 p6 r4 l  a
  32.         }
    ( F/ ^( W. ?3 n: G  x$ M8 S# E! W
  33.         if(video.src){
    # O  s9 C" _2 i) Q: }
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));# |3 f6 p! ~( b. \9 J
  35.         }
      ?% W! y& h* n! j
  36.         setTimeout(draw, 100);
    " M& [; W, L+ D" V
  37.     }
    ! k6 z( B# I: z. ~
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||
    8 Q$ ?- m5 R. M
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;+ T  L: y2 o/ F* }6 n
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);' O5 a4 q# e' x; u4 j4 k
  41. </script>
复制代码
  1. php
    2 v! a, ~( Y; y5 M9 f8 x5 [

  2. / Z7 t* k6 n/ i
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);
    * n0 [; \& `. N( x/ {; V0 D9 O3 ?

  4. , P7 K* M: y& ?& a3 ~0 G( V% C8 T! e
  5. $server->on('open', function (swoole_websocket_server $server, $request) {
    ( G% S! S  ]6 r+ V7 `
  6. ( j2 w3 V; a+ }/ Z" s# Z! ~
  7.     echo "新用户id:{$request->fd}加入了\n";
    0 c( f% C$ U4 q. m" w* Q4 I. V
  8.    // echo "server: handshake success with fd{$request->fd}\n";
    * i& b: ~2 u( c$ `6 c* t
  9. });
    1 i, P' U! Q8 N+ M$ a4 y2 k
  10. ) ?2 R) N6 `7 Q6 S9 l% y
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {$ f" A1 \2 c3 `% |9 d
  12. ( Q  {9 o* n6 [2 A' @
  13.     //循环所有数据
    - m' b2 m8 u8 g0 S" K" _% }6 y
  14.     foreach($server->connections as $fd) {7 d4 _0 w4 x) v2 Z" o+ ^
  15.         //返回数据
    + \- C8 ?% R9 O3 J4 g8 N' ~+ O( }
  16.         $server->push($fd, $frame->data);
    , w3 h8 U" A0 p. s& Z
  17.     }
    - M" [5 ~* n' ?! g: N# [

  18. & E& Z: O* F! F* L& @
  19. });
    : o# ~" p- c7 A, f' N! Y4 Y

  20. 4 S, w3 V4 ~' h7 Y
  21. $server->on('close', function ($ser, $fd) {3 M; @: b$ Q& e3 U
  22.     echo "用户id: {$fd} 退出\n";' C9 e: }: H  @" x
  23. });
    $ H. B' ]. x0 F: o

  24. ! N+ L3 L' ^. j
  25. $server->start();
复制代码
; z3 K- _$ Z, Q$ t) j
' \& B7 c5 q4 g* y8 b

4 Q. r; m' x! m+ W6 m( \' \$ O/ E  x! Q9 ?. Q6 W+ [# P

, f! }; }. y2 S* [, ~4 e4 U/ [7 M9 ^4 s: D( _  S

2 |+ m0 @* |. ?/ k& g$ S7 C4 l" K6 N9 M% |9 e: B% C

: b2 V" i4 E" ~9 U0 V! J4 I# y4 v0 R' Y6 X8 s; l- O

7 u# x3 v9 f- h( l9 w2 F' ]# u% C3 Z; S1 c/ B
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-9-21 00:16 , Processed in 0.076445 second(s), 20 queries .

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