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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket
- x( }: m6 r! h' p& ]. U上代码
前端
观看页面
  1. <script type="text/javascript">1 W+ Y, g1 s1 J$ |
  2. var ws = new WebSocket('ws://192.168.0.150:9502');2 K' ~4 U) g4 N1 d% c3 P: n
  3.   }' D) q0 Q; p( {7 n1 ]
  4. ws.onopen = function() {
      e7 A! F! q) ?1 a' ~' Y6 ~* g
  5.     console.log("连接成功");6 e9 x; R, E5 h% a* o  K
  6. };+ c: q$ R9 Y9 Q
  7. ws.onmessage = function(e) {
    6 M$ i8 A1 D- k# S
  8.    console.log(e);
    7 Z# ], c9 O9 W$ ]

  9. " l1 d& C/ z1 }: B+ p
  10.    var data = e.data;6 \4 q0 t6 A$ ?* {. I* P
  11.    document.getElementById('player').src=data;$ k& R9 ~7 v9 z6 c0 f
  12. };
    : h1 ^$ q% P  M8 p* }1 J
  13. ws.onerror = function() {
    6 I* f5 x) Q" P
  14.     console.log("关闭连接");8 k' G' R8 T$ k
  15. };
    $ X# r1 M# `1 @! E* a
  16. </script>
复制代码
录像页面
/ t: V. L% e2 @1 U( F* ?
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>
    3 l& s  f# B: a/ V7 k0 j( z
  2. ) \( z1 B/ d0 ^" [  Q$ I9 Y. ^
  3. 2 {; P" I  N- E7 c
  4. # N/ q3 }. E- M4 P' @. R
  5. <script type="text/javascript" charset="utf-8">
    1 p. D' C: @, v4 E  c# N  B

  6. / X$ J# q! q  V# h4 D
  7. 1 e4 C6 O8 [7 Q7 p; `9 W0 j
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');
    & ^* X# ~( s  w+ h, c5 e! L
  9.     //socket.send("嗨我登陆了");
    1 W; m! l, D+ c" ^4 b, g
  10. * ]5 X/ A* w8 P' I/ N6 d
  11.     var back = document.getElementById('output');" y: m1 }5 J- \. E  J3 u2 ^
  12.     var backcontext = back.getContext('2d');3 g0 G7 Z  p7 r. e! n6 u
  13.     var video = document.getElementsByTagName('video')[0];' r/ X  N! t  K3 I3 i6 r4 e
  14.    
    ) {2 ~9 S, F" E( Z7 @/ E
  15.     var success = function(stream){& i' D& c9 B) S4 N# ^
  16.         video.src = window.URL.createObjectURL(stream);
    * _9 h+ J- A" \4 V! b
  17.     }& Q% M" h( l1 t' {
  18. 7 p2 [, b$ z7 |' A5 D1 D  S+ y5 \
  19.     socket.onopen = function(){
    ' P$ O7 y1 {& l. l1 X
  20.         draw();
    - I- n. o* J9 C
  21.     }
    . g0 p* [9 u9 Q" q1 D+ q

  22. / T- h! O# V- @4 P( k* ^
  23.     var draw = function(){
    5 ]: l5 {/ H3 t4 q2 U+ H+ v! T3 \* b! b
  24.         try{0 G# L6 L1 w2 A, D
  25.             backcontext.drawImage(video,0,0, back.width, back.height);+ M# h* s) [( T1 z% q2 D
  26.         }catch(e){
    8 H1 X/ r- d3 g; T! e( w8 b) y
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {
    5 p, J6 h1 F- Z8 M; y  i
  28.                 return setTimeout(draw, 100);
    0 z3 D$ ~( Z2 W0 ?2 W: O3 d
  29.             } else {
    9 ^, p1 R- K! O; J& G3 m
  30.                 throw e;4 @2 y& b9 I! T6 m! n
  31.             }" W2 H4 Y- A' N# f$ K8 V( d
  32.         }
    2 U- N' `' y" Z  |" F6 t- E
  33.         if(video.src){( v: f  [0 C( i# W
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));
    ( Q! r6 o9 n' f$ l3 B5 _
  35.         }8 H& o* J7 ^! n- C
  36.         setTimeout(draw, 100);
    % \/ _4 |* ?  M1 @
  37.     }% V, C& ~" Q1 {& T# h8 g- D; ^( e
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||' x8 j( R0 K7 C5 `% R) i# N2 u5 \
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;- ?0 Y) U- W4 W% e; L( B1 k. s1 P
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);, b1 ?" u3 `" ]" _. n) C
  41. </script>
复制代码
  1. php0 C/ B; {9 M( k, v7 C

  2. 5 ~2 v/ f% ]' Z
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);
    . U8 b* Y9 |/ z8 o, ~6 ^( h) _4 e
  4. 4 C; k2 T" k$ {3 B4 I
  5. $server->on('open', function (swoole_websocket_server $server, $request) {
    ' e7 l) n" n" [# W% F
  6. 2 M' J: x+ K3 O! {
  7.     echo "新用户id:{$request->fd}加入了\n";* A/ E) i) [7 m
  8.    // echo "server: handshake success with fd{$request->fd}\n";
    - d0 v. M! r) g, l
  9. });
    . T' _: ?; b) `! N
  10. 1 j2 \: O* |0 k& k3 [
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {
    0 ]" ^- {9 V+ C6 d8 O, d: W
  12. : s  v4 J* K8 U0 H
  13.     //循环所有数据- Q& E" U( s6 `( U
  14.     foreach($server->connections as $fd) {
    - V5 t0 l. o" i& E- g0 _
  15.         //返回数据$ x. U$ _( ?( N. z
  16.         $server->push($fd, $frame->data);
    0 J# d& U1 K# {7 l9 s$ |
  17.     }9 C, C8 t" n7 n! O
  18. 6 |  {. L1 u! O, H1 o# J
  19. });
    ( J6 `. e0 T4 u' E9 j3 l& S
  20. " b8 f  o' i( B/ E" ~9 d
  21. $server->on('close', function ($ser, $fd) {& ~) }# N- ~& i( N+ {8 \, @8 {
  22.     echo "用户id: {$fd} 退出\n";
    ) J& o- Y- a) j, D" a4 ]  _
  23. });- ~, Z  j2 J! e$ V; V
  24.   D1 i  Z6 R! O( Q2 K
  25. $server->start();
复制代码

  t2 w. y) w) ^, @' T. S
" ~3 L# j4 @7 j& t, |5 M& s
" _2 l' t$ d- ?: `" h; O8 X0 u$ v* U1 E, n

- q( |# ^+ Z: i7 u7 i7 R, E/ d6 b9 @/ l

) p) @1 Z1 A" _( e3 K2 [) U& y3 U1 }3 I) ?& F, w# [3 }
  p6 N/ n/ T' t  z& E

7 K& U( ^" ], C& C& B: X+ s
1 l( p( M" o2 p. s! c
7 }0 Y! y% |8 z. R. l* a
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-1-30 12:57 , Processed in 0.053668 second(s), 20 queries .

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