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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket/ O5 E4 J+ q" a$ e  P) R4 [  ?
上代码
前端
观看页面
  1. <script type="text/javascript">5 @* \! _; V8 Z# \6 E, C
  2. var ws = new WebSocket('ws://192.168.0.150:9502');! u7 g$ [& y/ p! Z* W, _
  3. " a! M4 B% K+ L! ?8 T
  4. ws.onopen = function() {# S8 j. G6 X  m( ]: }8 V& q9 j
  5.     console.log("连接成功");
    # i; _+ B# X, u% \; T
  6. };/ @2 W6 j" r( C9 x  X
  7. ws.onmessage = function(e) {! W7 H6 [/ h0 W* l! l3 c! @; ]
  8.    console.log(e);
    $ j9 b% i0 I1 r
  9. + C7 f; {! c# @  G5 w, }; G( O( P
  10.    var data = e.data;' L0 c) W- H8 v, S1 W& L, e2 z/ D
  11.    document.getElementById('player').src=data;
    , L$ x+ N. h, e. c- f
  12. };# c) k: Z& R, M$ m. U& h
  13. ws.onerror = function() {* j! B( [2 `: G
  14.     console.log("关闭连接");
    , E5 ?7 E# B+ K9 ~' a
  15. };: s6 a, Z( g( V( U# Z
  16. </script>
复制代码
录像页面
$ o- `0 R" O# A# z* f$ K
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>* W- Y) x- o8 `1 N1 {) z" E
  2. * d6 i4 Q4 }% ]0 |( C

  3. " B9 l& Y3 Y6 F. }+ _

  4. . `) `6 @  t/ [: ~: Q4 Z* M
  5. <script type="text/javascript" charset="utf-8">
    + [8 e( }4 v' b* s

  6. $ y$ g0 p6 F/ U+ [

  7. 3 w/ n: V) E, u4 O, l; e! P
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');) X! Q$ B7 E4 \3 z  l9 Z; i
  9.     //socket.send("嗨我登陆了");
    ! \4 g. i; f+ H& A* q
  10. ( k# Q/ y& i5 M' d- a" e
  11.     var back = document.getElementById('output');9 u9 E9 |& C4 O0 A1 ], F
  12.     var backcontext = back.getContext('2d');
    3 t% R' ~5 t) w5 b+ q! r
  13.     var video = document.getElementsByTagName('video')[0];
    ' M$ n  d! {8 z6 k9 w
  14.     # l/ m4 n% w' |: ^$ U, A: b
  15.     var success = function(stream){2 P) [8 D8 i: o" Z. U4 G: H
  16.         video.src = window.URL.createObjectURL(stream);' r' ~& E) Z  S% C
  17.     }
    - M- x( B! P9 f/ ?* C2 m
  18. 9 U$ K8 [, f5 O* f2 b! r
  19.     socket.onopen = function(){$ ]( @4 e% H. @
  20.         draw();
    ! s' N  Y& V0 k$ x/ V0 j
  21.     }# m* a  M! W& q5 C
  22. / ]& k* i* E! q7 T$ \
  23.     var draw = function(){
    ' B& L2 S+ c7 o+ v0 f1 V' y! n6 N7 s
  24.         try{) {: r' W  o$ w3 i
  25.             backcontext.drawImage(video,0,0, back.width, back.height);
    * \) r$ R3 L; B( K" m
  26.         }catch(e){
    % C% q/ o) s$ I1 a1 y
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {
    2 I* O2 p* x$ v. G$ k* B' {
  28.                 return setTimeout(draw, 100);
    5 B: w% [8 `" y2 Q  U
  29.             } else {
    ' D& a/ m  h' m1 [4 o3 _' m4 f4 g& t
  30.                 throw e;5 P  C( Q& o, \* @" d4 K0 [0 e
  31.             }5 g$ ]) H9 N. w* B. l. u& M# S
  32.         }# \" E( ]- y) `5 X
  33.         if(video.src){7 Z, f: F& Q" h8 m& P
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));
    ( U5 ?- E% h, @& S
  35.         }# |: L* N  Q! R4 M! e1 R
  36.         setTimeout(draw, 100);: f; R/ p/ [- g" w  C: W
  37.     }
    ' f2 K1 b1 |* _9 M
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||
    2 A0 ^/ a- y7 S! `. G
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;# y! J' b. i! J  l  R
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);
    . @( y+ k! T2 a1 m( D# j
  41. </script>
复制代码
  1. php4 O, e. g) r1 \$ z4 w$ C% G

  2. $ t1 c! \" x9 H. I1 q* B
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);
    . @/ m# f* t$ |2 j$ U

  4. 9 z- a6 R2 J& Q
  5. $server->on('open', function (swoole_websocket_server $server, $request) {
    " `# M1 e$ x7 l9 v; `& [

  6. / ~; j) D: F% C+ B' v5 P
  7.     echo "新用户id:{$request->fd}加入了\n";
    8 P" Z7 ]1 x0 i* \; l! m1 ]
  8.    // echo "server: handshake success with fd{$request->fd}\n";5 U9 b! ]5 _+ a6 j3 ?; N5 y5 I
  9. });
    7 c9 p5 ~; K' k* Z6 p- {- }, o7 `

  10. ; b- s+ `* N, ]; k6 C
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {+ q2 C6 u  t' p  e. v1 r5 K

  12. ( L6 u9 n+ c; [3 X# N0 N$ `
  13.     //循环所有数据
    ' @' m2 l! a" f
  14.     foreach($server->connections as $fd) {  `, M7 t* j! \% O: a
  15.         //返回数据1 }+ o0 O: |% v/ _* P$ o) c% a
  16.         $server->push($fd, $frame->data);
    5 ?( N4 p# c0 d% T
  17.     }
    $ U4 F% r! W  z  S! ^2 w
  18. ' J! o3 ?- D% e5 Y5 C1 N5 j
  19. });
    3 z- y' }  e  B. \8 t; i- F! _

  20. 4 I" e% M; {& V5 C4 u
  21. $server->on('close', function ($ser, $fd) {" A) j2 ?- |% ?" P! \3 ]8 s
  22.     echo "用户id: {$fd} 退出\n";$ N' F# j, [( F6 v
  23. });. @) e& u# z2 y. z3 @8 q) Q

  24. 6 f2 S* U' X: S$ ^
  25. $server->start();
复制代码

( c: m# R( A# Q1 }: g0 `5 u# ]1 T$ ?, m3 }4 {
- Q9 ~: C8 Y, `
2 [& f) k" P, Z" M) i/ p1 s! C( j6 h

! N; F( G7 ?8 o4 N* M# x( h1 i+ N5 v; E' H8 k8 n8 Y$ Z. v" R

) ?# r# B2 G: d' V! F1 y/ X6 c0 k

3 n4 G7 v; F1 g- `( g, A; Z
: k+ ^5 C0 W1 K
1 a: ^' t2 e& I4 D2 V0 N% H8 n% w7 F0 N1 x. w. n  v
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-8 19:03 , Processed in 0.127151 second(s), 19 queries .

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