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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket& v2 {$ \- T3 G. F+ I/ X( c
上代码
前端
观看页面
  1. <script type="text/javascript">. [6 @% V4 c3 x
  2. var ws = new WebSocket('ws://192.168.0.150:9502');
    " f$ z/ E9 h  Z$ ~2 i1 p
  3. 1 ?( u+ ?; t' _- i6 z
  4. ws.onopen = function() {6 J% u1 O$ }+ @1 ?1 c. b! k
  5.     console.log("连接成功");
    . p5 z- w. R2 x& P0 D5 ^2 O9 D6 E) |
  6. };
    . D* t5 E" `6 o
  7. ws.onmessage = function(e) {& O0 T( k& v8 U( X
  8.    console.log(e);
    ' O( D9 b9 D* I, B9 S- A
  9. 1 @1 s: c0 H0 Q* B
  10.    var data = e.data;1 N! v/ [, W$ a# a! ?: m
  11.    document.getElementById('player').src=data;
    3 W- E, u) m" t2 ^% p8 `
  12. };2 K- |# L7 v" Y3 x/ F
  13. ws.onerror = function() {4 F5 v6 J, p$ q, Q# M
  14.     console.log("关闭连接");
    # o. }$ a( O7 J) s$ X: H% b0 d" f
  15. };
    : I5 E" o/ f: F! |
  16. </script>
复制代码
录像页面
# n. Z& M# p) Z- f& g& y, B. l
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>* V/ K& k( X! r$ s; n, h( ^
  2. ) P& m: S4 G$ n0 J$ x

  3. 2 I/ h. x7 j3 Q* }7 k- S

  4. # D, @& z" W9 F$ F0 X9 ~
  5. <script type="text/javascript" charset="utf-8">
    % x5 F- ^# E" Y6 y  i
  6. 1 X4 \9 T0 E( V8 Q9 q

  7. # ?" c/ u7 @6 F
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');9 _! K5 X" b4 q2 `6 n* e$ C
  9.     //socket.send("嗨我登陆了");
    5 R. d' Q7 |5 w: n$ ?# ^

  10. + M! g0 x7 {9 Q
  11.     var back = document.getElementById('output');* E* |) `1 N. E. V- B3 E7 j
  12.     var backcontext = back.getContext('2d');+ Y( f' p6 x1 O9 f) N- j
  13.     var video = document.getElementsByTagName('video')[0];
    # s( [  _2 M; o0 m+ K
  14.     & B5 \( t. s' L! p( s% V2 @
  15.     var success = function(stream){
    : `7 y" ]4 z: O
  16.         video.src = window.URL.createObjectURL(stream);
    1 W) [4 I# H7 o
  17.     }
    2 I8 q9 H3 x9 J. ~- J+ d& v
  18. & j2 `" t) }& P$ J# _7 X  C9 z
  19.     socket.onopen = function(){
    & y9 s) @$ b  J0 Z, F: U2 W
  20.         draw();# G" y4 @; G1 m, s% [; M
  21.     }7 R- Z& U7 n/ u) {/ A

  22. $ r) b- ^. w1 `8 k
  23.     var draw = function(){
    4 P0 S6 n& Y( `+ U
  24.         try{0 b# h  s+ u9 M
  25.             backcontext.drawImage(video,0,0, back.width, back.height);: r) x& D3 l+ V& p
  26.         }catch(e){
    5 p& |7 I# A1 k6 Y
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {
    9 d5 F7 I' m" q
  28.                 return setTimeout(draw, 100);
    6 y% p3 R$ e$ |
  29.             } else {1 ?; S8 X. I% Y$ W
  30.                 throw e;9 D/ V7 T. Z: R/ E6 t, `* E. [, H
  31.             }
    " ~1 `4 b9 p+ _6 x# b  P
  32.         }
    ' F) \. V( `9 {! O2 P  s
  33.         if(video.src){
    & b- M1 E0 s! m" y1 r; p
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));
    ) G  D! P/ e0 ?. ]. A3 }
  35.         }
    2 [: P$ y% W3 [4 O& {) T" d% c
  36.         setTimeout(draw, 100);
    ' b2 E9 m) P! f, ?% h3 m; i6 ~# Z
  37.     }8 @1 j: o* S0 a( D1 ~
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||
    3 ^* O" ]' u! z3 }5 I6 u* ?
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;
    - V$ D" U& j% }1 ?- _# V' D
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);& F( [+ ]( T! H5 R( k/ w7 i4 G
  41. </script>
复制代码
  1. php0 O5 i7 E& |! G, y5 U! x

  2. ! f- U1 d6 S5 U3 r
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);  D2 Z, s8 v4 F9 M- a0 w

  4. 0 z- T" Z1 q* ^' e
  5. $server->on('open', function (swoole_websocket_server $server, $request) {
    $ V3 q6 O4 K8 _6 h/ A9 @5 M
  6. 4 I9 b. O, Q; l  _2 M  f
  7.     echo "新用户id:{$request->fd}加入了\n";
    ( I; W1 e  W# M2 u3 ~( o! Q6 J
  8.    // echo "server: handshake success with fd{$request->fd}\n";
    & F' g4 O. l5 P" D0 U: o5 Y6 G
  9. });
    $ G' z1 R1 f+ ?# P, C7 }
  10.   L7 x% Z, Z5 N4 B, E
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {8 ^; L# z* e) X3 k* P2 k
  12. 7 T9 W- L1 e& F4 U2 {6 Z
  13.     //循环所有数据  o% F! s) _8 s4 W7 Q# }. D
  14.     foreach($server->connections as $fd) {
    ; x8 e# ?  l' @% X: h; d: a( u: ]
  15.         //返回数据
    . d: D9 F% j* I+ S$ q, W
  16.         $server->push($fd, $frame->data);, T3 j' q, E+ {5 Y; v
  17.     }# k$ c9 h) x7 o. O$ ]
  18. # Q3 A& C  P1 @4 f) [& W
  19. });
    # q& N8 E/ L& y5 |% r5 v
  20. # L1 d5 A2 Y  `* e$ v- _, }: B0 y
  21. $server->on('close', function ($ser, $fd) {& g0 O9 \; M9 C1 k7 N5 w
  22.     echo "用户id: {$fd} 退出\n";3 P6 P" W- }& Y5 Y& n4 M
  23. });; f! l/ T7 r( p; h5 ?
  24. 1 o# {/ l4 C5 z7 Z+ A- `  a
  25. $server->start();
复制代码

7 X8 D6 C3 r* D3 \6 v7 |4 q, v5 n$ X+ }  e
0 r; r0 j6 O) P& M0 Y! ~
) {2 G% C$ w7 j3 z: J6 i
& P' \6 M0 r9 b$ L+ [1 p
& D3 d7 S0 ~8 |& P6 z, g( T
" z* s/ A% ?. r- q
6 K  G" b$ N- |* d, u) V& K) s' K% g0 ?

2 t$ F; Y% m4 K- l0 t* u
( R4 s* U( g- X& Q; C# g0 v% X# I; S1 y9 L. @' h

; y0 v% ^0 K( H6 q' O# J! \
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-19 22:59 , Processed in 0.126663 second(s), 19 queries .

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