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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
主要使用 webstocket
! T# P2 X$ }& q( @! E5 y: j( a6 C- e上代码
前端
观看页面
  1. <script type="text/javascript">
    . d* ^7 T( A8 P! W& b
  2. var ws = new WebSocket('ws://192.168.0.150:9502');
    2 m0 F) G8 w- \/ J
  3. 1 N# m) S8 D2 b0 ]
  4. ws.onopen = function() {* t4 W4 \8 q, k+ U6 z
  5.     console.log("连接成功");
    ) I6 C1 Y" X" [
  6. };
    ' m, x4 W, g( N; l
  7. ws.onmessage = function(e) {1 O" v+ w) K( k( o
  8.    console.log(e);
    + k/ s1 V* o7 ?/ r
  9. # g, X8 b& W) ]% o2 m5 f' |
  10.    var data = e.data;
    , P& |, J# j3 P' `8 l
  11.    document.getElementById('player').src=data;, b; H) C, Y. P! Y7 w
  12. };
    $ f/ F# c+ t" S% U+ I
  13. ws.onerror = function() {
    , m& `3 m2 c1 G2 e
  14.     console.log("关闭连接");2 i7 w! B; F8 [1 q
  15. };
    " i0 W4 W: G# W* g9 A
  16. </script>
复制代码
录像页面
9 H0 z" k( T: |& X/ l
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>
    : @  F3 c/ l8 T4 D+ V$ u

  2. 6 Z7 ~  n6 g8 I3 X

  3. 4 J; v! R" H0 K. Y3 X$ V3 @

  4. % \" I! E1 i0 _6 e0 V8 }0 W8 E
  5. <script type="text/javascript" charset="utf-8">2 Z* z/ R8 G3 a7 F% p3 m$ Y

  6. 0 p3 r0 d- I5 i& _
  7. ! S' J: g4 X1 Y( Q
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');
    , X# b7 B3 N* J4 L2 A4 Y2 m5 D
  9.     //socket.send("嗨我登陆了");; p! D7 \( j0 I( s  v6 @7 ^  P

  10. - n! [* ?0 e- Z+ ]! a* P1 O
  11.     var back = document.getElementById('output');
    / Q1 g9 ^2 c! h6 C
  12.     var backcontext = back.getContext('2d');
    ) x" b2 p. c* S' p8 m+ O" ]
  13.     var video = document.getElementsByTagName('video')[0];
    $ J, L) [6 j( p4 S3 O' B  J2 @6 N
  14.     0 R1 d) Q0 m' k& k
  15.     var success = function(stream){) @# I% y5 L& B; Y" A( u+ Y) `
  16.         video.src = window.URL.createObjectURL(stream);
    8 W/ P( o8 D0 x8 P2 I
  17.     }; \% H( {& `8 a3 V; `
  18. ' F, @$ P# h9 R7 r7 v3 z
  19.     socket.onopen = function(){
    . w. `9 C: ?- o. p4 C- Z- S
  20.         draw();' H4 V* l9 T( l1 h4 |! d+ u% \. ?  [
  21.     }
    4 P- u/ y; U, h3 e2 L
  22. ) x0 X4 O3 N# T; L
  23.     var draw = function(){3 s; d# ?4 m* [9 g/ k& ~
  24.         try{/ l- U5 i' }$ q2 g' \" u
  25.             backcontext.drawImage(video,0,0, back.width, back.height);. i) m8 E3 k' p1 \9 i. \1 C  ], o5 ?7 d
  26.         }catch(e){
    9 `$ R! n/ |* t! n* F
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {
    3 n( G, S: y5 Y+ C
  28.                 return setTimeout(draw, 100);0 a( _0 j! n+ S0 r2 ]* L9 s
  29.             } else {
    $ f4 W. o% q7 m9 T
  30.                 throw e;
    # o" u1 M  |" S0 I0 h
  31.             }5 N( K& B! u( q5 r
  32.         }
    8 M) q7 c1 [0 N, Z9 l; w
  33.         if(video.src){
    ' g' {, m: E; ^6 g* V# W
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));; Z3 O0 V! B7 F
  35.         }3 q# C. K6 |: v, Q: t( C
  36.         setTimeout(draw, 100);
    7 P7 r" S, m4 Q) ?# z: H
  37.     }0 L# p: v; P% E/ A- e1 F
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||
    - @! W( W1 a  w! P
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;* S- D  k0 g4 Z$ D* c4 H' Q
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);) y; s# z9 ]; e9 D* h) X
  41. </script>
复制代码
  1. php
    # `+ I$ {$ g) e7 o
  2. ; `& Z5 `( Q7 F+ W2 d! f- }
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);
    * D. B7 a/ y  ~4 ]# G

  4. / }9 c* c% B8 E( y% ~$ G* r
  5. $server->on('open', function (swoole_websocket_server $server, $request) {( m' t. F: h( V
  6. - w% _& d) ~5 b/ K) L
  7.     echo "新用户id:{$request->fd}加入了\n";" ?% j  O( W6 p4 s2 S6 D4 [* h; l5 U
  8.    // echo "server: handshake success with fd{$request->fd}\n";
    , N5 q, V6 B0 ]3 f* |4 h8 E
  9. });
    - I1 X, ?9 _* Q) P* T, e. P

  10. + D$ i4 Y0 n0 v
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {% ~  p7 f' a- a. [

  12. % n; v0 f2 y2 G8 Q; L# g
  13.     //循环所有数据
    ! b2 f- c9 t% u1 u
  14.     foreach($server->connections as $fd) {
    " D) v1 \$ U9 C
  15.         //返回数据, g! l' u' I+ w7 ~8 F
  16.         $server->push($fd, $frame->data);% T' t3 _0 _% u* W3 W( d! i+ o
  17.     }$ |+ X2 m% l6 Q0 N! ~# U* C

  18. 3 O! [7 ?0 W# x4 e1 S! A5 U
  19. });
    ! C+ {; V2 D7 T6 e+ o3 ]

  20. ; t* z2 A4 _% l1 f
  21. $server->on('close', function ($ser, $fd) {' I) ?+ _  l; G* {% K) T
  22.     echo "用户id: {$fd} 退出\n";
    - D. N$ M& P3 {) h
  23. });' O- t4 q, k$ A# W# q. S2 |" P
  24. 5 y3 ~; l3 e9 `0 B, i3 ?3 {# K
  25. $server->start();
复制代码
0 j& W+ Z/ i4 U$ b
  X# ^7 E% R* u! V  p; _2 Z  G

, _" t, \+ X2 x
5 C& c: v* H1 I" Z5 ~7 w- e9 r+ y) A
5 M% X6 {* w* E; {1 h5 H5 h5 c

, H! x, V7 Y5 ~; w9 J1 V; h2 {6 {6 j; ^! ]" b

* l7 ?; ~+ ?. `' n% `" g1 q& K& K' `- ?1 l/ P  V. M: S
- b& E, t# H2 M$ O/ C  U$ M' q" `, r3 m
" a' m5 G& y7 N" E! j$ r" o
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-5-2 13:32 , Processed in 0.056146 second(s), 20 queries .

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