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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
主要使用 webstocket
- j' D, s( H; V% `/ s: \. e上代码
前端
观看页面
  1. <script type="text/javascript">2 @, U* R6 P. S6 g6 J/ M  j
  2. var ws = new WebSocket('ws://192.168.0.150:9502');
    * f3 c+ K4 k3 Z0 e" Q6 m" e7 x, @
  3.   @( p0 h' {: G. [% Z
  4. ws.onopen = function() {0 _1 Q, ^( x& E. a
  5.     console.log("连接成功");( k. E' B7 e: q$ W7 s3 {
  6. };
    , {4 c6 }/ U- w  M7 U" t: P
  7. ws.onmessage = function(e) {& Z  r, `$ S# p% p
  8.    console.log(e);
    9 _6 V: r4 j2 h# {5 w, E* V6 B

  9. + G; f2 E5 D( G1 ?
  10.    var data = e.data;
    , f# @6 c5 `( n: b$ A
  11.    document.getElementById('player').src=data;
    1 q7 H2 ?! H4 n9 K1 q
  12. };9 c! C2 H9 T* i- _
  13. ws.onerror = function() {3 Q5 e2 U0 ]4 l1 q9 ?
  14.     console.log("关闭连接");2 q9 z. Z6 Y$ H# I+ ^  }
  15. };
    ' M0 t; L) V" j* X6 Z
  16. </script>
复制代码
录像页面
1 _4 l: ], Y4 i
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>5 y2 W9 T( f: w$ {3 y$ S) ~6 K

  2. ! D- }6 m  l2 z! d" }

  3. + u, @, P) Q3 ^1 h; Z2 h5 q
  4. ; t  C3 `5 c0 I$ L
  5. <script type="text/javascript" charset="utf-8">
    7 B$ A9 Q3 ~1 E3 `: V" ]
  6. # p$ V$ ^2 Q2 k6 t# o5 C" D
  7. ' _, \: u+ P! d% a2 p& K% C
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');& C) o% B2 L/ O' I0 K, M
  9.     //socket.send("嗨我登陆了");# |" v5 U6 ^+ a. c& j5 _+ @
  10. ) Y" u* h# r9 c. C" i1 _
  11.     var back = document.getElementById('output');
    / e5 O0 d9 u# j( D8 M
  12.     var backcontext = back.getContext('2d');: o2 w) z; \8 C4 Z0 z, l6 N" P5 @+ n
  13.     var video = document.getElementsByTagName('video')[0];
    , d, A# P- w0 l5 w* F- N, L
  14.    
    9 Q; c' s7 L& \. Y& s
  15.     var success = function(stream){- |- Y0 G& g; J- _, E* X6 g
  16.         video.src = window.URL.createObjectURL(stream);
    / G* y0 ?' c7 b, p9 z4 P# P
  17.     }
    " }8 ~; A' E7 M8 D1 o' T  i# k8 G

  18. * b; b4 F# g( Y5 [& {
  19.     socket.onopen = function(){
    / w7 {+ u$ |$ g- o! g5 n
  20.         draw();( v- f9 ^4 A6 i+ C
  21.     }& @" F. U" E( [+ d# s1 l

  22. 5 x/ B/ ]! Q4 N% {
  23.     var draw = function(){; H5 \0 [. `; c0 _
  24.         try{3 u' K% N: R# x. h& o
  25.             backcontext.drawImage(video,0,0, back.width, back.height);3 z# `( P- P' J4 B; C7 t
  26.         }catch(e){3 B$ s/ p& {3 J* G
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {
    1 w$ k7 N. k9 f* u- E! U6 R7 t
  28.                 return setTimeout(draw, 100);
    1 \! _! q  H# A3 H
  29.             } else {8 f% T4 m3 U- L: b2 ~0 A8 M! ]
  30.                 throw e;
    7 g  i1 q2 C* k. y) F' e9 V
  31.             }) ]! K+ N" Z( J0 R' h$ ^; o
  32.         }
    ; s5 O1 I9 a" C) l
  33.         if(video.src){) G9 `' n; p" O. v
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));. z1 n- D  L! @
  35.         }
    : ?. }( N1 R+ K% Z) h- E
  36.         setTimeout(draw, 100);  c* y' ^$ H. F9 q. a
  37.     }2 d$ m9 i1 f/ Q) c2 e+ B$ y" D4 r. E
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||1 r# }* P  |9 ^
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;
    5 r% _" H8 M: N8 A# X
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);
    ( z1 k' Y) K+ }/ t+ o+ L4 W. T* b
  41. </script>
复制代码
  1. php
    6 H: [1 L2 O: B$ E

  2. + J4 }+ o- @$ K* i4 T9 f
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);
    / w/ R9 Y% R/ D& B
  4. ! `; [2 D# [! r3 p! d( n. M7 A
  5. $server->on('open', function (swoole_websocket_server $server, $request) {
    - I2 U. D- g* q! t0 {
  6. - c' p; X0 s- z' p2 I( r
  7.     echo "新用户id:{$request->fd}加入了\n";  M& K, \1 W) X
  8.    // echo "server: handshake success with fd{$request->fd}\n";
    8 d- f. n4 L. J7 S
  9. });! T4 d2 I0 n1 e7 n5 |

  10. 5 Z: b& r" m! {* j. e$ ]
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {
    6 l1 ]8 w% ^+ |* s/ U9 S  c

  12. * y) X, T, b- m7 a
  13.     //循环所有数据* `8 G* B3 e) a; w6 l
  14.     foreach($server->connections as $fd) {  R0 g" V2 \( V! A! w) ?
  15.         //返回数据# L2 N. {; F6 p: h& w, A% J; F! l  P
  16.         $server->push($fd, $frame->data);
    . c+ M6 P  p2 N
  17.     }
    0 F7 F3 K" b! [$ o

  18. $ f+ h8 g/ @4 s8 P. U2 @
  19. });) X% v# s3 p3 r3 c) ~8 M5 @! \

  20. : j: ?( V7 ]3 L3 H) x5 x9 a
  21. $server->on('close', function ($ser, $fd) {* C% @0 m1 K3 \, k3 ~2 F9 _
  22.     echo "用户id: {$fd} 退出\n";  ~( ^6 j# x, {) U  l0 _* Q7 t
  23. });  M) G; x8 G5 j

  24. : W6 `' W  w( B9 M* u+ v
  25. $server->start();
复制代码
! b* k4 S. y6 j+ M3 X  b: H

( m4 D4 q+ Z: U9 X4 y- V/ U' U+ P& y2 y/ c) C1 n

# Q' S" j9 e6 v; q$ P
( }/ Z) l$ L3 z. H% ^. i+ Q$ ^
7 n  z8 l. s9 l
9 m$ @% I3 w0 K. V. ^+ @
. g1 d) g- c1 ]
9 E* \% I% G6 h, m) |4 K5 Z& S4 |, ^

' a; @5 V" O0 u  E" q
9 M2 h' y; D0 T. ]/ C4 O; b3 w
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-17 20:25 , Processed in 0.105144 second(s), 20 queries .

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