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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket8 H9 R+ d& e$ ]/ L
上代码
前端
观看页面
  1. <script type="text/javascript">/ Z3 H7 K: P; Y* C! F5 @% E
  2. var ws = new WebSocket('ws://192.168.0.150:9502');
    ' `; I4 D# E- D) U9 u" U3 W

  3. 5 R% ]# p* I  A$ j# x# h/ _  W% v$ t
  4. ws.onopen = function() {! S6 j+ ~6 h1 _% K! l* w
  5.     console.log("连接成功");1 K" [7 i/ ]/ G1 |* Z1 F
  6. };
    % S: G1 h, i/ Z3 B! E9 }  J4 W
  7. ws.onmessage = function(e) {
    % S* v! b0 |6 O5 `; e' E! e9 Q
  8.    console.log(e);
    " U, J( f1 R6 A% n+ ~' ~+ m
  9. & u. j& S/ S+ R0 p; D7 ]' h
  10.    var data = e.data;) W& v9 h% F4 c
  11.    document.getElementById('player').src=data;3 z! I2 _/ X- H- r
  12. };
    3 R# y4 F0 R+ Z3 Y  O
  13. ws.onerror = function() {
    ' U- o# N, b  r* m  i
  14.     console.log("关闭连接");
    . P$ M$ O) E# N3 f' F4 N
  15. };
    6 G7 F( X- Z! r: h- Y
  16. </script>
复制代码
录像页面
$ O" ?9 v/ z& l8 p3 L+ c  P( v  ~
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>
    * F( g' J2 X7 N4 R
  2. ' g" h( C9 f) l% v+ Z, o

  3. 9 |8 X( a8 ?- l8 H
  4. + J2 O2 U% k0 W) Q, Z
  5. <script type="text/javascript" charset="utf-8">! o0 a3 T2 j7 _

  6. * D; k/ r3 S" x) x

  7. 7 U- e/ [, O3 \) b; C2 s- Z
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');- Z( u* @( c6 }' m. Q( R
  9.     //socket.send("嗨我登陆了");
    6 T$ C# c5 M' H9 o2 T7 H
  10. 4 Y8 m" }* X3 F2 N
  11.     var back = document.getElementById('output');
    6 ?% ^2 {+ n% B" P: ?
  12.     var backcontext = back.getContext('2d');
    0 X; W# }8 O6 K5 V% _: n
  13.     var video = document.getElementsByTagName('video')[0];) z$ ~" }, B0 O1 B8 D  `* ]
  14.    
    / c3 T0 \' k2 _- Y
  15.     var success = function(stream){. `) D$ K0 F; K' y( T* v
  16.         video.src = window.URL.createObjectURL(stream);$ F" D9 G, s) O3 P$ X
  17.     }
    ' T! x1 x4 A/ t" D& p0 ]

  18. + ^7 s( |4 A( v8 f2 X
  19.     socket.onopen = function(){
    , ]4 k* }5 K6 v& h. A+ ^, a
  20.         draw();( m/ W- [9 [7 C+ s
  21.     }
    % Y2 D, z: @/ F% [

  22. 5 X: y, \# k# e9 Y# Q+ x. Z. |7 [
  23.     var draw = function(){" P) d. I* @2 s; R8 O- A
  24.         try{
    ' y% m/ \7 n" \
  25.             backcontext.drawImage(video,0,0, back.width, back.height);
    9 i4 t9 d" n4 {) d9 C/ K
  26.         }catch(e){; g+ k* ]# N) k0 L  }: t  v
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {
    : `/ X( ^& p2 `4 h; o& z
  28.                 return setTimeout(draw, 100);; c' ~# }4 u8 Z  q! B- J3 j3 q
  29.             } else {* K1 `9 U' \/ g; C/ n
  30.                 throw e;
    2 a3 |8 H/ H1 V$ O$ q' Z, U' b
  31.             }
    $ r4 @6 a; Z/ E4 \; C; S1 ~; y
  32.         }$ ]5 L/ X1 K) A& n$ T
  33.         if(video.src){" W9 I2 I4 K+ m6 m: K3 U, S; r: T
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));& A3 U+ R1 h6 s
  35.         }5 l1 J3 W! }5 m
  36.         setTimeout(draw, 100);
    5 F; [) ^+ @% X) M: O9 ~
  37.     }% i* c, X2 X# y2 C% v% G' q
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||
    ' y  n( e  w3 b. S4 D, B$ y% {
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;
    " @" f7 g  B. P4 c" \. z
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);5 g1 F1 b' t) S5 [: r$ `
  41. </script>
复制代码
  1. php
    7 Z/ A: ^& k* S# `+ |9 B
  2. 6 Q6 L% Q* E8 H
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);
    ! B& I, W; U" v! B: d% _

  4. 8 m9 z+ o4 P2 ?2 q
  5. $server->on('open', function (swoole_websocket_server $server, $request) {! V/ h# u. z1 [
  6. 4 f& ~: V1 i$ E: v& N; |9 X
  7.     echo "新用户id:{$request->fd}加入了\n";( C& W) s# e1 |
  8.    // echo "server: handshake success with fd{$request->fd}\n";' x7 m, o5 w: K: E6 t7 S. Z) Y$ Z
  9. });
    ! z6 s( T/ c  G' ?! z3 t7 o
  10. & ]: T( Y9 r+ x' Q$ ]- P" q
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {
    9 j+ b* m8 I6 g) D
  12. ! A9 L& S2 r. |
  13.     //循环所有数据
    # H9 s: [2 c1 _  j7 u# j
  14.     foreach($server->connections as $fd) {' ~; h, I- o! w0 S
  15.         //返回数据& E- x/ b, N! S! z: _
  16.         $server->push($fd, $frame->data);( W: k0 m% |1 N$ E* {
  17.     }' S" M; U' e: H- h

  18. ; {! y  V# x( }0 b8 s' o) d2 Q
  19. });
    / ?, u6 ~  f/ E7 c

  20. ( }6 M  k9 u* `7 ^, E$ ^
  21. $server->on('close', function ($ser, $fd) {
    6 s. X% o5 X% B# M0 E/ l$ s
  22.     echo "用户id: {$fd} 退出\n";0 \2 s3 M3 m* @) ?
  23. });
    9 d& l# q! E7 `# z+ m' h# P% Q
  24.   F* j9 K0 |) K" a9 }
  25. $server->start();
复制代码
5 ^9 P* N, S# f8 Y* A; J/ D% m
; M+ D- B! L1 g6 ?5 P

! D0 E2 I6 g, B; ]% K/ M5 E- |9 n! x: M- `5 r
: V- G' _# {! e
9 ^, e- ~7 l( ^* A- s/ R0 N0 L1 N
3 G" H, P8 O5 l# C; r+ n
2 a0 c8 s4 K4 [' N7 n3 d; w
) B/ G5 j5 Y; ^, \. W
; T  C3 K: e7 V% d, I# W
3 N7 ~: o% E5 ?8 `  B  J/ U3 |; N
$ C) C( F; [$ c0 Y2 H
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-5-2 13:31 , Processed in 0.060754 second(s), 19 queries .

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