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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket, P2 k9 A, W; l/ a* U/ m
上代码
前端
观看页面
  1. <script type="text/javascript">
    ( b( F4 c" }% S0 u
  2. var ws = new WebSocket('ws://192.168.0.150:9502');" H7 X* W2 ^3 u  j# S0 D" f
  3. 6 X; T/ E! @% C- f) c' F
  4. ws.onopen = function() {
    " j5 ?8 [( J# A! B/ m$ _$ \
  5.     console.log("连接成功");& Y! ^/ c9 F6 Z/ q: r  H! L
  6. };6 a* A  Q7 d1 d8 k5 Q3 Z) D) s
  7. ws.onmessage = function(e) {7 Q/ x: u* Y& {* c8 G* }0 v
  8.    console.log(e);
    , H5 M, c' }* }5 ~; n
  9. " y+ b. v# h5 a; [7 Z
  10.    var data = e.data;
    & B6 }! O- ^, W4 z- m
  11.    document.getElementById('player').src=data;
    0 h$ |- m& b, I) ]" i  _/ [7 l
  12. };
    ) f% P& q2 B# M0 z6 j4 S
  13. ws.onerror = function() {
    6 V8 C" T" w2 z2 A$ r% M. F
  14.     console.log("关闭连接");
    8 L: j1 X. P3 b
  15. };* v' X. O6 {) z
  16. </script>
复制代码
录像页面
; Z7 C9 T/ f1 r. ^, i' w: {/ z# B
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>
    6 A" x+ }3 L8 B6 V8 @4 i" v' R
  2. " ^- K8 o2 {: C# f* V

  3. 5 K. x' w5 j# E- O

  4. 5 ]; F" D1 ~: `! A' b/ ~
  5. <script type="text/javascript" charset="utf-8">3 J4 F0 t, X' [/ v* J7 t6 i5 u2 o: A' h

  6. $ A2 q$ F; E' n2 I) ^' x4 R& a8 h

  7. 8 s+ P8 m" d0 l) j0 t
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');4 D$ _! T$ i1 p7 A/ A+ n; y
  9.     //socket.send("嗨我登陆了");
    5 E) o; i0 ?/ f, ^4 X' f7 {6 h- e/ a

  10. ( k' z( h* ~9 H( F( @( x
  11.     var back = document.getElementById('output');
    : y8 N( W- e! J8 O% v5 G' q
  12.     var backcontext = back.getContext('2d');- p. ^& K& s/ T2 J
  13.     var video = document.getElementsByTagName('video')[0];$ D5 O7 p, v- Y/ B: N
  14.     2 B$ i" o& H5 R& r+ U
  15.     var success = function(stream){
    % t# A. l: J5 v+ s. I
  16.         video.src = window.URL.createObjectURL(stream);! e0 k% y1 d; v1 F# ]7 z5 Y9 c& E
  17.     }
    ) L- T/ L: t1 F  C
  18. * A& k/ g3 J; d! L8 s
  19.     socket.onopen = function(){
    0 P& h) m  O; P. e4 ~: R; m; E+ g  B
  20.         draw();+ ~1 v. b( E/ q8 q
  21.     }
    4 `( E/ e6 R5 @: L2 z. L7 r% W; ?

  22. ! r. b, P! P4 \& M6 A& v  s
  23.     var draw = function(){' V6 g2 X7 d7 q. p3 ?0 Y. d
  24.         try{3 M- U1 ]' L0 i0 J" z
  25.             backcontext.drawImage(video,0,0, back.width, back.height);
    ) E" c! s  c/ z  g+ V5 O8 K+ k' g- q
  26.         }catch(e){
    6 W6 }; U6 l$ {0 |- M4 h
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {) X; L) L- c  e) ?* e; q. L7 m1 |
  28.                 return setTimeout(draw, 100);  C, F: M$ ~6 d; i+ Z" s
  29.             } else {9 y* w- M# k- I0 f. Q7 P2 i6 T
  30.                 throw e;  m) {  Z3 p# l2 N8 g
  31.             }4 n0 l+ i7 v7 P- {
  32.         }, I$ _. N4 m: F1 p5 W& s. @9 S
  33.         if(video.src){( o! @5 T. M0 u, c8 F# O
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));
    & L) Z& N6 G0 P$ b6 K
  35.         }
    5 [" f% k6 m5 `4 V3 T' J9 u
  36.         setTimeout(draw, 100);8 |1 o* y' B' P9 ]" H
  37.     }* i0 s/ I' _8 T2 D' k8 H
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||9 X! x5 F4 v) Z5 ~! N/ @
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;: U: J( X) S! s5 |9 @
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);
    - M# S. j" b, L
  41. </script>
复制代码
  1. php! E# j5 u. s* j, }# a
  2. 4 E4 K5 {; m$ @$ M  A* @( w+ F
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);
    ; W! z, J6 W4 q+ k) w4 v! e
  4. , x4 t5 m/ t* R6 T7 q
  5. $server->on('open', function (swoole_websocket_server $server, $request) {1 F5 N* B* D0 j* ~5 ^* `% r5 p: `

  6. , _1 v  e+ N' W) l3 L
  7.     echo "新用户id:{$request->fd}加入了\n";; B8 J0 i: x9 {
  8.    // echo "server: handshake success with fd{$request->fd}\n";
    / X% |( X# G9 \5 @1 e: k" i
  9. });
    9 n( I4 g9 ~; z4 f" L! `; N
  10.   I  x% ?, |  P. f! G
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {* M! f* X9 m( M; r/ Z8 T, o/ i! ?

  12. " t+ P- o3 A2 r
  13.     //循环所有数据' O  Y2 w. E* V: t) f0 c6 t) o$ `
  14.     foreach($server->connections as $fd) {% R9 `4 o: z- s; ~; B7 @9 o4 r  O
  15.         //返回数据& D0 F7 j# h2 B$ ~
  16.         $server->push($fd, $frame->data);" _- g# ~, ]& i2 k+ f* ]8 i9 U
  17.     }, e# o( E/ K! b. t1 r) Y
  18. 9 K  i0 W$ F- Q2 X, q
  19. });
    8 _+ z) v% U0 M7 R3 a! `" |1 I4 x

  20. & Q) d1 U/ L" \1 v) W
  21. $server->on('close', function ($ser, $fd) {* Q! ^- H+ e0 A
  22.     echo "用户id: {$fd} 退出\n";& K& G* M# L5 ^
  23. });
    # _/ |3 P- Q$ o) L5 b* Q. v! T4 k
  24. . B+ g/ }' @% b0 h% z1 u5 a- `
  25. $server->start();
复制代码
5 ]: |. ]" a" t; B$ A! T) x; I

; O. o$ J2 N: H4 U: F0 ~2 L% v* N% k3 U4 p! [

8 g& u8 o. j4 X. p3 P; \% R) D7 V6 u+ x+ f1 D: _4 c
: P) U8 s) f" O+ D1 L- ]
6 l4 y( L/ j( x

$ z  P: a: E% Q% B- w8 A
& K8 {4 F- s4 o9 c* p1 v6 F: R. @' l$ w  f
' G% T/ ~9 K4 m. Z5 C% E) D3 Z
4 s+ U8 i- s% l% H& R9 d
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-4-30 19:58 , Processed in 0.061846 second(s), 20 queries .

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