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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket  B8 K- k3 y- Y7 T3 ^0 \
上代码
前端
观看页面
  1. <script type="text/javascript">0 l" A( T: ^9 I
  2. var ws = new WebSocket('ws://192.168.0.150:9502');  V( f0 `6 b8 R% O" R

  3. + w$ O: L+ T) B% Y: e
  4. ws.onopen = function() {
    ( y& D5 `8 Z. R' F/ j8 Z
  5.     console.log("连接成功");
    2 r: \6 c: Z  g( U- N5 j% E
  6. };/ Z4 W9 O( }; H  Z! s( m
  7. ws.onmessage = function(e) {
    9 q& k9 \, E' d$ D6 \
  8.    console.log(e);$ z, E8 I5 |5 U7 [% I
  9. 8 H3 N& B3 ~: c0 l7 ~
  10.    var data = e.data;3 D# G+ \& E4 h+ I# O) u
  11.    document.getElementById('player').src=data;
    + n, L2 B6 E( C9 h
  12. };$ M) T- b9 ?) A5 {/ G
  13. ws.onerror = function() {8 m  C+ U3 `7 T% @9 Q
  14.     console.log("关闭连接");" t0 ]& ~, I& x
  15. };
    - h# E" D8 R4 r5 ^- A
  16. </script>
复制代码
录像页面
, T2 [) I2 e( c; L( N# `
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>$ ~1 I/ k/ H0 ^& ^* r! L

  2. " P5 Y% z* c- ^: f& H9 {
  3. % f! R/ p: v# Z% O
  4. & a6 H7 E6 [( X8 }! Y
  5. <script type="text/javascript" charset="utf-8">- b+ Q! z' t0 L4 m$ Y

  6. 5 W* f2 e5 o0 z

  7. 7 w4 s, T: E* i2 S. G8 v
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');0 [6 @. ]7 X3 u# g$ q0 D. `+ }" l
  9.     //socket.send("嗨我登陆了");
    : h  b+ J; v( |- t+ m+ X

  10. 4 K! l8 K9 `, \, u
  11.     var back = document.getElementById('output');* W8 p4 ]% i: r
  12.     var backcontext = back.getContext('2d');9 m9 ~5 V4 X6 r: K
  13.     var video = document.getElementsByTagName('video')[0];
    & W' E3 ^$ Z. Y0 b
  14.     * X. ^0 U( \  ^9 H' Z. [' B' Y2 d
  15.     var success = function(stream){. p, }$ D. [' d  w: i% L7 G
  16.         video.src = window.URL.createObjectURL(stream);
    1 d$ s# V7 M* ?' S/ s
  17.     }: O' I4 S8 A4 t3 F% e" l7 q

  18. ; `" b2 }& E0 K( C
  19.     socket.onopen = function(){
    ( |  W2 R) h& ~7 R3 O+ k
  20.         draw();, ~$ [; h4 a  \/ M( e
  21.     }, S5 _+ J# X6 \7 b

  22. ; A0 ]. C2 K; b4 Z2 D' {
  23.     var draw = function(){/ Z2 x: I1 W8 e$ D* I- C0 r: X
  24.         try{
    ! Q* t! j0 t. m) ]
  25.             backcontext.drawImage(video,0,0, back.width, back.height);, d; \' S1 z7 ^3 z$ e! h" F
  26.         }catch(e){
    ' x5 q) V" q3 b  n1 A. p; X* n
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {) a/ }* w& U. j; ~* a! g
  28.                 return setTimeout(draw, 100);/ Z  H  l$ a) J
  29.             } else {% O- d2 p# P6 r
  30.                 throw e;) W# g- ?2 L; u& W) R
  31.             }8 V  B; h* z8 Q+ b6 n. u- p  b2 w
  32.         }( y, P. v* S5 |8 }. w; W( A# g
  33.         if(video.src){* J# [5 p8 y+ p' C; F
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));/ d0 B9 |" I, J" i
  35.         }
    % M* g9 o" M1 |0 B1 x3 q& f( B
  36.         setTimeout(draw, 100);* U7 o6 j% O, x/ |4 x. l. u( G6 P8 w
  37.     }
    / q* ^) v/ t/ o5 r' A0 w* o
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||
    : J2 _3 C: U4 Q$ s+ Y
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;
    - J! M0 s, d0 N, p
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);, G' R$ i+ R  e
  41. </script>
复制代码
  1. php& O1 @- g: a# p" h3 @( i, ]2 [' ]
  2. 5 N) i  C& {. ~* r. W! |/ Z% U8 y
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);
    2 ], D% Z8 W# {
  4. 8 s! D  H# t) @) b. N. J& W
  5. $server->on('open', function (swoole_websocket_server $server, $request) {1 }  ^% t; t* L
  6. " ]$ V& ~6 A1 u
  7.     echo "新用户id:{$request->fd}加入了\n";5 S6 h" x1 M5 K/ b7 R" k
  8.    // echo "server: handshake success with fd{$request->fd}\n";# z3 X1 S# c( x+ u
  9. });$ o. j- h! X5 S4 V& y* n  t

  10. 2 j0 V% O! U% k1 e5 ?, ?1 B
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {
    3 Q9 @0 ?( U1 \/ O2 k6 \6 U

  12. " x1 |2 I3 n6 ]! a: g0 h7 G$ G
  13.     //循环所有数据7 O5 }/ t( c7 a! y- @
  14.     foreach($server->connections as $fd) {
    * |5 e( i+ J- p7 B( a$ R! j
  15.         //返回数据* \  O. d$ L8 f" A& M! F# P6 e
  16.         $server->push($fd, $frame->data);7 V) C" Y9 Y9 M4 J" ?9 T2 C) k
  17.     }
    * o+ A) {3 G7 @0 m7 z9 q

  18. $ _, e! G! l; P0 Y/ Z
  19. });
    5 x& L3 W. b# d9 w  e* P2 x1 t

  20. 0 j2 r% k: M' l
  21. $server->on('close', function ($ser, $fd) {1 i1 V$ D  e7 V8 \0 @: j
  22.     echo "用户id: {$fd} 退出\n";, \3 i0 h5 y9 S( R1 h+ q! _# H# M
  23. });0 N* ~, _# j& y$ Y5 J& t

  24. 1 F1 ^  c2 f+ c) Y* A+ r
  25. $server->start();
复制代码
6 q  z& ]/ |6 ~3 e9 U! T

! t% G; }% M) }
) w" C: V, a; [5 [/ Y/ k  B  n
5 Q6 O" E; ~6 E# V& G! }
: i4 B% T8 D+ ~+ J- x5 l' k2 E( F; P3 [

& a% N( M9 B( f8 c. q  |! x
3 A/ E( S/ Z* [
8 v: l/ @$ ]( o* V0 c) ]+ @# }7 Y; \+ C3 n1 t! c5 t; i

: z/ I/ l4 p; C8 M# H7 G, n# {# f+ V3 U. {7 F4 y# U
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-5-2 13:34 , Processed in 0.058118 second(s), 20 queries .

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