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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket; E, i2 @; r8 h% n, C0 Q7 O2 i
上代码
前端
观看页面
  1. <script type="text/javascript">0 l& x8 c1 u1 z' d
  2. var ws = new WebSocket('ws://192.168.0.150:9502');2 ?6 u- p( \1 [1 b. j5 s' w+ s

  3. / E0 V% G) e- q9 N) V- e6 h
  4. ws.onopen = function() {
    2 U% \8 P2 H' `* P5 r+ {
  5.     console.log("连接成功");
    8 z4 o/ _# w0 X/ _
  6. };: C+ b9 h) r9 b4 a, c
  7. ws.onmessage = function(e) {! ^% M1 L! z. @9 `
  8.    console.log(e);
    ' z: i9 [3 j; n, y( c/ b$ l

  9. / N. n+ v1 H* Z% R8 c: w
  10.    var data = e.data;7 L* ?2 s6 q3 w1 z* S
  11.    document.getElementById('player').src=data;/ y2 O/ u1 x! T3 u) b, a; P3 ^
  12. };
    # b0 L0 [0 N  u' j7 v3 d" T- e6 b
  13. ws.onerror = function() {8 T* d4 N4 O0 C# a
  14.     console.log("关闭连接");  j1 t3 f! \( R0 m% w  M
  15. };
    * B5 U- p6 ~9 p# A! i
  16. </script>
复制代码
录像页面
6 J  X( Y/ E- l
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>& t% V& b3 `1 \
  2. 4 {0 ]& A/ J* q) ^4 V5 M9 h

  3. + H2 {5 ]1 D6 ]" m' Z
  4. 3 ?/ n! t' ?% y8 T
  5. <script type="text/javascript" charset="utf-8">
    . W: I  s& }, t( g0 I

  6. 2 Z. k( e6 p, T2 v; z
  7. # n. ], \7 c! t  ]; c
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');
    ) N9 `" X( Y4 Q  u# P: _( \$ z
  9.     //socket.send("嗨我登陆了");
    $ m$ s+ i) Z9 H- }7 h

  10. 4 t" e/ p# ]$ ~5 E6 N) R+ p3 Y
  11.     var back = document.getElementById('output');( k) s9 F3 g/ w; a4 J% f5 J
  12.     var backcontext = back.getContext('2d');
    $ X) {9 ?4 q2 K( H6 n
  13.     var video = document.getElementsByTagName('video')[0];6 d3 i" ]# l" C! ~- S8 s8 W. B; N$ u
  14.     6 S  H+ a' ^2 x/ j
  15.     var success = function(stream){
    % k7 ]9 \% q) Z/ a0 w
  16.         video.src = window.URL.createObjectURL(stream);5 \3 @: S" O) q. X+ o0 b" T
  17.     }
    9 W5 M! _! n8 j( v* n) a

  18. ' H" a% }. H& |$ U& \5 o$ j
  19.     socket.onopen = function(){( r" u7 O0 w& ~, v/ P7 A% t1 K' {
  20.         draw();
    2 H+ W8 S1 t+ d: Q* S, S( |4 A. x4 E# F
  21.     }" ~  e% p  R1 y- t4 \0 ]( e6 K
  22. ; n( t+ y! u" ^3 V: C# Z( e" e2 j
  23.     var draw = function(){" w$ `# e0 |: ?2 J& ]# Y! L
  24.         try{
    % q; w6 [* @$ ^! V. r) u* s
  25.             backcontext.drawImage(video,0,0, back.width, back.height);! j7 ~1 T3 B  L6 l% h9 h
  26.         }catch(e){6 q% C6 L* `# Q
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {: p. k: m' C; A  A# ~" h5 V2 K! [
  28.                 return setTimeout(draw, 100);
    # R7 F8 {, u" h, g; W* U3 Q
  29.             } else {* c( }+ r! X; s9 V( L6 k8 y
  30.                 throw e;
    2 h: V1 g; b2 N7 C
  31.             }
    ) o* |  s0 b% `' I- a) [& |. D: D
  32.         }; u, P% q- |: D& l
  33.         if(video.src){* H9 X4 F1 a9 X7 j7 B
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));/ }8 _6 }' _0 A7 o* y
  35.         }
    ) s6 T& J) g5 q8 s9 G
  36.         setTimeout(draw, 100);* f+ P( g# Q2 O8 O0 |
  37.     }$ r9 C6 E' S$ H$ \9 @- }) O2 P
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||# X+ i' O$ w4 @+ L& }* v
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;
    9 o1 W, o9 r0 n" u- |. ^
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);
    # B) G; F0 ]' z; R+ ?; N# Y
  41. </script>
复制代码
  1. php6 O4 N3 F  L. C9 e! o; B
  2. " R/ _2 |+ P' j, J
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);
    " _" d1 M* R" `0 ~9 f3 `( e

  4. % V! q# [# T) c6 d
  5. $server->on('open', function (swoole_websocket_server $server, $request) {
    ) d" H3 V7 M' @9 {
  6. " _3 D/ ^9 _8 v$ E
  7.     echo "新用户id:{$request->fd}加入了\n";( l0 q& g0 E0 n8 U( W
  8.    // echo "server: handshake success with fd{$request->fd}\n";
    . y: E+ n. y( |- o4 W( `9 K- M$ \
  9. });2 f! [% s5 {4 I
  10. 9 D) R' ]! C7 t4 m, m3 ?' G9 s  e
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {
    1 X3 c0 H3 @5 y: ]) b
  12. 4 |' V# P0 O' i5 ~6 e' D7 p' w! J2 n
  13.     //循环所有数据0 C+ ?' {% I4 c! z( ?9 i
  14.     foreach($server->connections as $fd) {2 b/ e, h- m6 _
  15.         //返回数据) {9 v0 W0 J8 J
  16.         $server->push($fd, $frame->data);* O7 j' s2 Y# L  [0 F* F, b
  17.     }0 b* Y% _( M; ^! n3 l

  18. % P9 B/ O' j0 ^- w% Y3 D
  19. });( ^: [: w4 ~1 P& R) [* d+ B/ G) j
  20. ( d# ^9 Q4 m$ a  x6 b
  21. $server->on('close', function ($ser, $fd) {2 d# [) Y: f+ h; E$ v
  22.     echo "用户id: {$fd} 退出\n";" M7 _1 b' Q! s4 p9 {2 H% P
  23. });
    1 m' c5 f+ x7 A- v! f& ~/ F0 b
  24. / K  l: o/ R# G$ c, a7 z
  25. $server->start();
复制代码

+ b5 `% A) w1 l$ y2 |* C( F- e& o# C+ J# y( g

( {, ~5 P# r: J# W& D3 D
6 l. B+ s. [# k/ u, H& W0 t, K% S6 g3 W
7 B% a7 N7 G- |& p+ _: J

4 B% M5 d, f- r0 p( T4 ?( U. S

  d+ P2 e7 V/ K2 e: z6 a- F3 A9 M2 c
% h- `, J! W& {  t* m9 ^
; C% h: s! r& x  X! c( W; g1 P6 ]% `. l$ q, M
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2025-2-5 19:56 , Processed in 0.111399 second(s), 21 queries .

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