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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket. {& ^% h' A' F$ @' Q; e
上代码
前端
观看页面
  1. <script type="text/javascript">7 F. B5 P2 ~6 K1 B6 k# z/ j
  2. var ws = new WebSocket('ws://192.168.0.150:9502');3 l/ [+ `  L6 S! ?, O
  3.   {! k4 Z8 g6 Q) J4 S
  4. ws.onopen = function() {
    1 O0 q: N; R6 y) i" `5 b4 [  h
  5.     console.log("连接成功");0 _( @5 Z3 W9 y. o
  6. };8 S* ^' t8 U; D& l6 I7 h
  7. ws.onmessage = function(e) {, ~  p& `" G( |8 _2 Z' q( S, g: m
  8.    console.log(e);
    . \1 T( P: }5 f1 \) o
  9. . F$ J& o3 e8 q3 ]
  10.    var data = e.data;& Y  O) Q, a) n1 {* @
  11.    document.getElementById('player').src=data;7 b  |* o2 s) E
  12. };/ X, u) K, ?. o; t4 h3 D% q
  13. ws.onerror = function() {
    . ^1 K* B- d8 a: J% S
  14.     console.log("关闭连接");
    - ?7 w/ X5 i! Z
  15. };4 G$ v) E+ d3 x6 R" r0 h  t1 v
  16. </script>
复制代码
录像页面
3 V7 m% a" x/ _# K! H
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>
    8 l" d8 @! Y! v2 `

  2. 4 k! C6 ^3 r' I8 M2 p) e- U) L

  3. 0 T8 J6 _/ _9 H+ C8 g4 l

  4. * H. v" F) f' A# O: F0 a
  5. <script type="text/javascript" charset="utf-8">2 t) I7 a7 r3 a( c

  6. 5 S& J% e& L# y: o" W4 L

  7. * {- [$ i1 z4 C* h6 ^7 X/ A
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');9 K" x) T) i# u' L+ U
  9.     //socket.send("嗨我登陆了");
    ( E! d: ^) ]& H/ L, Z+ ^
  10. ' b3 p$ W% K) B, A- I5 m- F
  11.     var back = document.getElementById('output');
    . W, c$ v' u& w- O% I
  12.     var backcontext = back.getContext('2d');6 @! A5 N( }5 h" q% Y/ F. Q" r1 H! h! N
  13.     var video = document.getElementsByTagName('video')[0];
    ) X! k# c' ]" K  J: G5 s( o0 o
  14.    
    " ~. a* ^9 E: d8 A6 X; y% A8 }& v
  15.     var success = function(stream){) J: W, r: K& G. [; D4 a
  16.         video.src = window.URL.createObjectURL(stream);
    ( q& k" ^2 b; @! \
  17.     }+ I+ x; x$ @+ Z" l  q9 u2 F% o
  18. ' L. H# {: z; b# Q3 f
  19.     socket.onopen = function(){( e0 g& T/ s; I1 N+ @7 ^) e
  20.         draw();
    6 @$ w  ]: }6 C5 W
  21.     }/ U9 k9 Y7 H' _& ]* \; |: _% N
  22. $ E5 W$ D0 L" J& k9 I, E
  23.     var draw = function(){
    + K" h: u( a& B2 L
  24.         try{
    8 M: M; c+ |) h. q6 M+ O
  25.             backcontext.drawImage(video,0,0, back.width, back.height);
    2 c2 S; @  ]9 D8 K8 E8 O# V
  26.         }catch(e){/ m* ~% J) m. S2 c* F5 ]& i8 q
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {
    8 {$ b  n+ [! E6 i( b
  28.                 return setTimeout(draw, 100);1 l% _: U- W7 t2 \
  29.             } else {- c2 o& n6 N7 F6 B
  30.                 throw e;
    ; V- ]+ [6 ]" _5 ^
  31.             }
    ! e7 l  a0 J# G- |2 y9 g: q- |) e
  32.         }  x/ u  U0 R+ K0 H. ~' G
  33.         if(video.src){
    - Z5 K2 `. B; h
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));
    5 U' V& n9 q! a' r3 f) v( L
  35.         }0 {/ Z" A6 I8 ?( a4 R" y/ Q1 i
  36.         setTimeout(draw, 100);; x4 |3 m# f0 D& o7 d
  37.     }
    ; V! F: Q, w# n- _' d- I
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||, a: U; j' n) Y' y: F' s
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;0 w0 I4 f% Q1 [0 i( k- C+ G3 S
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);, W$ M7 S* N- }
  41. </script>
复制代码
  1. php' e* _2 O; O% m0 ?
  2. : V" a% X6 y' W' Q) \
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);9 n& l. {$ W/ P4 i  i( E2 b
  4. . M7 G5 Z. d  `/ c: K4 b4 v
  5. $server->on('open', function (swoole_websocket_server $server, $request) {
      L2 X7 x  w) d0 ?
  6. ) l. n8 D" z$ L) Z7 u& C
  7.     echo "新用户id:{$request->fd}加入了\n";
    5 g1 j5 p: O: I5 |
  8.    // echo "server: handshake success with fd{$request->fd}\n";& t$ {  L; C( F  g! w1 E
  9. });% ]2 m# |" a- w( V' N/ ^5 J; q" G) n

  10. ' @+ \. \: T2 m$ |- X, a
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {
    $ {' d6 p% ~  M5 ?/ {/ Z4 L) P8 ]
  12. 6 g4 {/ e0 _* m% x+ [7 R3 ]% b' q5 g
  13.     //循环所有数据, q5 N- `# S6 Y1 w( c3 P
  14.     foreach($server->connections as $fd) {; g" `( n, s6 ]( g, m. `
  15.         //返回数据" `& z/ \( \  V( v# L
  16.         $server->push($fd, $frame->data);
    " h& I1 c+ t& X! h7 e
  17.     }' O7 ^  Q; w/ U  p& Q9 l
  18. . r5 K6 ^! [4 Z4 {6 [; z
  19. });+ S$ ]8 z3 h& h$ C1 r: A# K  e+ v4 T
  20. 2 R/ S- x9 ?% P: N! m
  21. $server->on('close', function ($ser, $fd) {- l+ F  V0 [: }9 s! H, p9 ]3 T" L
  22.     echo "用户id: {$fd} 退出\n";$ N& D/ p& u. @5 \1 ~
  23. });; n6 ]# V0 C2 W" ]6 B
  24. 3 V0 K+ _3 P7 o2 X0 b
  25. $server->start();
复制代码

. y# y% E% I3 o/ ^3 m; i, x  k5 e" w9 Q( U, g
0 V9 c4 L* j/ L) b$ h2 i

1 ^: }2 Q2 b( W. x6 g; N$ f, ~+ o8 F7 U7 ]$ Y; |0 p  m
) K1 Y. c+ A- E4 l3 C
& \; t  a3 F$ K. K' L3 S& j: ^
% o2 {: t* J! I3 s# H+ q+ [
7 s6 Q- I" z- R& s+ h5 k
0 C. W; c, I$ q& G) \3 z
& N1 n( K4 i5 j

$ b; b7 C* A5 v5 N
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-4-30 21:46 , Processed in 0.080619 second(s), 20 queries .

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