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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket! k: L0 l0 Q; w" E4 s7 B
上代码
前端
观看页面
  1. <script type="text/javascript">0 h* C3 B, T: s3 t' i
  2. var ws = new WebSocket('ws://192.168.0.150:9502');
    ; `/ t0 }9 I/ n/ ~! P1 G& |
  3. . D  Z( U6 ]- j: h# ]
  4. ws.onopen = function() {
    5 D, d; i" m5 y! T* c+ M7 }) @6 r
  5.     console.log("连接成功");
    3 K# K- c2 L. \  a. L- Z7 t
  6. };
    ( C# q4 c5 k) c. \: a6 q1 u" _% O
  7. ws.onmessage = function(e) {
    5 O9 ]9 F( e3 I) Y
  8.    console.log(e);
    4 i: p/ ~, p7 c2 v7 g

  9. & i1 O8 |5 X! G" n
  10.    var data = e.data;
    8 {4 q7 i# P5 K' x9 S3 K
  11.    document.getElementById('player').src=data;
    $ _7 K  n  r3 d
  12. };: x0 W2 }7 m$ e4 s
  13. ws.onerror = function() {% x: [1 I5 t4 ^) z% C$ L
  14.     console.log("关闭连接");
    " y: Q: r* J+ b
  15. };
    $ A2 Q( X% n, v! N) R" _
  16. </script>
复制代码
录像页面
6 Z/ g/ m; G6 {7 \
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>
    - |" L) c& j( E9 j1 N" r

  2. - ^; ^7 g$ [; S  w8 r# `
  3. , Z+ h6 }; D" \! A7 R' A2 h) w
  4. % u$ J$ U6 C3 |1 a$ a: `8 Z
  5. <script type="text/javascript" charset="utf-8">
    , F/ S8 j# L/ V% K' h

  6. " x. V  W3 e3 f, ~1 c2 i& N, q2 L1 A

  7. ' D( z# \! D- e! ]' O! |" D
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');+ [- R5 n' A" z/ x* K  V0 A  G" E
  9.     //socket.send("嗨我登陆了");
    4 o  e" b+ [% j$ ]5 z' R5 b$ \
  10. + ~" @* b; T# K& m
  11.     var back = document.getElementById('output');7 ?4 e' H6 O6 ~  c
  12.     var backcontext = back.getContext('2d');
    3 }, w, \+ o" F# x
  13.     var video = document.getElementsByTagName('video')[0];" V5 L4 }- ]+ }8 B. L) J7 n
  14.    
    / y7 a7 S( y" T; D
  15.     var success = function(stream){3 p- Y9 X$ r$ Q
  16.         video.src = window.URL.createObjectURL(stream);
    8 l! m& W8 L  K( q
  17.     }& l0 H" t& s% s& }

  18. ; D$ \; j7 N+ b( T/ X; Z' M( p
  19.     socket.onopen = function(){. D8 L0 s, {* ^  F9 e7 e
  20.         draw();9 x4 A3 [6 w) W
  21.     }; f9 n$ J: C( k+ ^  q+ b+ {
  22. & V( P2 k# \* T9 N
  23.     var draw = function(){
    3 E5 |. }' C' H; K" f1 \8 M5 _
  24.         try{
      S& r3 ~+ m8 a( B* F5 a
  25.             backcontext.drawImage(video,0,0, back.width, back.height);& y" K" u  Z) i* ~- K$ m$ i! [; q7 R; X
  26.         }catch(e){* m* g' A4 a% p8 N. ?6 W) u
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {+ E3 y; q( H8 P4 \
  28.                 return setTimeout(draw, 100);! P, x2 x7 d- c; N% O. b& y
  29.             } else {* O0 r' c. M, D# B1 N: _
  30.                 throw e;0 V# B$ z2 x4 n; g& X# x
  31.             }  [3 c' ~4 f$ O+ l; c
  32.         }
    2 k3 a- s# Y8 B) `0 i8 q5 b  o
  33.         if(video.src){4 q  c6 q+ d! ^0 F+ [9 l2 X$ I2 b
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));
    6 {+ b6 F4 o8 b/ x% V
  35.         }
    # i6 W' E3 _+ k- n
  36.         setTimeout(draw, 100);6 Q! [. [7 Y- e
  37.     }$ v0 I. t& w+ T( y
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||$ Z! J7 n% o! b0 C9 ?7 L
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;
    " P0 Q4 D1 T% R. F4 N* T( z
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);4 f# S+ f; v5 z7 A: L2 K, q% t
  41. </script>
复制代码
  1. php
    3 M9 Q3 Z) F, {0 P% U- k" i* R

  2. 7 p8 W! b* O" R( \
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);
    ! }; e, U0 W% x% p

  4. ; }  J. j9 O1 I. D) z. X+ K
  5. $server->on('open', function (swoole_websocket_server $server, $request) {
    4 e, ~" n2 _! R0 i. S
  6. $ Y/ ?1 H8 r" u5 N! y! t( f! S
  7.     echo "新用户id:{$request->fd}加入了\n";% m# ]% X; S* Q, r
  8.    // echo "server: handshake success with fd{$request->fd}\n";
    ; R2 _  l: f# \+ q* ~  M, t  Q# i
  9. });
    # z+ ?+ F; o/ }

  10. 1 c; e' u5 b* @) _( C4 t
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {" u) s! U5 d! O% r3 y) U
  12. ! ~5 Y0 l0 j( s2 H
  13.     //循环所有数据- a9 s; Y- F& h# U# L
  14.     foreach($server->connections as $fd) {
    2 O. k! d3 U7 {! {  E
  15.         //返回数据" g& U  P+ W; N6 K* @( j' R
  16.         $server->push($fd, $frame->data);
    $ N- w7 O/ Y0 r8 I$ U; D0 p
  17.     }, ]$ R  f/ V% ]3 W# m* Y6 Q& D

  18. " l. P( ^. l, k9 w; @
  19. });0 Z3 e: P& r$ [+ E+ B2 ?4 [( P
  20. - Y5 Z# d$ w: q' n9 ]7 O! ^
  21. $server->on('close', function ($ser, $fd) {) R3 p6 l, G6 u. s0 e2 P
  22.     echo "用户id: {$fd} 退出\n";) K( P  z3 P( `7 P2 B  S, v
  23. });5 j$ Z, T2 u% [1 i7 }

  24. , j0 q. j# [5 H6 K7 W
  25. $server->start();
复制代码
2 W. H* F/ _9 x: b
; q  @, m# B( K/ J8 q1 a) _
, t6 [% B+ o# c1 @/ ?
( j4 u9 D, v9 S7 j6 v
( @* Q0 Y/ v5 K

! a2 I4 [0 g( [* G5 X# W: \+ I3 c- R8 O6 R$ G# |( X& W" N( g6 {- E& E" A% S+ W
6 z  L$ r* Y9 R3 x  }7 O( B6 c
2 o1 j, m! T( X. v

4 a+ R- b8 h1 f) V2 O# w4 L' w5 N2 V
# s7 ^! D# d# u0 |4 I" ~4 o# _
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-16 15:21 , Processed in 0.060157 second(s), 19 queries .

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