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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket
' ~5 Z0 t/ p8 h5 c8 B3 Y: y0 p上代码
前端
观看页面
  1. <script type="text/javascript">. I6 J" t5 l  a
  2. var ws = new WebSocket('ws://192.168.0.150:9502');
    & L) _: u4 s; @: r/ s
  3. : l* N  n! m8 H
  4. ws.onopen = function() {
    3 K4 j& T) E/ ^8 N$ G- ?- q
  5.     console.log("连接成功");
    3 |2 `  j5 ?: d" x* A: W$ q
  6. };
      \+ U; ^- C7 O+ ^
  7. ws.onmessage = function(e) {
    2 G# W: R8 L% W1 B
  8.    console.log(e);
    # o7 ^* G& _/ M& k1 L
  9. ! V6 B) D& H8 r! A& U
  10.    var data = e.data;+ X; L& C' w3 X  ?! k7 D7 Z& j
  11.    document.getElementById('player').src=data;1 F! ~, k' w6 d3 [: b9 O4 A
  12. };
    1 c! w" W' q8 L* Z0 i0 t1 L7 x
  13. ws.onerror = function() {
    $ n* U2 H! O; T8 w3 \3 s" _! t
  14.     console.log("关闭连接");
    - o9 A! S4 Y8 i4 ?( ~  M
  15. };
    6 U# Z( N- T1 Y! C6 V
  16. </script>
复制代码
录像页面
: u+ |. b, p0 u" c# e4 J/ Z. T
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>! z( u* A6 t: J) F

  2. - V) K6 k# r) y* F3 Z  ~/ j) G. V3 R

  3. 6 F+ S5 i& h1 b! `6 K: D
  4. 7 w8 G& |" [1 A1 c* |' v8 \& x, h
  5. <script type="text/javascript" charset="utf-8">  \  ~+ r1 @# G1 x

  6. , i1 L. n: {( _' V- M: Q

  7. / t; u3 p# y( r+ r! q
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');
    / k. @8 ?1 C! b
  9.     //socket.send("嗨我登陆了");. p  b2 d4 Y* `5 q0 D; h, H
  10. " d  e# ~* [' B! ~( @- E- j7 t9 n# w  k5 V
  11.     var back = document.getElementById('output');
    " \( X2 e3 P! s& |( H9 D
  12.     var backcontext = back.getContext('2d');; {3 J- S* H. _2 d* {& Z
  13.     var video = document.getElementsByTagName('video')[0];6 h6 i; t' K  W$ \
  14.     " x; V* b) j% m
  15.     var success = function(stream){; s# C" V$ u3 G# B
  16.         video.src = window.URL.createObjectURL(stream);3 _5 s; o7 s  S: X
  17.     }
    % g9 |9 m. E! a& e$ k3 Z/ U" Y. |+ R
  18. 9 H; O; }7 T" I' m. J
  19.     socket.onopen = function(){
    4 c0 V: K2 M6 Z$ o
  20.         draw();
    2 Q+ S$ r3 f0 v& Z
  21.     }; j) ~# u; o6 T, X2 M

  22. " s( E. x* T! e( n& ?* X( e! N5 M
  23.     var draw = function(){* M- H0 @. {4 N/ N
  24.         try{
    8 U; ]  i+ m" M
  25.             backcontext.drawImage(video,0,0, back.width, back.height);5 F2 p% m! P# K% [8 f8 d1 g
  26.         }catch(e){
    6 A7 ]5 |5 g& q
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {* Y0 ?* z0 Y- A8 N, Q4 w9 M( B
  28.                 return setTimeout(draw, 100);
    3 k% Q  |0 |) j% j
  29.             } else {
    9 U" }5 h: w: I0 t5 z. K- L
  30.                 throw e;8 V5 L7 c! V5 Y# ]% s# z( |
  31.             }
    - @2 q1 l# E6 G4 G
  32.         }. v4 L. s; _* b* G- H* K
  33.         if(video.src){
    ; S( E5 g0 [! v  g1 }% H/ \
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));
    % `$ N6 e$ H" a$ n) g; M
  35.         }& O; T6 T8 u' \$ I1 ^
  36.         setTimeout(draw, 100);
    , @6 H1 R" {/ X4 i) @
  37.     }1 ~/ |$ C0 z. k( d9 @7 [
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||8 C# K8 N2 }& t  e5 S% K
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;4 ]4 `8 B0 b8 z8 d- w% _6 k8 n
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);
    6 Z- Y7 W% C% E4 I  {
  41. </script>
复制代码
  1. php. S9 T7 V" X; Q% p% |

  2. ; G6 h8 Q4 F4 M! N; q
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);
    6 U! k1 X0 B9 x8 w* H  s- p+ ]" _3 i

  4. 3 `7 j% [( W' V) I
  5. $server->on('open', function (swoole_websocket_server $server, $request) {
    . ]+ t# F4 Y/ I7 R3 L# n
  6. 4 R  G+ d' G) z1 \0 C
  7.     echo "新用户id:{$request->fd}加入了\n";" h9 M$ J) I( q7 Q& d. I& D% ~/ y
  8.    // echo "server: handshake success with fd{$request->fd}\n";
    5 L: O9 ^$ O6 \' O  D
  9. });
    3 v7 |4 ^/ \( g( a& s1 y
  10. 7 C! z' ^8 {. H$ t& Z, `
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {+ w4 O, w$ z& ^. }
  12. 4 D% G1 T! s" o3 @1 }
  13.     //循环所有数据
    . W* v  |7 x# `. g8 E5 W
  14.     foreach($server->connections as $fd) {
    4 D% p7 i# `# F
  15.         //返回数据! P$ [8 |9 |0 T6 \+ f
  16.         $server->push($fd, $frame->data);) N8 d% ^& @/ H% L
  17.     }3 u) C# {1 g+ f- @# ]2 ]( D" Y

  18. 0 D* m7 J' E% d" J
  19. });
    8 ^) N# u  G, x9 ~) i
  20. , K) V# V. U1 Q0 [* d7 A# l  ]
  21. $server->on('close', function ($ser, $fd) {# [. ^* G) m6 `3 J1 r; Q/ \( {* w
  22.     echo "用户id: {$fd} 退出\n";
    8 G7 m+ J6 ~7 }# W. B  C
  23. });
    : Q0 t" C. V0 k. Q% ~- L$ `

  24. 0 Z9 m3 Z6 \+ Y6 Y; ?$ c
  25. $server->start();
复制代码

  r# V8 K$ G  W/ n3 x6 n, j: W7 }7 @' `6 I4 v8 G

1 z5 v/ J+ I. }8 i; T4 S6 p) A; B! J) H

" \- N, ^* {# E( ~6 ]  p
5 [) S$ N& H8 ?$ i4 x* W
3 X% H: |: Z1 u, E9 V4 R, O5 f! b

7 X$ H, }3 g: u: b. o; z' g* O! z8 b: q0 A5 M3 `) V
+ P$ g( D4 S: K+ p; F

7 o% ^4 `0 u: J2 ]" j
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-2 22:33 , Processed in 0.127468 second(s), 19 queries .

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