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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
主要使用 webstocket
. |2 g. D0 I: W  O+ F8 h9 x2 x" W7 b上代码
前端
观看页面
  1. <script type="text/javascript">+ A/ m# z! E3 k$ [* u. @. a
  2. var ws = new WebSocket('ws://192.168.0.150:9502');8 q3 n& n( j$ b0 p4 N

  3. ) k8 T7 b) A3 ~- L
  4. ws.onopen = function() {' h5 I; l0 x. |
  5.     console.log("连接成功");. }9 f8 t4 h  j7 |* M
  6. };
    5 d$ b* f& n9 p. R  ~( |' W' |3 u
  7. ws.onmessage = function(e) {" }( |. n* l7 i6 _
  8.    console.log(e);
    , e# b3 Z/ w$ C3 r
  9. / l9 u. h$ t2 U' E4 {$ |4 ^# d5 {
  10.    var data = e.data;; b/ l' O2 f3 k. `% q
  11.    document.getElementById('player').src=data;
    ' D+ q9 \, }9 Y3 t5 R- i
  12. };
    " ~3 |6 d6 }, i9 F. S/ j
  13. ws.onerror = function() {# E9 V$ o9 s* L
  14.     console.log("关闭连接");# f' Z6 }3 I3 t9 [3 p
  15. };' n0 d  Y& J& w
  16. </script>
复制代码
录像页面

$ D% Y& _; [$ N. D9 b9 j
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>5 t7 l1 |. ^! ]
  2. 0 B% B( k5 A, G. ]+ Y
  3. - b) p& r" I, x( Y. x5 Q# t
  4. - V  v9 s: m+ Y9 B8 `$ ?; e" e
  5. <script type="text/javascript" charset="utf-8">2 l5 e/ j. m( k( O

  6. ) X8 }( U# W3 E! ]6 u

  7. * b0 F/ _/ w3 j, J% k: L* s# j
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');2 P6 @. p3 b5 [  ]: W- h& l
  9.     //socket.send("嗨我登陆了");
    4 F) X' d5 j6 m( N2 {) }

  10. - c- u& H: C# t% E# O! b$ m
  11.     var back = document.getElementById('output');& r5 Z% M# ?0 X2 {4 @0 U
  12.     var backcontext = back.getContext('2d');+ R7 ^* U8 G3 Q  c1 z. |
  13.     var video = document.getElementsByTagName('video')[0];4 G$ V# ?9 Z: Q$ d" I9 [- `: J
  14.     ( C5 f7 s9 @- n7 }9 ?
  15.     var success = function(stream){1 S: ?( P- b2 i% A7 R
  16.         video.src = window.URL.createObjectURL(stream);
    6 q- j% }, O+ M/ ]
  17.     }' u: B2 x# w4 G% p7 ^

  18. % r2 N* A8 k4 }( ^2 B
  19.     socket.onopen = function(){9 E8 G& m; l$ h
  20.         draw();8 o+ S, b/ k2 N4 Z8 I: L
  21.     }7 D. ]( V, m: i" C/ N$ ~# J

  22. ) a: M8 N  A" ?7 k; H  Z
  23.     var draw = function(){
    3 c$ l/ \6 N0 {# B
  24.         try{
    3 G4 Y! h3 m1 q! k  r- m
  25.             backcontext.drawImage(video,0,0, back.width, back.height);# R$ {$ N. Q$ ~' E8 X) W
  26.         }catch(e){7 N5 q, E9 g8 ^
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {2 M: p- p) G/ \& d4 R8 T
  28.                 return setTimeout(draw, 100);
    6 x: }9 V6 B9 d
  29.             } else {
    9 A, x3 G; M- b+ G( X+ c8 z0 w
  30.                 throw e;
    8 x: ~) X, a# G. {8 q1 j
  31.             }! j3 @7 [5 M8 e$ f+ a; A
  32.         }
    & G7 b8 I+ k5 I& z* L
  33.         if(video.src){
    ' G+ L. J# S7 @4 T6 [
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));
    ! V; ]. @3 ?. u1 g. J1 w$ w0 T2 a: a, L7 I
  35.         }  @. L  R# _, {( k$ q- J: X
  36.         setTimeout(draw, 100);8 k. [- `( l: c: S# N) }% |' s) K
  37.     }
    5 q' |6 O7 d9 a4 @5 _
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||+ ]: ~" V' v% S5 N5 F. F6 E
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;
    7 P- r+ J/ S5 k% k# j
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);1 Q1 k: `- A$ V% H
  41. </script>
复制代码
  1. php
    3 C/ b8 a8 m4 r* |* x
  2. ( {/ T8 ~. X5 q
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);
    " V" n( ~5 p0 }$ j- h

  4. 0 G  P+ P7 d5 j* P
  5. $server->on('open', function (swoole_websocket_server $server, $request) {' X  M9 F' \$ T" t! Y0 R* Q% q

  6. % Q2 K) @; X0 ^( f8 b% W; y8 I
  7.     echo "新用户id:{$request->fd}加入了\n";
    ( Y8 V- H; ]/ l% A$ Z8 {
  8.    // echo "server: handshake success with fd{$request->fd}\n";
    ) G  |/ u! K  I1 Q" Z' ]
  9. });
    4 H- Q* |4 g# a  R& l1 @$ k
  10. ) i/ ]" ^4 k+ u5 x* ~  _+ X
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {
    & e$ y: ~, P! F8 g' @) _; I
  12. ) J! N) ^8 c/ g( _# o$ I3 S
  13.     //循环所有数据. n- W* @& C# w0 P
  14.     foreach($server->connections as $fd) {2 C, _$ F# g- G1 z1 k
  15.         //返回数据
    7 U& A2 G) b6 H& j3 K4 D
  16.         $server->push($fd, $frame->data);0 h+ O( {3 o0 ?) ]9 [$ \# k  Y
  17.     }
    ' U- M0 w: {& l( d) d- m

  18. - _$ ]6 i2 V. u: D1 \
  19. });- Q9 E) k- H  p+ p
  20. 3 |2 |% \7 o. b. {5 k
  21. $server->on('close', function ($ser, $fd) {, i. E4 K2 f( z2 M
  22.     echo "用户id: {$fd} 退出\n";
    4 k0 Z: O4 q; [. `
  23. });$ @" z+ Q9 F) ~1 s. S& K' V. E. i4 _

  24. ! C5 g& l7 F: T
  25. $server->start();
复制代码
: B% \5 V6 i: H6 s4 ?7 `, \* l

! @* c' g& R9 ]. ?$ D5 R2 `) c: a" j) U0 }8 }

7 h3 g* e/ S/ |# |  @) X9 n
% j- s/ R& c6 @# s$ D$ p) u0 A& v, Z

( F9 W8 N8 z( Q" S1 b4 n' b3 S3 ^: l/ o! f' z& ]
( K# O, R) e( `% v% T

8 _& m  W& U3 h5 x* y9 a; f) F& a- ?9 i& X# J/ P5 Q8 D

5 Z% ~3 F( \9 `4 T2 f# ~) G
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-1-30 11:22 , Processed in 0.050590 second(s), 20 queries .

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