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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket
! ^1 m* t: p. s" u% v上代码
前端
观看页面
  1. <script type="text/javascript">8 J, L9 ~& ]' ?, S6 [9 j
  2. var ws = new WebSocket('ws://192.168.0.150:9502');7 W& z0 \  w. h& j' S! h

  3.   @% @9 O9 y& s
  4. ws.onopen = function() {" _- Y+ r3 Z( }
  5.     console.log("连接成功");2 Z" d' ~# c9 G& \
  6. };, R, c% B) k* M! e# P5 v0 j
  7. ws.onmessage = function(e) {
    2 t& x7 \) v+ L5 b8 N7 D
  8.    console.log(e);
    + E  Q# i0 k& ~4 Z& W. k% Z

  9. ! m' \6 O/ b, G
  10.    var data = e.data;
    . f9 \8 x' w3 o
  11.    document.getElementById('player').src=data;, t3 e& ^; M! l/ ]6 q
  12. };: ^, Z! @. j3 `$ f8 y1 w
  13. ws.onerror = function() {
    : U4 g3 H7 g. Y( p) @2 U1 t
  14.     console.log("关闭连接");1 F1 V  x+ w5 f8 s6 B
  15. };
    * V0 Z9 b( i& M8 O" _
  16. </script>
复制代码
录像页面
8 f+ W1 b* w8 y+ h8 o
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>
    2 Y3 L) ]' |- Y9 m" n
  2. * [3 a# k9 D+ W9 l$ p' ~
  3. ) m8 w8 A. Y' f$ g& B

  4. . H  K+ ?! W  H& F  w5 V
  5. <script type="text/javascript" charset="utf-8">. F( z+ j; Q; @  u2 t2 f" T
  6. 9 B* D) Q. F5 ~

  7. 9 g; ]* d$ G! q. P$ J# J; O
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');
    0 T+ {; ^9 L! u3 Z
  9.     //socket.send("嗨我登陆了");
    & f  |% l3 K4 Y# R
  10. ) p/ e" X# a% R
  11.     var back = document.getElementById('output');
    + {* [6 B5 H  R: X) n
  12.     var backcontext = back.getContext('2d');
    - j2 A4 j  M; h" M) j
  13.     var video = document.getElementsByTagName('video')[0];' |8 c# o" T1 {
  14.     / B* n% R2 G2 S; n. A7 Q) X
  15.     var success = function(stream){
    : }7 _, `1 j& w' i7 i
  16.         video.src = window.URL.createObjectURL(stream);
    ; ?* A9 O% C7 d, ]* h2 O( E' S
  17.     }
    - [+ M8 ~, |+ l

  18. $ Y' G1 n1 x- K% z% H. @3 P
  19.     socket.onopen = function(){
    & p- Q( X! I* S8 `$ V. S- b  l
  20.         draw();) \2 G" D' ?# Y; U8 `
  21.     }
    4 \! W( |+ R& }" Y1 X
  22. 1 Z9 k6 ^: e+ ~  x+ M$ J
  23.     var draw = function(){
    6 ^# j0 h( M. _
  24.         try{
    5 M( b- a: X" b! p
  25.             backcontext.drawImage(video,0,0, back.width, back.height);3 E2 G; t( I9 w3 D  N* A6 e, P4 P
  26.         }catch(e){# b5 k: }% a* b  b- F' j
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {- q" K  j. g) [6 j( `7 ~
  28.                 return setTimeout(draw, 100);
    : j5 W0 d# t+ ~3 q7 A6 t. r
  29.             } else {
    0 \% O( y- a7 H5 s
  30.                 throw e;
    % `5 z1 r* z! f) `/ H( W
  31.             }3 W8 e  S8 U+ }7 Q
  32.         }
    6 `/ t7 s+ G& H* K: e
  33.         if(video.src){
    * M+ ^# K9 D" x3 i( K' Q8 m
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));' e8 O$ h# j; F5 O2 q
  35.         }
    8 z. R' p0 t9 j" w
  36.         setTimeout(draw, 100);! ~. {! s, H- l
  37.     }: y% B' |3 ]: q4 P. }: d& y% G8 V) g+ h
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||7 J3 A& K9 b6 K- F9 E4 P3 h- Z
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;
    7 z% y2 [  y0 ^1 ?5 P
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);
    8 f( R6 O  {/ \& u  k) u5 h! h
  41. </script>
复制代码
  1. php" l8 k% ]) {5 o
  2. : q& ?4 M! D. p
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);
    - D# t. j' w+ _& @# k5 s- C. C
  4. / S; R/ t& x) f) ^# w
  5. $server->on('open', function (swoole_websocket_server $server, $request) {
    / j( |9 u2 s3 K6 W! n
  6. * Q* E" w- Y1 |, n& `
  7.     echo "新用户id:{$request->fd}加入了\n";
    7 b1 p5 K$ V8 s, m1 r' @. j
  8.    // echo "server: handshake success with fd{$request->fd}\n";
      Y2 V# B1 ^3 {3 g  e6 ?' {
  9. });
    1 `9 a+ W% O/ U! u, X+ F, p

  10. . e3 u2 g7 ?* O' L  i5 g( J6 e3 h; y
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {' W9 ~1 l) \2 r$ x: @1 j* t2 u

  12. " w. H4 t, Z+ A/ Z/ W1 d) k  L7 ~
  13.     //循环所有数据. H" m* G* X/ a; a8 f
  14.     foreach($server->connections as $fd) {! n2 J" z! w8 y3 T
  15.         //返回数据
    ! Z2 u8 y# F7 S) [0 F$ Y
  16.         $server->push($fd, $frame->data);
    ) q& q- X( j9 [+ X! {9 B( A
  17.     }. W; o3 U% ^9 }9 L4 k, B$ q" y" A
  18. 9 t* O% n- Y* b1 c  e
  19. });" l; h, m: e6 I

  20.   ]3 z" u+ c5 J3 C9 a
  21. $server->on('close', function ($ser, $fd) {
    % `8 a* v' d+ u
  22.     echo "用户id: {$fd} 退出\n";: {0 V/ z& V4 W. G- @  H
  23. });: C$ v3 B  z: e. ^% m4 w# n

  24. , W: j0 b, b: y8 \& H
  25. $server->start();
复制代码
6 c; I/ O/ J3 L- y8 E/ |) L% J) p

! P' j" U0 L4 `# ?* k: ]# e0 Z1 b, `& t7 z0 k  h9 `! q
; ^! H( Y: j. d& e; B; n

1 `; P1 M1 V# U, I/ R& L- q) J$ q' x0 M" T! d! D  d

! q& W6 B% k' e7 w: G
( ~6 \$ Q2 j$ H* J) z& }+ F! h/ g' z1 t$ ]2 @7 X+ D3 O5 F
* j* c% H3 M" w4 f# }

! a- G" D/ u. F" V" ~* S# Y* T  j2 T) h6 s- w
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 09:42 , Processed in 0.134978 second(s), 19 queries .

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