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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket
: ~4 n3 Q1 q; O& ^, `上代码
前端
观看页面
  1. <script type="text/javascript">4 W4 t0 }8 r+ g! o% D- I$ Z
  2. var ws = new WebSocket('ws://192.168.0.150:9502');
    1 d" y7 W0 M5 T+ _4 N) L

  3. % f8 r# r/ q8 \: M+ O
  4. ws.onopen = function() {
      J6 c- E6 I& \$ k2 {; o$ X1 ^9 {; B
  5.     console.log("连接成功");$ Z6 Y0 l# H7 F. }* M3 ~3 d
  6. };7 u; Y8 r9 I1 |- d2 y
  7. ws.onmessage = function(e) {
    / K: O% A& O; n2 p$ y
  8.    console.log(e);
    ' K3 C) j$ v9 V/ @1 s

  9. 3 I8 b# [8 V3 [/ ]7 F2 S- t
  10.    var data = e.data;0 `. F. Z5 |' E9 P/ [  ?
  11.    document.getElementById('player').src=data;  \" D0 M7 q9 j- }3 l5 \% t
  12. };  x8 }4 x# v; w8 b: Z3 r& ]
  13. ws.onerror = function() {
    7 T6 v+ Y' W' j& X% d$ [
  14.     console.log("关闭连接");5 d5 j# X( R& u2 ?
  15. };
    / m' z4 R2 }* v0 d; r- q
  16. </script>
复制代码
录像页面
4 Q+ W1 X) c$ E/ d  o2 x4 H
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>0 t( s; u% H9 a; ^6 x, t$ O5 t

  2. - i' k0 O! I, L4 k" T
  3. & _$ y: M7 L1 D3 m, B0 E! L) v
  4.   F  q2 o* b9 e  i7 W2 r3 V
  5. <script type="text/javascript" charset="utf-8">9 h7 X: `5 [2 E8 s& [( b

  6. * \6 B/ L+ b' N% }* H

  7. 8 M# O1 c8 _. w6 ]
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');
    ' x/ n: z- r: N, l
  9.     //socket.send("嗨我登陆了");) U6 x) m- x: p7 F* u

  10. % l; N7 B% L( ?4 q4 P6 A* N$ }
  11.     var back = document.getElementById('output');: h6 U( l; n' |: k4 F" L. f1 I
  12.     var backcontext = back.getContext('2d');! y/ V/ B1 ?  b
  13.     var video = document.getElementsByTagName('video')[0];
    1 \) V- M( A9 r
  14.     : s, t9 X& q; F: y1 ?, s
  15.     var success = function(stream){
    5 L2 ?* F5 d: l$ P. Q
  16.         video.src = window.URL.createObjectURL(stream);
    , l9 z- u  p& q/ Y3 }$ d
  17.     }0 Y; \, W1 E4 }/ D# x8 ^
  18. 4 d2 S" j. y4 i
  19.     socket.onopen = function(){
    - H6 d2 v! w  Y
  20.         draw();) @. y  R6 L, C1 A0 _: K: _
  21.     }: j, ?; ]9 Z; p! u/ {& P: R% d

  22. " ?  o2 P! F. w4 ?& N# s
  23.     var draw = function(){" L5 J2 K) O3 X# f- z" C3 [+ v
  24.         try{
    - M0 t2 y9 _- y6 l
  25.             backcontext.drawImage(video,0,0, back.width, back.height);
    - K3 h- G2 ]- j% y6 P1 M+ i* V# F
  26.         }catch(e){
    / x. g8 J% @4 S' q3 u/ |+ U
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {2 L" N& C: \* d
  28.                 return setTimeout(draw, 100);
    - t2 |/ a7 s4 n3 g- _/ I7 @+ G
  29.             } else {
    ! j6 _; E( c3 e# k: |/ q" [
  30.                 throw e;
    * B7 e' L' x5 p1 Z
  31.             }
    + h3 f1 @) Q( W
  32.         }
    6 Y: n) T. \  x" q$ F
  33.         if(video.src){8 {) I8 u7 I  J9 T5 N
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));* ~  s. L4 U* q: b! P
  35.         }
    - I" }& F: t9 R. R* y9 w
  36.         setTimeout(draw, 100);
    4 ]  Z7 b/ H- `; H4 s) l! c. \
  37.     }
    ! D: c4 C( n7 ~0 y* |: Z& ~
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||
    3 U8 x7 c/ X- v( q, L/ h8 }
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;
    " l, S/ u  _3 V& h: U9 I4 p
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);
    3 r+ u+ y. t/ g$ l6 M' S
  41. </script>
复制代码
  1. php2 w/ I+ I" J; Y4 u9 X/ m" S
  2. 3 O- l0 \/ L/ x& r8 b3 j
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);2 n9 o5 f. i$ r8 Y5 M

  4. 4 u: Y0 x2 k1 x5 m
  5. $server->on('open', function (swoole_websocket_server $server, $request) {( ^5 ^) K' Y* d% b/ V
  6. 5 ^8 ?. l0 w, o: k
  7.     echo "新用户id:{$request->fd}加入了\n";
    0 h/ f, @- U  X( i) M& T
  8.    // echo "server: handshake success with fd{$request->fd}\n";, y" P; L# m* p/ ]
  9. });' s. Z1 b( `2 S5 N  b# b0 v0 Y# N7 U, G( p

  10. " J! W( d! A4 {' Y7 x
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {9 K- n  Y. x& A) m$ G
  12. ' P) M: W, W+ p
  13.     //循环所有数据
    8 K. g& o) V) H& x& k( x, q
  14.     foreach($server->connections as $fd) {# o6 \) m4 c4 B' @5 x
  15.         //返回数据
    5 U" l  W# g- b
  16.         $server->push($fd, $frame->data);
    / [& a1 V0 O3 ^$ u1 ]5 x/ h
  17.     }+ J$ u/ {, _% u% Q0 Y

  18. 6 Q! n! k1 A$ ^: k) O: N" V  u9 C
  19. });8 o# I4 z* @! M8 C' W

  20. 9 N' M0 Y5 g# l' b! O
  21. $server->on('close', function ($ser, $fd) {
    - r$ s# m( E- x* y4 U6 g8 T. z
  22.     echo "用户id: {$fd} 退出\n";
    8 V5 x; u2 d  [: x( i
  23. });& g" X1 \5 b) r& x! Q
  24. 4 H! |6 J( J% p2 ~8 u) ^2 B
  25. $server->start();
复制代码
$ r% D0 `: [. ^
7 Q0 F3 F2 j4 _$ b1 A% t; Y8 P
& E' R: o" s- }+ x; D) F

, f7 E0 ?3 |4 R2 A0 r4 o0 v( q* P0 Q" R2 K4 \' Y
& Y( |5 B4 W3 `3 T" O9 Y, H

" Y7 `3 B2 M; c6 J2 r; @. P
/ X) f4 ~0 X" a6 Y! U% o$ U- q: `0 ~9 ^9 A7 i1 R* ~3 B
% l& C) o$ t' k3 G
3 t' W( ]- B/ w- \
4 h. M# b4 a2 z& j8 g, U
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-20 13:44 , Processed in 0.113312 second(s), 19 queries .

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