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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket) V7 X; w2 W0 D, E2 O
上代码
前端
观看页面
  1. <script type="text/javascript">
    & r  M# J: o4 v3 s; q5 q: g  V' O
  2. var ws = new WebSocket('ws://192.168.0.150:9502');: O" g8 g$ K' p/ ~1 c* t

  3. . r0 l1 m) R$ V8 a
  4. ws.onopen = function() {5 }2 R( A% u* P3 R
  5.     console.log("连接成功");8 ~6 d2 t) F* R2 @  ^3 g
  6. };7 V' H: W2 \" F5 K. K+ u7 Q
  7. ws.onmessage = function(e) {. N3 z: m8 ?& d4 `7 t
  8.    console.log(e);
    3 `" L$ x  o9 K, G

  9. + T& G1 N8 l6 I1 g) L0 x9 O
  10.    var data = e.data;
    + g% J4 f9 O) |
  11.    document.getElementById('player').src=data;9 `5 G! q+ Y, T, @; B
  12. };
    ) k$ W- i7 i# _5 ~
  13. ws.onerror = function() {
    $ F( ~2 S' E# m1 T4 g
  14.     console.log("关闭连接");# I. ^: }% T! ~# E4 A9 W1 @
  15. };3 _( w+ s3 b/ ?, h/ g
  16. </script>
复制代码
录像页面

! U* o$ m" ]- t6 z( C9 k
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>
    + E/ q3 H: ], Q2 n5 O6 |

  2. 5 m# Z0 ]/ V4 \# U# ]* G
  3. 1 X4 C0 F* w$ S/ Y
  4. 9 W1 L2 A! R8 x$ B7 ?, l& P( B1 x
  5. <script type="text/javascript" charset="utf-8">
    2 X* o6 L* r% i5 U
  6. & j0 ]( O* }/ ^

  7. 0 c' v. _$ q5 \9 w: h( z, }
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');+ ^' ~: P6 I  ^8 g
  9.     //socket.send("嗨我登陆了");- R3 ^) d9 M0 H
  10. 7 Q0 I8 S* s0 J& c& J3 U
  11.     var back = document.getElementById('output');
    $ Q% @2 A$ @! X3 r5 z$ b7 L
  12.     var backcontext = back.getContext('2d');
    4 I% b! y) S6 s% E# y: P
  13.     var video = document.getElementsByTagName('video')[0];9 X7 {1 ^! ?( U0 e. d% K9 O
  14.     ; c) C' L! D: U5 X+ Q
  15.     var success = function(stream){3 x8 X' v  g: t
  16.         video.src = window.URL.createObjectURL(stream);
    6 B; c+ {2 E1 M9 ]3 s" i  o2 P
  17.     }- O5 ?3 p& T8 g( j. W! M
  18. $ u7 Q$ `( j% }6 z2 D: Y, M1 k9 F
  19.     socket.onopen = function(){
    ; |1 U  S' q5 x. g8 T1 E9 z1 [$ ]7 O
  20.         draw();  V; n8 _5 M/ j7 K
  21.     }; y. r0 Q: `: O. ~" R

  22.   X  ^. W1 H- k9 W# L3 f* a
  23.     var draw = function(){% B/ K% J, ?4 t, f2 [/ u, A
  24.         try{' w- S% a, O. V  @7 w
  25.             backcontext.drawImage(video,0,0, back.width, back.height);; ]% S2 Y" k  l1 x
  26.         }catch(e){6 F7 x" h8 R: Y: j# S8 A- `8 C/ N/ J  [
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {
    4 `" I( B0 ^! J1 G4 Q
  28.                 return setTimeout(draw, 100);! [/ B/ I* w5 ^" J% y% `  A7 Q
  29.             } else {
    ; R; y' H" J1 A7 |% Q
  30.                 throw e;
    6 z$ }& i9 b! r
  31.             }. D/ Z) q" Z  u4 `" E
  32.         }
    $ {* x: y: C: p! L
  33.         if(video.src){" c4 ~3 k( s' Y4 ?0 _' }
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));# w9 s6 g) L& z: F% W8 p
  35.         }' Z- k; J! g) i  v7 l& H4 Q+ Z
  36.         setTimeout(draw, 100);
    ! Z! I6 R' b  e. p0 v
  37.     }/ M5 s" Y* B7 M# ?- g1 M* Q
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||" x4 O+ n/ O9 U& t3 V# g
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;" D! M* I( K) y, f
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);
    9 D5 H% W) N! Z1 b6 f
  41. </script>
复制代码
  1. php% r8 w! w# G; Q
  2. $ ]6 e2 u/ s5 H. H! [4 v
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);; y* y9 O7 I5 k5 ?: g6 u
  4. ) J& m8 F) [" X% K6 \) |  y4 C
  5. $server->on('open', function (swoole_websocket_server $server, $request) {
    , ^2 ?+ O, s% V0 T; z

  6. % _0 Q- h8 u5 Y9 b
  7.     echo "新用户id:{$request->fd}加入了\n";% l7 A4 W- [) H* D( s8 x
  8.    // echo "server: handshake success with fd{$request->fd}\n";! `3 F. S5 k& D# T) M
  9. });
    ( g8 l* V2 L- K8 T8 p6 k; @

  10. ; y% w/ {5 O* u7 D/ ~, M% K
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {
    8 Q: _% V$ t' U9 ]0 S( G( T
  12. 2 N6 F6 ^$ L' A2 x+ P
  13.     //循环所有数据
    3 l3 y* Q, v, G7 u2 D" w
  14.     foreach($server->connections as $fd) {- P/ H" a% ^8 X" _7 X9 j5 c# J
  15.         //返回数据
    6 h3 l! @8 Z+ E; ?
  16.         $server->push($fd, $frame->data);
    & M, j- c* o- c3 v
  17.     }
    * U# X) A7 {5 }: f; d
  18. . y+ c/ J4 ~' K4 R) X  C
  19. });
    % `" s2 N. r2 i( {
  20. & m+ B7 T* J$ b4 Z/ N0 @% }
  21. $server->on('close', function ($ser, $fd) {) `4 ~1 h( K6 G6 c$ p& F& J0 h% S
  22.     echo "用户id: {$fd} 退出\n";; [) h0 v) e# u  A5 i/ w  ?3 |/ X
  23. });
    6 P, I9 S5 u6 T: h$ e
  24. - ^6 E7 ^7 ]! a+ T
  25. $server->start();
复制代码

% G7 C- W4 i5 O
" V# T- }7 t3 G; q$ G
3 y7 e: ^( j5 c& a5 _9 y5 c8 ?' M. H$ h& w. T5 R7 z% X5 ^# s1 _

5 Z) X: \  [: Y9 z% E9 ^# j8 a
; K% J7 L6 w, O3 w2 L  l; `% k' Q
0 U0 l+ r+ ?! ~- o) k7 R# `2 n/ Q2 c  R/ c- {: v4 D

2 k1 I' o4 O- q" ?% Z: ?) g& b+ ^" O
9 A* F7 b8 s% w1 H; K+ E
; b- Y# U3 }2 }
" @, y  W4 N5 l1 m6 J0 Q" |' t
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 21:27 , Processed in 0.102850 second(s), 19 queries .

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