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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket
' R' d7 f) N  f  Q7 \上代码
前端
观看页面
  1. <script type="text/javascript">
    0 r* k* U3 ^, I% y; i4 Y
  2. var ws = new WebSocket('ws://192.168.0.150:9502');- d$ f5 a2 G' y6 G9 o$ W
  3. % L: k4 M4 A7 p3 p3 f1 J, \
  4. ws.onopen = function() {
    ) z. n  B: q. l1 e0 ^/ J
  5.     console.log("连接成功");; L( u- k+ P3 F1 p. B5 k  V9 [2 E; `
  6. };! o0 `8 H0 ~; s. x7 ?  H
  7. ws.onmessage = function(e) {
    * Q% m, ?7 ^7 B# u5 }% e, f
  8.    console.log(e);. |. ?' `% n( N( G3 a
  9. ) A/ x- D: A0 n' Y( N! a/ r% v
  10.    var data = e.data;
    2 W4 l! L4 J/ p) |# |. q7 m  Z7 j( Z
  11.    document.getElementById('player').src=data;" G, c& m  Q3 ~
  12. };  W8 I" @% ~$ @
  13. ws.onerror = function() {
    ' j: l# k* @, T- t" n2 \/ o
  14.     console.log("关闭连接");: n) [: E0 ]6 ~
  15. };
    0 W# b$ Q. A; f; `
  16. </script>
复制代码
录像页面

  D: z0 U3 q) T! n) a$ [/ E
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>2 e4 {: s- w( V# b3 j. g, B

  2. ! H3 O1 t. {9 J1 S) L% k4 L# a

  3. 9 L$ I  \$ i. }: ~. \4 [# z: b5 ]

  4. ; j- u) A# X$ k4 s2 m
  5. <script type="text/javascript" charset="utf-8">
    : t4 Z" a8 ^) j* d2 @
  6. 3 i) Q$ u. D2 g+ S1 s
  7. 0 W, \4 x  `4 ]" k9 J9 g0 `3 I+ a  ^
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');
    / j# m  s  w  ]4 x
  9.     //socket.send("嗨我登陆了");
    ' x- y, T8 d4 M, P4 d$ t
  10. + t* X8 S' h) d: e! ]% e' n2 U0 `2 p
  11.     var back = document.getElementById('output');4 u0 H5 {* b6 Y1 ]
  12.     var backcontext = back.getContext('2d');
    8 h+ H* T7 `8 m7 _9 d
  13.     var video = document.getElementsByTagName('video')[0];
    8 a, C& Y8 M# U6 D) Z+ [3 S
  14.     8 O# ?  L" n/ b: D2 I
  15.     var success = function(stream){
    : Y9 X& }2 L" A; X
  16.         video.src = window.URL.createObjectURL(stream);- [" t+ V" o* H+ m' q; f. Y, Z
  17.     }
    # E& j$ h6 [- Q  F6 `
  18. - p; \/ D" W/ D* ]7 N
  19.     socket.onopen = function(){+ D6 H8 {1 O1 C6 ?7 H
  20.         draw();/ y' p5 _! P) B4 v; ^- W/ v0 l$ B
  21.     }4 O" i9 f/ Y8 P- L

  22. - @7 V; m, X& U; u# |
  23.     var draw = function(){
    1 i3 Z) b; K, F/ {: E/ \! y0 z
  24.         try{
    % N6 m# Y) S) I- i) C- v0 ^
  25.             backcontext.drawImage(video,0,0, back.width, back.height);+ U' Z9 f( I- h. O0 Q
  26.         }catch(e){
    + v! P& \% k+ l1 L- n8 Q
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {
    % R/ r9 _5 [9 g  Q# a# W/ Q1 V; U
  28.                 return setTimeout(draw, 100);
    , g( \$ O8 g2 X# h" t' Z
  29.             } else {
    : \: C1 d% z* j) K2 q
  30.                 throw e;  @( q; l$ v) Z. ?# ~) N2 E
  31.             }
    0 `/ g7 ~2 `: v0 G% Z
  32.         }+ T3 O" Y# ^3 R9 o, K* r
  33.         if(video.src){
    / u% L8 d5 o: u( o- _
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));" r% ~0 B+ t( m
  35.         }
    % ]# k+ D: r+ l: Q" z/ }& ^
  36.         setTimeout(draw, 100);2 J* R% Q% `  t+ r
  37.     }
    5 w. n6 I& w7 i- {( j
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||  s- ~$ ^$ O, Y
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;/ S- o; o+ A0 V! Y+ c
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);3 m2 c& T, U; j$ ^* F, d5 R
  41. </script>
复制代码
  1. php+ l7 b; Q! q6 S# L2 R7 g! U

  2.   E. p0 a7 z. G, W0 R1 J
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);
    ! J# ?) D% B2 j0 |3 L. s% S

  4. / X& ^" ~2 M" p* f
  5. $server->on('open', function (swoole_websocket_server $server, $request) {
    & m1 m' \' K- e+ u9 n( ?
  6. 6 u* [. k" n& K% ]$ @
  7.     echo "新用户id:{$request->fd}加入了\n";7 p# o* h0 o5 u9 u  ^6 r
  8.    // echo "server: handshake success with fd{$request->fd}\n";
    4 i$ Z% W: c/ ]+ H$ V
  9. });, s# ?3 D* ]- h: n7 G8 H* m
  10. ' j' {6 @- a/ E* K
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {9 [- t) F9 W0 c0 P% |. s

  12. 9 Z6 I+ r* O0 \& w/ c! u! `
  13.     //循环所有数据
    ( H8 W1 m8 V# i1 X1 h
  14.     foreach($server->connections as $fd) {. L" F: L  e1 f) u2 y6 }1 ]
  15.         //返回数据! G7 @6 c1 y" U( ^/ b
  16.         $server->push($fd, $frame->data);
    4 ], c# P) w6 D1 H: [( z8 M
  17.     }
    : I' _" d$ F" b! J0 z

  18. 4 I& F! I7 w7 b7 J
  19. });
    : k) h* D$ J8 B2 K, w) h

  20. ; o% `. \  ^( Q: b& m" ]
  21. $server->on('close', function ($ser, $fd) {
    9 T& B4 @& A" I* k$ Z
  22.     echo "用户id: {$fd} 退出\n";2 w" g8 M9 C! T8 F8 s. v3 S/ W
  23. });
    2 M3 s4 c! u( w/ A/ S" G  N' r# P" Y  p

  24. * u: }7 e* A& q! q6 `2 ~
  25. $server->start();
复制代码

' F2 x0 I  @( @8 B! f$ ^, k' T
( o. A* n; J8 w4 L; K! I- Y2 \7 J- K* B8 R# v

% _3 C* K# q6 I" e" r& X% r' V; U( ]+ O3 g

# D# K  K% y* s( n+ w* F& R( Z6 e+ R: L% x/ T# B

; K$ ?, P9 w8 m" c% v5 H% k& m4 R+ `( G1 B, K& C" q/ ^6 e
. t4 D; c( p/ ~$ B0 {6 T

8 u% \& b- q# y  k8 y3 W7 n
% j3 h$ E6 Z5 P5 R, c9 ~% X- Z; r
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-4-30 16:17 , Processed in 0.055741 second(s), 21 queries .

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