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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket8 C0 T$ I. Y' _; H- Y
上代码
前端
观看页面
  1. <script type="text/javascript">- x+ ~) c5 J8 V7 R% [
  2. var ws = new WebSocket('ws://192.168.0.150:9502');
    , u4 w3 _% C9 I, T/ e$ V! B
  3. 5 e1 g, O2 ~+ b! e4 m
  4. ws.onopen = function() {
    % y3 M& a$ K  u- V  v" T
  5.     console.log("连接成功");& x, |$ c) _( Q; R
  6. };
    . w; h! d4 }  i# G& I
  7. ws.onmessage = function(e) {
    4 N; y: q# E( Y/ w0 ]6 S* |
  8.    console.log(e);
    # }1 E& a3 {% k# L

  9. : E* |$ G5 Y) r& _
  10.    var data = e.data;
    # R# K: }$ w, c7 Q$ r/ K# m5 T7 f
  11.    document.getElementById('player').src=data;9 v7 ?" L' m: y5 {% }
  12. };$ [& L: [6 f! F3 {/ V$ A
  13. ws.onerror = function() {7 i* B2 P) X  |" p. F- e9 O
  14.     console.log("关闭连接");
    . E/ R7 y0 ?9 [5 S) [2 G
  15. };/ \7 E% J  t) }- \. u
  16. </script>
复制代码
录像页面
+ L0 M+ C1 x+ W/ I2 k' r
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>$ L, j3 k  m* ~8 c; \* E# Q4 J- _' \) d
  2. " O  j& j2 v' w7 D( Z& D$ y6 |8 J
  3. ' u* n  q8 H# L

  4. 1 D( @% k$ b# t8 i
  5. <script type="text/javascript" charset="utf-8">
    1 ~/ v3 g( }+ z6 T; |: P
  6. 9 M; w# V8 P; M$ [7 l! t- Y

  7. 9 t8 A# _! k, O8 h0 m& @
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');
    4 x1 k4 r7 y- R
  9.     //socket.send("嗨我登陆了");* D. C% ?! O, ?2 O
  10. 7 b, d  R7 O# U6 D
  11.     var back = document.getElementById('output');
    8 o% ^5 |( ]* u$ H& J
  12.     var backcontext = back.getContext('2d');
    4 ~  l) B+ X, j: I9 L* }
  13.     var video = document.getElementsByTagName('video')[0];3 R/ h3 O* l/ S3 E
  14.     5 h9 \$ y/ w& j7 a( y
  15.     var success = function(stream){+ y* n3 U8 o6 k; |: I
  16.         video.src = window.URL.createObjectURL(stream);
    ' f7 t; e' B. {
  17.     }
    ) j/ y: e3 t) A' j7 b

  18. . X  c( o. G+ ]
  19.     socket.onopen = function(){
    7 F! u! q) D1 K$ t/ f
  20.         draw();
      d/ G3 K' {3 t. h/ h! p  e% L. a
  21.     }
    $ p: z  F3 n" p: X- M

  22. " J6 t% Y0 i; ^3 K
  23.     var draw = function(){/ q8 N- v; Q8 A9 \8 O8 w* [
  24.         try{3 ~0 L1 `+ q/ k5 g1 y
  25.             backcontext.drawImage(video,0,0, back.width, back.height);
    # o* m/ X! A  q" [- K
  26.         }catch(e){
    % n! o" W) w' d! G* s4 b1 u& n
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {
    & J5 A& P( r$ b. G$ p- w& v
  28.                 return setTimeout(draw, 100);
    ' W# o+ g  F, [0 q2 O8 Q# Q
  29.             } else {
    : r6 g% G! S: k8 _2 t
  30.                 throw e;
    8 L# T+ }3 ~4 c0 d* O. }6 z
  31.             }
    " f. [9 {) w; g
  32.         }, J8 a0 W8 c1 d" o. C# @
  33.         if(video.src){, Q, X7 J0 {5 N5 _, d
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));
    4 p, R% @* H  i$ ?/ ]" V
  35.         }8 i9 a0 |. G( w# Y; ~! v! k/ d
  36.         setTimeout(draw, 100);
    & Q3 I& ^$ w9 ^5 ?6 V5 |% P( y
  37.     }0 N! g  @* q% T- Q1 [% l( S* L
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||
    7 B' g0 n$ w/ M4 l2 f
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;8 h/ h! R5 n% o+ ~
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);
    / u6 P& N6 p% k/ s+ t* o1 ?
  41. </script>
复制代码
  1. php0 o- c& [0 f; q3 J& E6 D* O7 S9 I
  2. 8 J- Z0 @( z* s# j9 X/ _& |  v
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);+ K7 o) T1 s8 \7 Y+ i1 }. A

  4. ; a2 A/ J% V( t
  5. $server->on('open', function (swoole_websocket_server $server, $request) {6 e, k- M$ V" G& r* ]8 m

  6. % f* g. k* J8 g: _3 C
  7.     echo "新用户id:{$request->fd}加入了\n";
    % u* Q2 [4 r' a  J$ \/ c
  8.    // echo "server: handshake success with fd{$request->fd}\n";
    % w; s' p- j) v0 D2 e0 j0 Q( F
  9. });8 X2 R' Y/ d) L; N9 g/ l
  10. ; `, T* f0 E* [' \" u* d
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {2 Q( v* |/ c# i6 D$ e4 R0 }" W

  12. / K- t( y# W8 F- A- w
  13.     //循环所有数据0 G' w! j9 Z: U& p  B
  14.     foreach($server->connections as $fd) {$ E& E" e  |! _
  15.         //返回数据. [7 m: K, ~, F- Z7 A0 w, @/ C, R2 J2 c$ a
  16.         $server->push($fd, $frame->data);6 f* r' b1 h+ p. V
  17.     }6 U' }' A: O2 a
  18. ! K9 ]. t3 m0 o" C" B
  19. });
    ' n0 i8 i! `& ~* B! |) ?

  20. 4 |, E4 P: D4 t2 s9 x
  21. $server->on('close', function ($ser, $fd) {
    ( q( J2 h  T# U
  22.     echo "用户id: {$fd} 退出\n";
    / T* C2 |- h' d& H0 W' k8 Z6 C
  23. });
    8 k% K6 H- X: Z6 K3 X
  24. ) j: [) Y5 g$ v# h& `
  25. $server->start();
复制代码
7 J, s& K/ w! a% V

/ o  K1 ]+ U& P8 Y2 c# m8 o
8 t2 W, C8 i' o3 g% T0 o  n3 G& T: ^' X. j+ p3 a0 x) \1 q9 U

5 ^( X) h$ \) V& p* k6 a+ Z; y- _' `9 p1 ?5 Y0 ^

# T, t! p: y+ S  [- [% X0 p( u4 M# m3 H9 ?" L; I
9 C' }& N; R) O( a1 v8 _/ _

. O# q5 ^5 M7 ?  Z( {7 `
& A& V' Y, D! f' U2 N' S- u1 i3 m1 }$ I0 {9 S) y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-17 18:09 , Processed in 0.056331 second(s), 19 queries .

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