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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket
" J3 w" n3 ^" f6 e( s7 S6 d上代码
前端
观看页面
  1. <script type="text/javascript">
    : C% j! c2 r. m( v/ a# |$ p
  2. var ws = new WebSocket('ws://192.168.0.150:9502');
    5 k$ R/ o: h1 l, V9 i
  3. - o6 W( v8 k5 R- ~. b1 W6 r  n+ O
  4. ws.onopen = function() {
    . i: X. M5 k! X5 [3 [
  5.     console.log("连接成功");
    # Z: B. T9 ~. l; S
  6. };; ]4 I9 T: A3 v- Z
  7. ws.onmessage = function(e) {: X; s; C- P8 T& \
  8.    console.log(e);& m/ l: T2 u+ ^
  9. . I- f: w6 j8 `' y6 W
  10.    var data = e.data;
    1 |* t' q) E' Q9 ~+ g
  11.    document.getElementById('player').src=data;/ C) P2 _) k# M7 T
  12. };
    ( L. ?) C% b1 C, D# p
  13. ws.onerror = function() {7 U5 M7 t! p* m
  14.     console.log("关闭连接");
    ! \5 c/ v) @7 r# `) T% l
  15. };
    ( T* I7 [6 B$ }1 e
  16. </script>
复制代码
录像页面
+ n9 h7 M8 t6 |
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>
    & U# U' X3 {1 K$ d6 k  D  v

  2. * }3 \  F6 T: r# ~/ f
  3. & `& D7 @; Q' T7 f4 r8 k
  4. " d( k( s5 [- u; j. Y; {
  5. <script type="text/javascript" charset="utf-8">( o  L: O7 z  W7 v; L! J7 d7 g
  6. . V9 C0 X7 T$ d; S! }! ?3 G
  7. ! J  {% B8 v: W) `
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');
    8 i: q7 m3 l) {0 ?6 J
  9.     //socket.send("嗨我登陆了");
    . l+ b7 v# i# C1 @3 B7 v7 b
  10. + ]3 {( c8 S: ?. Q6 t
  11.     var back = document.getElementById('output');; N! I$ ~! E6 H7 h% m
  12.     var backcontext = back.getContext('2d');- F& |6 g" ?, _* S9 i% w* D
  13.     var video = document.getElementsByTagName('video')[0];
    , Z) d7 H  X! W! p. k3 V( A4 b
  14.     ) T) ]4 m- l: E! O$ o) t1 }
  15.     var success = function(stream){  X  M  ^7 I: @+ ?
  16.         video.src = window.URL.createObjectURL(stream);0 t- t; `4 S; r: ^
  17.     }# g7 r+ x. f0 u# h5 Y* w2 X, d/ c2 J
  18. 9 k$ A, W; O. V' x4 _
  19.     socket.onopen = function(){. x3 g5 A$ ]; F2 W5 I) h2 ]5 |
  20.         draw();
    + n0 [2 m, G( X: {# S& Q
  21.     }6 f2 V3 v. Y8 E$ G2 V$ b

  22. ) J/ k% J( i2 n1 {
  23.     var draw = function(){3 S6 w+ i* S% \
  24.         try{
    , q2 E- }! x6 _
  25.             backcontext.drawImage(video,0,0, back.width, back.height);' ?9 Y3 Z. f& r$ F; N
  26.         }catch(e){
    # b+ a& m' U/ V  J0 y
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {
    2 `% _* E+ i1 M2 h9 H2 x
  28.                 return setTimeout(draw, 100);
    ) N# ~. j* g6 E% h
  29.             } else {$ T& y7 Q5 x% Z, V; }& I
  30.                 throw e;5 ~! l) C# m. v/ L0 b
  31.             }9 n" p# d; C! g5 C+ h" \4 `+ i
  32.         }
    0 L4 H) t& p  O6 h
  33.         if(video.src){1 ]) {" ]" Z$ y5 [. F
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));: P1 q" O2 b. t7 i7 O6 r: B: Q) {# ~
  35.         }) J' Q1 j# q( S9 T
  36.         setTimeout(draw, 100);
    ) V) K5 r& P% a' ^% C- o& a
  37.     }) V6 ^. x* X6 ~7 D' W
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||( t) K/ j* D& D1 E6 M& w; O6 ?
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;
    1 O# R, |  z$ P" I# `1 o3 S
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);2 X: a2 N( b1 c
  41. </script>
复制代码
  1. php
    / B; Z# V+ [& y; M+ A

  2. : k' z$ }& J& M- V
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);
    4 e" I$ \" E8 b! H* d; D% G. g
  4. ! W5 I- i) Q2 L
  5. $server->on('open', function (swoole_websocket_server $server, $request) {  E5 o. B) {  [
  6. 1 @1 Z- l9 s5 P: f
  7.     echo "新用户id:{$request->fd}加入了\n";8 k9 r$ ^. b6 w9 l) w
  8.    // echo "server: handshake success with fd{$request->fd}\n";0 O7 l3 R0 s( h. t1 G# C" P" P( t3 Q
  9. });
    3 G' G1 u# P& x" ~! d0 ]

  10. 2 b! `: m6 D, }( @0 P+ P8 c
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {  d5 B  r: _- G# D; X5 P
  12. . W6 [! I6 X2 o7 p5 E  k
  13.     //循环所有数据
    # K7 N; B+ R0 i; Q, z
  14.     foreach($server->connections as $fd) {6 X# p$ {7 a! P* o& j, L
  15.         //返回数据
    . \' b4 T# ~& ^) l
  16.         $server->push($fd, $frame->data);
    ( W8 j0 N- M# j, g$ `7 k
  17.     }
    5 ^. s4 t; O& H* H- w, B0 j

  18. 5 |9 @1 G6 R. ^4 o' i
  19. });
    ! r- `* E% V! n4 ]/ z  ^) Z, h

  20. ( c: f$ Q: d% g# q- h
  21. $server->on('close', function ($ser, $fd) {; M5 S" ^: f& }, o$ k5 c+ I9 Q: p
  22.     echo "用户id: {$fd} 退出\n";
    " \5 C" A2 U5 r" M- T4 L7 E
  23. });, V0 \+ ~/ F( f8 g) q

  24. 4 Y) v; x  V8 Z3 |
  25. $server->start();
复制代码

2 ]1 v9 t* l# W! ]
) X8 s1 |1 f% v! f6 E% y1 _/ X8 F
$ Q5 R+ t0 b$ U6 f+ P  `" i6 v5 ]2 i

- S& {3 r/ _: r8 M
7 f- F+ \8 w, l' ^
" u  }6 {3 w% F; O; R
" ~# Y/ E. f+ I" y& T: g4 J" w3 c6 h& O+ M6 t, Z

- Q) Z. ?; S5 g& P: H- O0 M  w/ t; B, c. ~! T6 Z
1 Z% E0 t, U. D+ V# o( R  l6 ?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-1-30 14:37 , Processed in 0.052451 second(s), 20 queries .

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