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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket
/ M( u1 A! w9 Y& z, \4 u上代码
前端
观看页面
  1. <script type="text/javascript">6 Z. f: S/ u2 {: y' `5 O
  2. var ws = new WebSocket('ws://192.168.0.150:9502');+ j+ T3 m* H  q. E1 G: \* D

  3. - @( c0 L/ W, }. F9 ?4 M* E
  4. ws.onopen = function() {
    , `# z) E5 `1 }; |" W  @
  5.     console.log("连接成功");
    6 r$ m% H) M7 ~' i2 X3 I' e
  6. };
      b( ~  s& J& `0 w8 R$ Y
  7. ws.onmessage = function(e) {5 L8 C! b# e3 O  G+ r
  8.    console.log(e);
    4 E7 C$ V- }6 Y$ q: \
  9. 1 r! e5 p" z) b. w- O9 T
  10.    var data = e.data;
    & p+ r$ G* t% n" X8 T0 v
  11.    document.getElementById('player').src=data;
    2 {+ ]+ P, ]6 q: t; N# G& x
  12. };
    3 f" h# E1 p( p
  13. ws.onerror = function() {) v# V9 l8 ~# K: A: f- l
  14.     console.log("关闭连接");, }" P( y7 f4 o" b% Q+ ?$ O
  15. };
    4 {$ D+ i5 M& M. `% x
  16. </script>
复制代码
录像页面

  m6 ?( T- ~+ D# `5 m# ~
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>
    3 H- w9 l$ k& i* f0 F

  2. : x1 _  Q. X! |$ A" l6 }
  3. , R  F9 `8 S2 J

  4. 5 i5 P/ a: T* h
  5. <script type="text/javascript" charset="utf-8">! A( W) `2 X4 \
  6. ! ]; f5 X* l$ q' ^' k8 \2 y
  7. 7 ]$ U% I; J6 \% P- y. A
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');
    0 _, g9 K! y; {1 l5 A$ y9 E5 n
  9.     //socket.send("嗨我登陆了");
    8 U2 M# }8 K+ i1 {4 a. q, b, E

  10. 8 F4 ?1 S* p. z+ G) Q
  11.     var back = document.getElementById('output');$ c& k: I6 Q8 E8 y# l
  12.     var backcontext = back.getContext('2d');
    & q7 z( r( M: }4 Q  B4 L' a1 h0 ?
  13.     var video = document.getElementsByTagName('video')[0];
    8 n7 R  q6 b! t7 S
  14.    
    ! Z7 r" d" U+ v
  15.     var success = function(stream){
    % p& M4 k8 @+ L: {' m
  16.         video.src = window.URL.createObjectURL(stream);
    9 B7 w! l/ C: c7 Z* I
  17.     }* k" j. S8 P. i1 T6 V
  18. ( L/ q: d2 [2 M" [" m  w$ C, k
  19.     socket.onopen = function(){( ?3 i' _, q" G9 C; B2 I. E/ f
  20.         draw();* D; _0 d& {+ a4 k3 p7 I' _8 z
  21.     }
    3 c8 [4 J' h' l9 ]) v+ U
  22. 3 ]9 p) p4 Y9 E, m
  23.     var draw = function(){
    # y( ?+ ]" T2 b! w' m' n
  24.         try{  t8 N9 ]7 M% v
  25.             backcontext.drawImage(video,0,0, back.width, back.height);' ]2 D! ~4 B# I, B& t9 u" L
  26.         }catch(e){
    : {6 \' C8 z2 {0 s: [* P
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {1 a" ?* t# t$ A0 D1 T6 {
  28.                 return setTimeout(draw, 100);. \* b6 T& I) |! {; V7 [
  29.             } else {5 w% a8 G; x. _- Z5 C; v3 c
  30.                 throw e;
    4 f' F9 g" ^" ~0 q% K
  31.             }" N. V: n3 _- T7 G' F* Q
  32.         }$ }. B  j9 a$ s# b  `
  33.         if(video.src){! W! g; i( G# \9 g$ R; S% ^
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));* S0 m. I6 C1 o) Q1 E/ D
  35.         }
    # B6 j& p$ _. q' T) |
  36.         setTimeout(draw, 100);
    % O- V3 f, m1 y2 C0 k
  37.     }$ N6 L6 K: [$ \' ^
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||& ~3 ?/ I6 M) [7 w& \9 H
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;
    : N' H9 ?/ l/ Q1 W
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);
    & T3 V# V# @0 D
  41. </script>
复制代码
  1. php2 G1 H/ s& H0 G
  2. / o# j$ p. d0 a  t# p5 O& Y. V: N
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);
    " ^" z5 E3 p( Z# g1 Y
  4. ) R( s& m( j. B/ z# q' q1 \
  5. $server->on('open', function (swoole_websocket_server $server, $request) {, k4 p# B8 O; _2 @7 J0 S1 b

  6. . N' y' h6 A" @+ V# [+ t5 {
  7.     echo "新用户id:{$request->fd}加入了\n";9 `3 N3 B+ S+ H! ~4 H* n8 n7 l/ e
  8.    // echo "server: handshake success with fd{$request->fd}\n";/ T; C$ }1 o2 R( r* i/ M* B
  9. });
    - z1 I6 [9 M/ o2 j: a

  10. " P# a1 L9 }* ~8 |5 V
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {+ |# t4 n5 v' `0 {% ^1 X8 U# w

  12. 8 q! y# M/ n1 ^$ e" i
  13.     //循环所有数据: v& H, f: s: j$ ?
  14.     foreach($server->connections as $fd) {
    # O8 X# J) o/ [) v) B
  15.         //返回数据
    0 q" b# p- m8 @8 p: Q
  16.         $server->push($fd, $frame->data);: g( V0 g1 ?+ j
  17.     }
    % L) n% k& r& z
  18. " U/ D5 ]- _; k/ \* e( {
  19. });. }6 Q2 P+ I. s, h
  20. + m2 J# ?) v2 ~: [4 W
  21. $server->on('close', function ($ser, $fd) {! f2 s3 D' W3 ^# b/ L( ]
  22.     echo "用户id: {$fd} 退出\n";; i6 o" [; T/ G; L7 M
  23. });
    + X, P! G6 m1 ]' N7 t" x

  24. 3 ]  L  v7 r9 {: M( ~9 C
  25. $server->start();
复制代码
  b8 E3 Q+ g! Z) X& f# P  a* Q

9 J+ h- W; J' u3 O8 x4 G) ?% r  l! I
" X* ]0 v4 ?9 w# h9 s
8 `8 s, f' p) C( d9 [. }
9 j6 R9 ?$ ]* U

! ~3 Z$ S# L9 }! G/ H6 h; V1 v6 J+ Q/ W
) [0 p. J5 c$ `3 k! E

% l3 E6 C9 v( k. w& C5 n( L$ T  p' @( l& L: B
! F9 m2 A3 `" c$ v
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-6-18 21:08 , Processed in 0.148703 second(s), 22 queries .

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