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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket# V! \: R+ x; c" |. T
上代码
前端
观看页面
  1. <script type="text/javascript">0 P9 A# e2 ?- K6 D$ g& h# I
  2. var ws = new WebSocket('ws://192.168.0.150:9502');+ Y* X: n  @: x9 W1 W
  3. 7 v7 ~# V+ A; U8 C7 L
  4. ws.onopen = function() {
    8 D2 ~2 ^, K9 q, t
  5.     console.log("连接成功");
    * b; `( d3 s, @) r
  6. };
    2 `- w7 Z7 p  `" C
  7. ws.onmessage = function(e) {5 y8 S- e% `6 a) k& y% P9 e
  8.    console.log(e);
    " @1 P8 r6 C" I/ r( n% M2 i! z! w
  9. 5 w# r7 t& {4 s( F& h% u5 T7 c
  10.    var data = e.data;; t1 l5 f+ _7 z0 W1 M2 L
  11.    document.getElementById('player').src=data;
    % j; N' r! h0 F) R9 u; G2 W
  12. };
    3 a4 k1 \2 C5 i" O. U6 E! m
  13. ws.onerror = function() {
    ( p0 r1 M9 u& H/ y" K+ T
  14.     console.log("关闭连接");1 A- U/ C  \, o( ]8 j
  15. };: f7 s; r" a6 |2 `8 _
  16. </script>
复制代码
录像页面

8 s6 j) l, ]9 }5 w4 N* m' U
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>
    1 C  R! e: C( G/ N! J

  2. 9 C5 Z( U! f& K1 j) I! k: U; a$ ]
  3. 1 c3 R. @) U& N8 G. B- N% n; \, @

  4. ( y7 m+ x, N  @: w5 m! a
  5. <script type="text/javascript" charset="utf-8">
    ( R! C' \& p& O; b
  6. $ u& f" J; j( G6 `3 O
  7. & u* v3 @  @$ y+ r" o# ]0 {
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');4 }: {6 z- \( Q# V
  9.     //socket.send("嗨我登陆了");, B/ w" l4 l; x" h/ G$ F9 C* C) H; z
  10. / P$ ?- t- D6 {, \
  11.     var back = document.getElementById('output');
    , A4 v9 L  H3 A; D' N( A
  12.     var backcontext = back.getContext('2d');
    ) T. q2 C. C, U- v1 x# [5 K. f& d
  13.     var video = document.getElementsByTagName('video')[0];
    , I# T/ |1 G2 F4 z
  14.     8 R9 W2 M* N! g1 o0 O' ~/ \4 Z
  15.     var success = function(stream){' u% n+ K1 `; z& N
  16.         video.src = window.URL.createObjectURL(stream);6 v0 f: L6 r" T/ `* ]% ^
  17.     }3 p+ [, X% h! x8 A1 w# T" w; _

  18. $ R6 W& v1 p5 {7 x4 g- H
  19.     socket.onopen = function(){
    $ x) z" l/ p# P
  20.         draw();
    " x% |! H( `7 p  V, a
  21.     }4 [3 C0 [! l' _
  22. " ?0 p6 u) I& R- M5 Z* r8 G6 g
  23.     var draw = function(){
    7 W0 P" k( W: m5 V' C
  24.         try{
    - J; J6 x  l# c; t, ^+ A+ h
  25.             backcontext.drawImage(video,0,0, back.width, back.height);1 Q% s$ v0 x; p
  26.         }catch(e){; `7 a% e% ], v
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {
    4 \* A9 B6 x6 g7 o' @/ {' R
  28.                 return setTimeout(draw, 100);
    & T4 J* o8 D0 ~6 r+ t
  29.             } else {
    - U& l0 |* F% Z) `* i" D# w6 {
  30.                 throw e;- {! x: U; p; L7 t  |- R
  31.             }( N/ _2 H5 H7 }! y6 P
  32.         }0 [  |4 J8 N8 ]; `( E
  33.         if(video.src){0 S. `' \. V% k( j
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));
    & @! W. b! Y7 R
  35.         }+ k' N: Y  N4 f5 h
  36.         setTimeout(draw, 100);) C; [% A# [) m2 P/ p1 j. y' j3 C
  37.     }* v/ y: D# W; N, E$ e7 O
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||
    ' f1 x% a( O4 w1 _. a4 I
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;' t& g! d/ N- O0 N- Z$ l
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);' f0 I4 x6 ?1 J# e+ G4 Z. i
  41. </script>
复制代码
  1. php
    4 A% j) [# s% z" t* |0 g8 n2 J/ o# d
  2. . {% X& {$ e3 E# W
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);) y4 W1 v0 j" d' E8 v
  4. $ w0 P; @- Z" w2 g& ~4 K: I2 p
  5. $server->on('open', function (swoole_websocket_server $server, $request) {; Q! t; J( Y3 ^/ O" C5 {9 }

  6. : F8 k! _& [; k+ G( c
  7.     echo "新用户id:{$request->fd}加入了\n";
    ' K6 ]. j$ e+ q" J
  8.    // echo "server: handshake success with fd{$request->fd}\n";% U2 j- a) N6 n& m, H, o' Z& L
  9. });
    8 n& m$ g. ~' |" j5 j1 q

  10. . s( y  w' i1 h; J; z) P
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {7 V) x2 A: O6 G. W1 s) s
  12. 2 U3 a7 G; q  d2 K9 Y, e% e
  13.     //循环所有数据
    & V) P8 n. E5 P6 @7 h8 e9 y
  14.     foreach($server->connections as $fd) {
    ; ], G  P. p. f0 d2 c$ k
  15.         //返回数据3 i. ]& H% H$ F6 W) W3 Q( @8 b; b
  16.         $server->push($fd, $frame->data);8 \8 ]5 S7 K! a6 t6 b8 a
  17.     }
    , F7 \" E, b* |2 g8 V( u8 k- W; i

  18. 0 C1 J! M, }% l* ~' H+ m! P
  19. });
    # ?: k' Z9 S( ]- w) V! B* A$ ^8 v
  20. 4 W* `. O. @) X4 P7 u3 u4 F6 Y4 _
  21. $server->on('close', function ($ser, $fd) {7 v9 s6 X# |9 p9 z
  22.     echo "用户id: {$fd} 退出\n";* h1 `& W& F1 D5 B7 m" ^
  23. });) m, ?3 O8 v- s) H
  24.   V* {. D  ]$ g' a; q) {. t
  25. $server->start();
复制代码
" _9 y" x  L5 b0 k: ]3 w
7 G9 x/ }/ ^% u
1 E9 B  b1 X, u- b- e
) e) J; h5 _& l0 J7 Q6 L
) c0 Y1 `- I8 k3 y# z! t, [

' ?  q; Z. ]. y3 Y% N7 j9 O8 }1 q) e2 M" s" v( z

0 V2 `  g: ?: M3 G( o: O( _/ y6 ^4 m
; u  C& \" i* Y, X& q
1 m& p: A6 q) J! N
# L7 d: u1 y0 i6 M$ `% H) B% B
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-9-21 03:14 , Processed in 0.066305 second(s), 20 queries .

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