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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket, k3 I5 h3 E5 A8 T1 T- X
上代码
前端
观看页面
  1. <script type="text/javascript">6 C% M* `8 [* Q( w
  2. var ws = new WebSocket('ws://192.168.0.150:9502');3 Y7 t2 c/ b4 v5 i) C3 e% [* O
  3. . i( s. \8 y5 _- K- [, [  u! @
  4. ws.onopen = function() {# `  [5 m( @$ u7 f. A
  5.     console.log("连接成功");
    + f8 ]( [: k# O5 h' a3 |
  6. };
    5 X1 s6 t! L- B+ }
  7. ws.onmessage = function(e) {
    + V- k( Z  k5 X, ?/ j
  8.    console.log(e);
    . ?8 \0 `/ x3 g. W1 G

  9. 5 f  `, h4 j0 w8 n
  10.    var data = e.data;9 a! E# d7 R1 W9 T8 f. z3 }
  11.    document.getElementById('player').src=data;+ S% k+ ^, C) L& G9 p
  12. };
    & `; i/ {! U6 H3 O; Q3 p
  13. ws.onerror = function() {; @2 }8 q' f6 y6 T/ A2 B
  14.     console.log("关闭连接");1 V; [" F/ p* S% r% X
  15. };
    4 @; b& G6 o6 y1 c) R% C
  16. </script>
复制代码
录像页面

" J; h9 Z: h' v. \
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>' B, o3 L& }3 E& r
  2. 2 U3 \# A* @6 B3 P5 _0 _: o
  3. ( \- Q* l  s3 }  g) ]/ b

  4. % d1 V" W% Y: R( f+ x
  5. <script type="text/javascript" charset="utf-8">
    9 P" ?. i; B5 |+ G$ y

  6. 1 S/ e  k& Z0 ^7 B+ n/ r" Z3 S! H

  7. 8 A) p! L5 k3 M: ]- T' q
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');1 }1 ]5 V7 Q" P* m0 O  ~# _
  9.     //socket.send("嗨我登陆了");  w" w  w; B& l6 b( @% @; K$ J

  10. ; m5 W4 _2 d; A3 k
  11.     var back = document.getElementById('output');
    - q8 N& ]% Y3 G1 _" a+ c8 h$ ]
  12.     var backcontext = back.getContext('2d');
    8 w% q1 Q, ]4 h2 G$ Q% x! Y
  13.     var video = document.getElementsByTagName('video')[0];
    / a4 O  P9 L6 Z/ G5 A) t& B
  14.     ) o/ y' p8 A/ z: Z
  15.     var success = function(stream){
    . I) c% \5 p1 u  V
  16.         video.src = window.URL.createObjectURL(stream);& _3 h5 e  R1 E& f3 m: ]* v$ q  g
  17.     }) i& V3 q3 h* F9 G# J* _

  18. $ W0 W$ o# [, z" z; W
  19.     socket.onopen = function(){
    6 ]2 B/ [* Y% C. ~
  20.         draw();! J& f" T% \  d8 Y! Y% w1 g
  21.     }. N3 ^- H1 C6 z
  22. ; P2 W+ f5 Z9 _/ E- e
  23.     var draw = function(){  U9 _) Q" O- D0 K0 t
  24.         try{" A& @; f  T6 J# P1 O. @4 w9 x4 T& g
  25.             backcontext.drawImage(video,0,0, back.width, back.height);  w# O# H3 I* T2 m* \, ?& Q# w0 w" ]
  26.         }catch(e){" v2 Q2 h1 r$ A5 L
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {7 e1 O8 ]; X5 V  j' e
  28.                 return setTimeout(draw, 100);# ^, q! ]9 G% u  g# D% I2 ?5 j
  29.             } else {
    ( M% g! A6 u% c8 J
  30.                 throw e;
    & ]; {* C; ]; [9 f
  31.             }
    9 ~, j& l( L* x
  32.         }% v6 q2 x) Z+ n2 F* s
  33.         if(video.src){% f9 H/ N! H+ a& m+ D1 o2 y, a: G
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));' y: Z9 C% C+ c$ W. i' g
  35.         }
    ) A6 |" ^# D" L, f6 ]
  36.         setTimeout(draw, 100);
    ) s+ g- z& {6 R
  37.     }
    6 p% [+ m1 D: K, n' ~, }: @
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||6 D( a( m9 e5 k- K9 U) ~
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;
    3 F# y1 Z" B0 _
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);  i& S+ V0 z5 X/ Y, P5 n1 E
  41. </script>
复制代码
  1. php% G& h! V7 m# {8 |8 a) |# k2 G
  2. 1 V& y) a  c9 b! O! Z4 m3 @6 C+ M& V) {
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);
    * O" c! ~- W' L
  4. 6 U- r2 {- M( O. Y* q
  5. $server->on('open', function (swoole_websocket_server $server, $request) {
    + a. ~2 F: E8 r& o! k. \

  6. - |) y9 ]" l% }& Z( f
  7.     echo "新用户id:{$request->fd}加入了\n";! \. a$ w# m- ~! Y) \- X
  8.    // echo "server: handshake success with fd{$request->fd}\n";
    3 K! g0 d7 H( h8 W9 k# D+ L
  9. });6 L4 @$ I4 O7 ~$ x  w
  10. ; c+ B, ]& p" K" K7 I3 K, e
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {
    - y0 i5 i6 i4 t0 V% y9 t  ]' W) b
  12. ) G# C7 u# L1 B$ g% r
  13.     //循环所有数据* [' x* m2 q& o$ @
  14.     foreach($server->connections as $fd) {
    " m) _; o9 n% Y% @* l
  15.         //返回数据6 w% i  ]: v- l
  16.         $server->push($fd, $frame->data);# {& m# ^# J! v/ f6 f% Y# t/ K
  17.     }
    & x& ]  U% {' a+ _6 u& L
  18. : O5 O% U5 L( w" \# r
  19. });
    ' H) q+ E8 d" P; h7 d
  20. ! {) ?' V4 `% ~3 i& u; }5 |
  21. $server->on('close', function ($ser, $fd) {9 ^: l/ z: t: L* Y9 z
  22.     echo "用户id: {$fd} 退出\n";1 t& ?% S7 i/ O9 s9 V8 A
  23. });" Y, V' v4 n; P" t) L, N9 g/ m
  24.   o3 z. T0 o2 X! P, L6 }
  25. $server->start();
复制代码
, w/ }* g! J0 {" t

* b) h% d8 M- [0 W' J6 J) B6 ~6 ]3 r: o5 j% a# ]

: k" j) D6 u' W5 K; y7 w8 p  B& M/ H1 Z) r

3 I# b3 D( d4 Q& a6 ]; g3 B$ Z+ g
. z' S# A" y7 W0 h: \
4 d( L3 j3 M( i! R# }$ @

# ?( f" z' [5 f( a" p4 M& K: Y" V6 R. u( [3 `1 w/ C' j
9 T: x# m. L8 J) ?9 m% \8 j
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-5-2 11:47 , Processed in 0.056902 second(s), 20 queries .

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