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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket  I1 K4 y1 s7 F2 w1 E
上代码
前端
观看页面
  1. <script type="text/javascript">% g9 Y( h( p/ V$ ~2 |, N
  2. var ws = new WebSocket('ws://192.168.0.150:9502');
    2 o4 r% w  k) Y' o( G; g

  3. ; M+ S9 [' h4 J0 y# }) N
  4. ws.onopen = function() {
    ( o$ W5 D6 n% ]6 I) d1 @
  5.     console.log("连接成功");$ H6 {& m' G; A4 ?/ |
  6. };
    ( ^- ?' m) f  Z- `9 w" y) g+ N
  7. ws.onmessage = function(e) {
    ; M, h( S8 C; D9 _4 H% t
  8.    console.log(e);- [* l* S) M3 o/ j

  9. " B" x8 e7 E' z+ f
  10.    var data = e.data;
    6 ^8 l" W: J& R# h) ~
  11.    document.getElementById('player').src=data;+ X: d1 J$ \9 D/ e9 ^: X
  12. };
    6 J% l; S* }; [# Z
  13. ws.onerror = function() {2 |. L' x; r$ h: _' ]
  14.     console.log("关闭连接");
    " n  ]. q  e( z/ K
  15. };% Q0 W8 a0 a0 r% @" {; d. \' ]
  16. </script>
复制代码
录像页面

# x$ M6 L; \; z+ I
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>! j7 I& a4 i% N& _9 C
  2. 8 [1 w2 [  d9 n/ H# d) |8 e
  3. - r) J" W0 p: `6 j% L/ w# a( n

  4. $ _: D1 M+ C( v$ t( l4 w( t
  5. <script type="text/javascript" charset="utf-8">
    ; r% t3 m  n" @! F

  6. 9 O$ h0 L0 L# S. g' l2 C4 y6 f

  7. & D  K& }7 T& T* v0 U- a* `
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');
    9 a/ Z* L2 c* K+ h. a1 a
  9.     //socket.send("嗨我登陆了");
    % D3 a9 z/ h, D2 e8 @4 ^/ T7 E) q

  10. 3 G6 _5 R) T+ `" u# b2 W. x
  11.     var back = document.getElementById('output');! ^6 W7 t( v. ]- {6 @1 k
  12.     var backcontext = back.getContext('2d');
    . P/ c0 ?# H3 L. `- o) I
  13.     var video = document.getElementsByTagName('video')[0];9 |" f" K& M6 j& V5 |* ^" p) G" N* e- G* \6 z
  14.     8 a/ P9 }8 i: R9 S6 Y
  15.     var success = function(stream){3 }% s+ ]2 P, b! E& [& d- s  {
  16.         video.src = window.URL.createObjectURL(stream);
    9 B# E# b4 H5 D
  17.     }6 u  u: ~8 C0 Z
  18. 6 H0 W2 G- c6 H# R
  19.     socket.onopen = function(){
    7 ?6 H) m! J% \; |: T8 i! A, k
  20.         draw();
    ' }1 l4 u8 c) D. D7 e* E1 r, s
  21.     }7 ~2 D# {1 r) N) G8 c9 a- W* ~5 o1 b

  22. * s1 |% V8 }- }$ ?% {1 d
  23.     var draw = function(){! H1 ^3 O/ \5 d" Z3 {
  24.         try{( K$ L$ P" A9 b& I8 G( a
  25.             backcontext.drawImage(video,0,0, back.width, back.height);4 ~3 l5 X1 J, a8 v* P( a) i& X
  26.         }catch(e){
    : U7 H8 X0 F; N  f2 N
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {. B: e4 `: y) {1 P6 F9 \4 x
  28.                 return setTimeout(draw, 100);5 F/ s& a$ H. l5 ^
  29.             } else {+ Q- @7 |) ^% B( p  U' J3 M: q
  30.                 throw e;
    ' m- C6 ^8 ]+ o) \' w! m/ L
  31.             }  Y6 K8 i1 D+ H4 ~- L
  32.         }
    ! R3 j4 Y8 Y* e% t# ^4 s
  33.         if(video.src){
    ) R' c- I& t# ^9 R1 x, C
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));
    . U6 q& ?! g& k+ n/ k
  35.         }
    7 S( K5 d1 S+ x
  36.         setTimeout(draw, 100);
    ( k% J; C* u( D8 D! N+ i1 \! C
  37.     }: P. M: s$ ~1 [- A
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||+ T+ g- o% G9 ?7 S
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;2 o; E# E( i# J
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);' U+ J  C$ y7 E) K, W
  41. </script>
复制代码
  1. php
    % M- C1 A+ ^, P: `
  2. : Q6 V; [, ~' p* {
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);
    " G8 |/ ?. L6 u* i! }5 x
  4. 1 C! [) ~- u5 \9 G/ y$ o  j9 ]+ S
  5. $server->on('open', function (swoole_websocket_server $server, $request) {
    7 R1 ^, u8 S- J+ M( b
  6. 5 [. L( B- K3 `; o) _* s2 G
  7.     echo "新用户id:{$request->fd}加入了\n";3 n# T+ D9 i; D) Q
  8.    // echo "server: handshake success with fd{$request->fd}\n";
    7 m# P3 b, b" t4 g! P& S' y/ V
  9. });; v8 X4 K/ }; \1 A' ^- ?

  10. * ]6 u$ @  o( d7 R& G: X
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {$ {" j0 d1 \5 n$ C6 _( f6 _
  12. & [. a- \5 l0 S4 j, g; t' y8 t
  13.     //循环所有数据1 @0 A- R6 b' r1 \: L- t
  14.     foreach($server->connections as $fd) {
    7 u9 K2 _6 J6 X! n1 e1 c' r
  15.         //返回数据$ ~- j4 c) \) `
  16.         $server->push($fd, $frame->data);
    8 e0 d; E$ X0 G9 r% T2 ^: T
  17.     }& ~  ~, N% h; G/ o1 B
  18. ) z4 O" q/ l$ e! x$ \
  19. });! N$ n: c7 ?4 [* g! i1 R

  20. 3 e6 |' ?) p$ C4 b
  21. $server->on('close', function ($ser, $fd) {
    2 H0 p2 C5 q, ?' Q# T" X! T
  22.     echo "用户id: {$fd} 退出\n";& c! B5 K; e: H% l- k5 `1 d- u
  23. });
    2 B1 g, B9 i) u& X
  24. % K9 l; S. R) L, M) s% S7 ?7 k, U
  25. $server->start();
复制代码
' K% W& u! a; X/ x8 U0 @

) F: z. ^" v" U9 n1 e( T  R" |
' y2 V/ U, K2 m7 ?- f+ f8 _
& K9 w! h: g2 R: i
* k, y! s, t2 l7 K5 y: p  V; @/ t
1 Q# x+ g1 v/ e& ^$ O" R7 K3 F' z( P" C: w* r
; @  ]$ O$ E; L$ d

2 H# c3 T6 ]8 X% U5 x
! m0 C' H. q& C8 q7 L4 \: B1 `0 R
: V6 i5 c# a; G
3 g9 X  w6 A: ^. a) T
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-20 05:41 , Processed in 0.130516 second(s), 21 queries .

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