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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket
3 ~  T2 J/ l. a% |, K上代码
前端
观看页面
  1. <script type="text/javascript">4 W1 j8 U5 s" k" p( J
  2. var ws = new WebSocket('ws://192.168.0.150:9502');0 H6 r7 g: F$ V8 t( Y2 J# Q  @* i
  3. 3 @6 K1 W9 V% g5 F5 J
  4. ws.onopen = function() {
    5 ~2 `2 p- r9 x0 z5 F
  5.     console.log("连接成功");2 R1 Y* q# W* B  j7 n+ H% H+ n0 ]
  6. };7 c  I/ @2 N. }( X1 W$ Y/ h: K
  7. ws.onmessage = function(e) {1 C' M" c7 z% K' z9 q7 L1 M! s
  8.    console.log(e);: v7 l1 Y3 p6 R# S, `6 Q& j

  9. $ B. e) w, e$ ^
  10.    var data = e.data;# x3 k: b* H# x  [
  11.    document.getElementById('player').src=data;0 n4 E) ]0 U5 v1 M/ T
  12. };* w7 q1 L8 `% K$ c, P! P
  13. ws.onerror = function() {
    7 }5 u$ t. A1 `; Y% n
  14.     console.log("关闭连接");7 `% T0 ~7 J9 F- R  i9 Q4 f* d$ J% q9 `
  15. };
    0 R8 U3 C/ s$ [! L
  16. </script>
复制代码
录像页面
# O: w% A; G1 [, w
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>$ c( l/ h: E3 f3 i) }$ Q0 S# y
  2. ! u3 I3 Q* x0 c- P" I1 @: U
  3. 0 A5 U1 ?3 J3 ^! N7 c
  4. ; f, X2 S8 Z( g
  5. <script type="text/javascript" charset="utf-8">
    9 W2 b) T4 W6 v$ L. V- z
  6. & U1 K/ {, E! e( Q6 I

  7. 2 a3 k1 y) P, d- X0 i
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');
    0 l( Z3 w0 ~# ?/ A: g) G3 p" W' f& b
  9.     //socket.send("嗨我登陆了");% ^( N. [1 ]3 p5 Z

  10. / r9 W& z9 [( Z! J1 ^: Q
  11.     var back = document.getElementById('output');( s' @' J0 T8 f8 K% N7 m1 a! c% g
  12.     var backcontext = back.getContext('2d');
    8 z9 E/ ?$ k) \6 T. r
  13.     var video = document.getElementsByTagName('video')[0];! u6 ~* o2 G7 U/ `( J4 E3 |
  14.    
    * E5 X# C/ P: h
  15.     var success = function(stream){
    4 r8 C; o3 O! _+ V( @: g0 h
  16.         video.src = window.URL.createObjectURL(stream);* Y! ?: U0 |4 B# |  z2 g
  17.     }  O( h  }& K# R. e7 N. R
  18. ( I% E! a! K. I+ c& a3 Q
  19.     socket.onopen = function(){$ R) H2 M4 y/ P) O. O
  20.         draw();4 `9 U+ l, p, U+ v! i- W( \* K6 g# a
  21.     }
    9 x5 }5 `# q' r$ Y( e

  22. 6 a  F: C) Q6 ^) Q, g" Y- `8 C. [1 S
  23.     var draw = function(){
    ! S8 j( |9 A4 O6 Y' _8 R
  24.         try{
    : F% e# V6 s& R: y; P
  25.             backcontext.drawImage(video,0,0, back.width, back.height);! A+ {: f7 k+ [
  26.         }catch(e){0 ]$ a/ A% ?/ N; J- \. ~0 M
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {
      v+ ^5 Y# o; @1 e7 N4 V
  28.                 return setTimeout(draw, 100);6 O0 K1 K; c4 V. ^6 n" E
  29.             } else {
    - E2 K$ b, Y2 }& _
  30.                 throw e;
    7 u: E4 c$ _1 |+ L2 @
  31.             }
    3 a. i4 o2 }$ u3 d% @
  32.         }
    ( o2 X2 C2 }. E  O
  33.         if(video.src){
    + H. C+ E! U( D
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));
    0 F5 j; v. p: Q  m7 u
  35.         }
    + g9 B" ?8 \! l0 m' |2 N+ \
  36.         setTimeout(draw, 100);
    : H- ~4 |9 c2 x8 K' c
  37.     }/ Y1 E9 O3 o8 }" U3 c0 \# y
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||
    % E6 Z  }7 r" y; V1 P& X* A
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;
    ' j- E: F/ w6 k2 {3 d7 l
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);
    $ Y" M4 x* s7 D6 k
  41. </script>
复制代码
  1. php
    0 G! U2 E+ Q; q7 L, d0 R6 o) U3 u
  2. . }- H" z& W2 u  T( p3 B9 y
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);
    : e" L# p+ Q6 c& S8 {7 q
  4. 3 Y$ J" o  O" E# s; A" k5 s
  5. $server->on('open', function (swoole_websocket_server $server, $request) {
    / J  o4 V, D" E$ B
  6. & l3 Z$ z  M) @% R8 h) t
  7.     echo "新用户id:{$request->fd}加入了\n";1 }+ W# g& v  N9 g
  8.    // echo "server: handshake success with fd{$request->fd}\n";
    1 j4 n, I/ ]' J' U# ^5 D) m" G
  9. });2 W' _( P! ]0 x* c+ B

  10. * D  G" S5 ]  y& s$ \' z  h
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {" ?0 b, H3 H- \0 m5 y' _

  12. , t* k2 B1 a7 W* |' W! x* u
  13.     //循环所有数据
    : Z0 x7 s+ b" _- a! [! k& o
  14.     foreach($server->connections as $fd) {
    3 h- x6 h8 p2 Z7 x
  15.         //返回数据
    / u% ~. X3 C6 b
  16.         $server->push($fd, $frame->data);
    ) D  g( b1 K0 x2 _8 Z4 h
  17.     }' I0 H: K! {* o# _! a" n0 g

  18. " r# H- S5 l. Y6 q
  19. });1 W" q% f* C+ v8 ~: G
  20. 5 R8 J- A0 H% ?3 k
  21. $server->on('close', function ($ser, $fd) {
    ) ~' G2 w, m1 c, O8 B
  22.     echo "用户id: {$fd} 退出\n";
    & S  q% _$ z" Y/ c4 Z) {
  23. });- P, F2 [6 w7 v1 ^' ?  |& K* E0 H
  24. % Y: i5 k4 N2 t  B4 ~5 l. [% J
  25. $server->start();
复制代码
% k5 h* ~0 p8 \

2 m; k8 N1 W: v  |& i
! a4 \& [4 N4 C$ p2 v6 \% ^8 ?6 J  F; R& P

' J5 Q1 M6 z: S% _# K* R6 {" Q
+ a' y* j* y7 |
0 e- k: [6 J1 u6 k1 g9 S6 G' C  g) y1 G2 t/ Y$ g

) e" g" w2 o1 w4 M
  _2 f1 r! @# V; v( d+ D" B) y2 Y' m& E' T5 t

& R$ c2 [5 u1 G* Z. J  L& `' @! o( k
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-4 10:59 , Processed in 0.074881 second(s), 19 queries .

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