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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket
1 m8 q3 P# S/ D) F1 K( Z上代码
前端
观看页面
  1. <script type="text/javascript">
    8 q% @; X2 O/ h! X
  2. var ws = new WebSocket('ws://192.168.0.150:9502');9 D0 E6 g% S: V: X
  3. ; @+ r/ K- I7 Y' a5 n, f
  4. ws.onopen = function() {2 J  E6 d2 k% y1 U" t8 J! @
  5.     console.log("连接成功");! z2 F* t( d+ T& ~. u
  6. };
    & M3 d6 l* S3 K
  7. ws.onmessage = function(e) {" b! l4 j! C+ i" a8 _
  8.    console.log(e);3 O, e" ~3 P) R" S9 S1 ^

  9. * [7 M3 {9 r" Y" g5 S4 V$ Z$ z) }
  10.    var data = e.data;
    " }# g- h8 Y0 f8 ]2 j
  11.    document.getElementById('player').src=data;- A' z, m1 ~6 Q
  12. };5 K) M# t) Q- M+ l: y* o
  13. ws.onerror = function() {9 g5 k0 {# \' Z6 G
  14.     console.log("关闭连接");+ W  w' k  R; o6 T9 D# m
  15. };
    $ t$ b) p! z& `  l/ R  a, n
  16. </script>
复制代码
录像页面

3 d! r0 B0 C- Z
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>4 E) L: z2 j! |" W* v. B1 \
  2. 6 g1 h3 d& ^7 j. c, y
  3. 6 H" x0 D% l8 F0 v+ B$ G

  4. 1 H, f! Q0 f3 @5 c$ U5 I& ^
  5. <script type="text/javascript" charset="utf-8">. a% d2 z( ]% Z0 H* C1 c( y$ y: ?
  6. - ~1 }/ p" l1 P' ~" @8 H# @/ b
  7. + F3 ?8 A( {1 i3 n6 z1 m
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');2 D0 w/ B+ Y! V" a" q
  9.     //socket.send("嗨我登陆了");' D* l0 [1 B' r5 e  v$ A/ s
  10. & w7 L- f, {: P' _: |. r0 @
  11.     var back = document.getElementById('output');! Z" y0 M5 V) a6 F
  12.     var backcontext = back.getContext('2d');
    ; k/ A1 N" Q* U3 r
  13.     var video = document.getElementsByTagName('video')[0];. F" V* h, r  _, V
  14.     0 Q1 G9 T: p( J
  15.     var success = function(stream){
    ( G( t5 H* p2 I8 N* g2 w
  16.         video.src = window.URL.createObjectURL(stream);
    5 v! e3 o0 F, G# U( R" g$ g
  17.     }
    , x# j' b+ u% V$ H  ^7 s+ Y
  18. 8 E+ ^3 S0 X2 X
  19.     socket.onopen = function(){5 A+ _# ~$ z. g+ |8 o# X
  20.         draw();
    . z0 \: d. O! X6 {5 `7 N% Y
  21.     }6 j3 K, b! m- c+ \; O

  22. + b: ^  D/ l* j! f- @5 }5 @
  23.     var draw = function(){
    5 P5 ~' N0 m$ X$ I7 V
  24.         try{6 E5 [' D/ Y6 l6 f, R& a) \
  25.             backcontext.drawImage(video,0,0, back.width, back.height);/ M. N4 l) G2 z7 b2 s; [/ b4 W0 }
  26.         }catch(e){
    * s' R  `' ^5 I& I
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {" f/ {( V3 r& C
  28.                 return setTimeout(draw, 100);
    # _, t& _# a* I4 Q
  29.             } else {
    / d( k' z% r+ `4 J2 a  W6 f
  30.                 throw e;
    5 h: w, ~- G  g  u: t  ~* s
  31.             }% h2 A8 p; J1 q* ?& J  q! C
  32.         }
    , {- B+ Z7 I) O5 p- {. V" l9 @4 S
  33.         if(video.src){
    6 {. d* `( M1 d" f; S; k
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));% ^5 a2 [. ?2 i3 v% c
  35.         }
    2 y. C8 E5 J3 m% h0 ^7 g: h
  36.         setTimeout(draw, 100);$ N5 R! V6 a( P) b& w' h
  37.     }
    8 k  z$ z% M6 f  c1 r/ C$ e6 b2 ^
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||; ~4 H* t; v  F4 j% z/ g0 b+ r
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;+ F  ^) x4 U, H+ F9 t9 \5 n) t: e
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);
    + U. y0 P- `) E! g
  41. </script>
复制代码
  1. php
    2 _& X  e- n6 p- y! l

  2. 5 n, S" k( S) y
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);
    % D0 d* ^7 @- c$ s. S0 O/ Z+ _
  4. 0 X4 z# h0 p: d
  5. $server->on('open', function (swoole_websocket_server $server, $request) {9 A/ I+ {( c( n1 f2 R6 R6 l

  6. 1 [1 X. O6 v8 y. v
  7.     echo "新用户id:{$request->fd}加入了\n";
    # Q  S5 }3 l. G% A
  8.    // echo "server: handshake success with fd{$request->fd}\n";8 b8 z: I0 C8 @; r) L2 L7 ^2 O
  9. });& O. @# V& A# G  E9 w$ q
  10. 6 N2 Q0 X, t5 ?: Y; q
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {
    & o2 y# W$ w" h3 v9 l; {6 c) ]
  12.   n# ^- v  N' G" Y, W
  13.     //循环所有数据, }2 i( ~  z6 |# h) Q! J
  14.     foreach($server->connections as $fd) {! [; ~. s  m: ^% G4 M
  15.         //返回数据8 l2 d, @! E% v+ `
  16.         $server->push($fd, $frame->data);1 }9 O) X  A- Y! e
  17.     }8 [& ]9 }4 i# b' l5 g: V

  18. 7 f; G6 y% W' \: ?1 Q
  19. });
    2 X3 [# w" t0 P& ?/ b! F6 X
  20. 5 w1 K, e) j' ~' o8 X, I
  21. $server->on('close', function ($ser, $fd) {3 x2 [9 s, r& T6 b
  22.     echo "用户id: {$fd} 退出\n";, O: _! Y( [' `6 Z
  23. });
    # l6 f) G& v0 n1 K" `0 R& N
  24. 7 f! J" p& t$ {4 ]) G% }
  25. $server->start();
复制代码

, e' K7 ]7 i1 `- f9 X8 H' D5 M- J" v- P2 z8 e; I

6 Z' [; E6 k& S, ?- n
$ e- h8 |) J7 h$ E, S5 n8 q
# W5 J  p0 p4 X: Z5 n) C' p# U
' Z% i: S% I8 i3 J3 s+ }0 R# o; L7 S* Z

% a! k# c. b  k8 z; t" d4 A" F' Q- T
/ T4 l6 H+ b% l! n- ]: t$ C: q. I! Y2 m, g
% M: r* k) `4 R6 ]8 M) c5 O5 L; `
; f6 Z# U( h& A* v0 v
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-4 10:05 , Processed in 0.061061 second(s), 19 queries .

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