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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket
! y* ^% E% s) E* ]- P1 N+ T4 q6 Q上代码
前端
观看页面
  1. <script type="text/javascript">' ]* g1 r- H( S: N# [
  2. var ws = new WebSocket('ws://192.168.0.150:9502');
    3 J6 j: `4 ?2 V8 r

  3. ) k% |( g9 I5 h* v' Q) m
  4. ws.onopen = function() {3 H+ P9 Q7 R1 C9 v& j3 C
  5.     console.log("连接成功");
    " U  Z1 S- l8 @; C% F! i
  6. };8 S7 h3 k8 J  p& r& w: U& w7 j
  7. ws.onmessage = function(e) {; I% U1 K2 Q' c; ~  Q  E1 d. B
  8.    console.log(e);
    6 i; z' x4 k0 @# y, D$ Q

  9. ! L* b/ Z, E6 d6 }  H
  10.    var data = e.data;% M3 d3 h  ]# H/ w
  11.    document.getElementById('player').src=data;% }. Q& ?* ]0 ^
  12. };( }" M  `! ^, `) k
  13. ws.onerror = function() {
    & Q/ p5 u- {' K: s
  14.     console.log("关闭连接");
    % e  Y, K8 D; n8 C( l, \
  15. };
    9 e! x* t) m- _5 o2 F, a$ D% O
  16. </script>
复制代码
录像页面
  v' u+ q* u7 u0 g
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>& r3 i. B( ^# Y$ B* y; [

  2. 4 M4 L" K, ]2 L

  3. 7 s4 P8 X3 Q. h

  4. 0 S4 v+ n+ r9 `/ r
  5. <script type="text/javascript" charset="utf-8">. ]2 L8 u/ R. {+ I( h

  6. - `' Y% _1 U# Z: {% ^
  7. 4 N# y/ s4 y) O) k& v5 F7 A0 x5 D
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');6 T, t- e" b' o. C" Q) p
  9.     //socket.send("嗨我登陆了");
    $ L; e' g7 D+ y; Y, S5 y/ Q  ^1 _

  10. , h$ Y% A4 b$ v( Y$ M
  11.     var back = document.getElementById('output');1 t! O9 E( G5 l/ j* A2 [  g) |6 Q
  12.     var backcontext = back.getContext('2d');/ ?+ D: z" K) ?. ~2 K
  13.     var video = document.getElementsByTagName('video')[0];8 O+ \# S$ a. A
  14.     7 U! Z" j, I; n: b& v# y- H
  15.     var success = function(stream){
    . h) Y. a. m. a! X; p
  16.         video.src = window.URL.createObjectURL(stream);
    # q  w- Q: p. Z+ O
  17.     }
    $ z1 E+ C6 e& v& B
  18. - o, o( L& B' q& F% U# \7 Q
  19.     socket.onopen = function(){
    & u# Y; B: m: C" K% I7 ]5 d
  20.         draw();
    1 a, v: k2 P1 z% K
  21.     }4 ~1 e  W' i6 {$ ]. O4 s
  22. . l$ o* t' L. i2 z
  23.     var draw = function(){2 q- K4 K0 l& A# q( x
  24.         try{+ p1 Q' f+ `1 p0 U: `  A5 A% M
  25.             backcontext.drawImage(video,0,0, back.width, back.height);7 Z% j/ @- F! K4 k/ E% R
  26.         }catch(e){0 Q2 q1 U- `% d  s4 ^* \  a6 N
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {
    ) ^. H1 y& W& x* i7 ]5 k
  28.                 return setTimeout(draw, 100);  c- D1 |# O+ b2 X1 j- v5 R
  29.             } else {
    " ~7 ^' k- E: q0 Y% C
  30.                 throw e;  E; L$ n6 ^0 y! m' K
  31.             }
    + B0 x! l- G2 B9 ^
  32.         }
    0 O1 S' [9 @4 ?0 a) h
  33.         if(video.src){, f, V. z( z/ _' W- }6 U+ T- R
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));1 U8 K- y6 _, V+ o
  35.         }
    2 s& w- M1 ~0 r# m, B- [) K2 [2 a
  36.         setTimeout(draw, 100);
    5 k0 K* y0 K: N
  37.     }; \- B& F8 \7 j5 U8 \' }* [
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||
    7 I- v% o2 Y6 t& k. v4 ?, [; q" [- b: F/ d
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;
    ; p: l7 D' N" G5 Y/ X! d
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);2 E+ o, I" ^5 }! |7 R; h+ ~
  41. </script>
复制代码
  1. php# p# ~6 e5 {8 D: l1 J- a

  2. # a5 X, @6 y- z: M2 Q* Y3 C
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);
    ' s# d8 _9 s& X" a

  4. 4 f# q2 c# _. W6 W, G/ ^5 f
  5. $server->on('open', function (swoole_websocket_server $server, $request) {
    6 B* Y( V6 W) z* ]3 B

  6. 6 ~* t3 T  D# l" u
  7.     echo "新用户id:{$request->fd}加入了\n";
    2 _4 x  l- U( z
  8.    // echo "server: handshake success with fd{$request->fd}\n";+ D% p1 I, J5 [' C& j, D
  9. });
    9 p' X( F' ^3 W! u( e: c4 V

  10. - @1 ]3 S8 i. a$ R, Q
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {; R: E, B: \- _" B

  12. 3 p$ [4 b& i7 U5 D+ \3 ]! O& C
  13.     //循环所有数据
    " R/ i+ b* [  Z" `, |% I6 F+ X5 f
  14.     foreach($server->connections as $fd) {# V; G+ ^4 ~2 c" ^% m9 X8 G
  15.         //返回数据
    1 Q0 O& G, |6 G
  16.         $server->push($fd, $frame->data);
    ; E0 N1 D4 s. q! |) V
  17.     }8 e' m6 m7 R2 M* Z
  18.   w7 Z8 H1 j6 `# v7 g
  19. });8 i/ x+ M! }6 m6 n6 t. A$ x

  20. / y0 _+ ~) t% ]0 F4 U) \) w
  21. $server->on('close', function ($ser, $fd) {7 T! X7 f, N" g, }6 b- v7 b/ @
  22.     echo "用户id: {$fd} 退出\n";3 N/ R* `' Q2 _( U6 p
  23. });: _7 M' B( F# c' {2 }  E6 L+ o" z* S
  24. # H+ ~9 e# [5 C' |9 I
  25. $server->start();
复制代码
. \* g3 b8 n0 [3 b. n) V9 c
; p. q5 o+ J5 c3 @7 W

! N& K, {: p5 e; M# h* t( D& E

) p' y9 J1 R& t8 l7 a7 J8 C1 y# ]! z0 u  n7 g
* U; Z) e2 U+ U1 S( D6 P( s( \# P/ Q
6 i$ Q, B+ |4 C( m2 ?1 w, U  _: r

! ]$ ~1 n0 ^: C- d* d9 _/ q0 p6 x3 M1 h& a/ i8 ^' B

% O/ X4 ?; T( r1 c$ X. S
5 \) d/ n% f2 D% W7 n5 U
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-20 05:04 , Processed in 0.117729 second(s), 19 queries .

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