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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket1 [6 a& c* |# h0 U0 l% Q
上代码
前端
观看页面
  1. <script type="text/javascript">
    4 o9 H- ^7 b1 @, A4 Q/ }
  2. var ws = new WebSocket('ws://192.168.0.150:9502');& W! ?% c$ J5 R

  3. . j! |2 p  A& C) l$ m
  4. ws.onopen = function() {6 z0 g7 f' H) M
  5.     console.log("连接成功");
    7 D5 p2 v8 K' p- j1 p9 g
  6. };
    8 e3 S* Y$ C% m4 ?' ~' q- Z
  7. ws.onmessage = function(e) {5 b4 ~# I. u3 ?" S8 i) `- l
  8.    console.log(e);
    " B; e* X% ?- _& H/ M2 J' Q

  9. 1 x% t: S( J3 s; X5 n6 E* U5 P
  10.    var data = e.data;
    . f1 ~+ s+ P" [" g: A8 X2 k9 b
  11.    document.getElementById('player').src=data;
    * d6 M/ g' g/ \
  12. };7 h# b5 v5 O. a2 Y9 ^4 S6 B  l& u
  13. ws.onerror = function() {
    * v' j, X4 d: h2 L0 O8 X
  14.     console.log("关闭连接");* ~1 b: G  H# x5 I( Z
  15. };! o. w: k7 o7 f' [4 N8 ~( t
  16. </script>
复制代码
录像页面

8 M& Z# D6 l, Q2 `. x$ X- }
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>- a% j& ^5 b' a( d) w4 f

  2. 2 p' S( b0 T( P' T8 b

  3. . C; l5 Q. Z# H* D7 x7 F3 M

  4. ! W- T; z8 p! X/ d6 P
  5. <script type="text/javascript" charset="utf-8">$ e$ m2 `. V$ i! g6 K) O& \
  6. 8 h8 v+ J4 n" p2 @

  7. + p, {0 h2 v( f* e% K" \3 Q
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');, l% ]( y; ^; R/ B2 H
  9.     //socket.send("嗨我登陆了");0 n7 Y3 S. |! ^) G/ d

  10. 2 E5 m; e, s2 F8 H8 t
  11.     var back = document.getElementById('output');' T$ R/ _. @3 @$ A' [. D1 x
  12.     var backcontext = back.getContext('2d');3 T9 H: C1 C! L. Z  ~$ l
  13.     var video = document.getElementsByTagName('video')[0];
    - f1 T. X- A2 [9 T/ E
  14.     3 \9 r0 G1 z  v) A
  15.     var success = function(stream){
    9 C" M' r# O6 A5 P
  16.         video.src = window.URL.createObjectURL(stream);
    . @' \4 B; a+ q4 W% ]7 k% B
  17.     }& N3 I2 e( x, r  j  f

  18. 4 W+ x- p" d) C4 R
  19.     socket.onopen = function(){
    0 X; a  p1 `, f6 S( C  X8 c/ c
  20.         draw();: c9 y$ ?* m: ^' \
  21.     }) s. p# ]  h8 k$ O3 f5 R
  22. . o; [  Q8 \* a2 k# W
  23.     var draw = function(){
    5 d, }# B* \- [0 f* o
  24.         try{
    1 c( l7 |( |- v1 U) d1 t+ ?. G) n
  25.             backcontext.drawImage(video,0,0, back.width, back.height);
    9 }9 `* e$ c1 Y8 X, z
  26.         }catch(e){
    , `+ K/ \8 ^7 F0 ]3 P
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {
    ( I( Y9 o1 x' i+ S1 A$ j) B( X. ~
  28.                 return setTimeout(draw, 100);  [3 v4 x. `. i$ a! P
  29.             } else {
    6 C4 a3 y# a8 R# |5 W3 R1 m
  30.                 throw e;$ b2 Z1 q: ?2 k/ I& l
  31.             }
    * @0 g! h1 L3 H3 z, _& y( `
  32.         }
    ) o; y5 {) H0 p9 i3 T1 a3 K
  33.         if(video.src){$ Z/ |3 w" N7 z  z
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));6 F" a% p4 U4 ?3 S: D
  35.         }
    ' A4 `% n% a% B0 T: _+ V5 d% Y5 v
  36.         setTimeout(draw, 100);" }: b8 G  `$ m/ a
  37.     }
    0 ?; x6 O2 U" x6 J2 y
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||+ Q6 X- V" y/ b: |8 F; d
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;
    " g; `+ C2 ?$ h2 Z$ f: {
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);: w- X/ w% r( ^& U% l, L' M% r
  41. </script>
复制代码
  1. php
    . T8 J; E2 b. j- m/ V  p  v

  2. ; w3 ~6 t8 }% W
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);) e0 }7 P4 N5 X+ T" q# A# y7 n
  4. * |% x: Y# Z3 g1 ]7 n1 G
  5. $server->on('open', function (swoole_websocket_server $server, $request) {
    5 r( a/ f& D$ y' c, @

  6. , I2 {( d' A* R. r; y5 P
  7.     echo "新用户id:{$request->fd}加入了\n";
    ) J; ~: \3 _4 \, B7 q
  8.    // echo "server: handshake success with fd{$request->fd}\n";
    " b: a" X% J/ P( C4 h7 X( g& a
  9. });
    ) i. q: J) |6 p2 Z, ~% Q) o& F1 B7 f

  10. , O( h9 N: [( o, y2 L
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {
    . ~3 P, }0 E4 ~/ l0 Y$ G

  12. 7 |* [: i8 ?+ b" Q
  13.     //循环所有数据2 [, t9 E5 J/ ^; K; s) L* }
  14.     foreach($server->connections as $fd) {/ ~& P) W( c8 o
  15.         //返回数据3 u" ?; V$ ?( X/ m
  16.         $server->push($fd, $frame->data);# {7 y3 m- o0 i# w5 F$ b
  17.     }4 r  g3 ]4 X2 a2 _7 j
  18. 9 j$ p% f  b7 L6 y, t1 @7 d
  19. });$ m5 w1 H/ h& v" g% Q1 Q

  20. , S! O0 ~' s% {4 q. w0 {
  21. $server->on('close', function ($ser, $fd) {, N( T7 B- i7 Y* `! Q
  22.     echo "用户id: {$fd} 退出\n";9 Z: b+ d* S6 L0 F
  23. });
    # R! {! ~& ]& t* p  h) I* U
  24. 4 ?) Q# z- v/ z- F# o$ L8 X9 }; L
  25. $server->start();
复制代码

& _! ?4 n7 |5 ^! a: Q' M
" P( u& n, D! |( m% \; u1 x
& H& R* c2 [# y4 g3 }  o  T) U6 |6 _% A! `3 t

2 w) C+ i4 ]0 |" x
( h0 t5 @% B3 P$ S8 c
6 W: V$ ?8 g; T7 f1 z1 H6 W5 h1 f& Y- b  `

, |% N: T2 E& x) |  z3 ]2 ^' @! m2 y$ d0 x1 M2 \$ a3 |# R5 n
, h3 Y4 u8 c" U$ K6 h

: S9 E* Q! }3 \3 O- e3 }: p
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-9-21 03:18 , Processed in 0.077144 second(s), 19 queries .

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