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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 9933|回复: 0

[swoole] swoole 直播

[复制链接]
发表于 2020-3-31 19:41:34 | 显示全部楼层 |阅读模式
主要使用 webstocket! c8 d8 R! @! A, v
上代码
前端
观看页面
  1. <script type="text/javascript">! g4 {0 Y; p3 s) @. q5 K% A
  2. var ws = new WebSocket('ws://192.168.0.150:9502');5 t% F! y6 l, Y0 U

  3. 6 h% w5 w, v1 D9 X
  4. ws.onopen = function() {
    0 H" _% K) ]6 u- h/ k
  5.     console.log("连接成功");
    : ^7 x8 M/ b0 O8 ^' v
  6. };
    - G6 |; O  s4 n+ u- a" Y. l" s: l9 s
  7. ws.onmessage = function(e) {! L7 d1 L6 x% _
  8.    console.log(e);9 x" }6 \) Q. x3 a$ k4 W" q) R7 A
  9. 9 E1 j5 D! ^/ Z$ D
  10.    var data = e.data;, H+ k3 l' y: ^0 n2 T" {
  11.    document.getElementById('player').src=data;
    8 Q% R+ T& {" @5 a( A4 e+ q6 C+ \
  12. };  a( b+ M; P8 r
  13. ws.onerror = function() {8 K. p/ ]7 d; D# x6 R2 ~9 [" }) d
  14.     console.log("关闭连接");
    9 Y% @. U* ^8 U
  15. };
    , h! c8 z5 m- H
  16. </script>
复制代码
录像页面

" v" j! b- a# G; u# Z8 o% I, m
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>4 W% h$ @# a" \8 G( P( N
  2.   p, S9 ]  A5 C- S! S; V, A

  3. # Q+ l' ]3 J' \1 _

  4. , V8 U1 J! F0 J& Y/ f9 q8 Q
  5. <script type="text/javascript" charset="utf-8">  I2 ~( C) l' L! C' P: ]& M
  6. + _7 h* Z0 Z  v$ u% ?/ a
  7. 8 a5 p% s5 o- ~% c
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');, `! [  J) I( j- I. O) _% I! ~% X
  9.     //socket.send("嗨我登陆了");
    , `' E3 V2 S% |
  10. ' Q% r1 Z' l1 ]( k8 \, w# a0 v
  11.     var back = document.getElementById('output');3 |6 O% i! J. V1 I7 j: c* }& b
  12.     var backcontext = back.getContext('2d');
    5 J% F( V/ G9 C8 R) _- B
  13.     var video = document.getElementsByTagName('video')[0];
    4 S1 x* [7 T/ c# l3 C9 D# L
  14.    
    $ f; p1 C* c! K9 e8 v' d4 ?/ f8 J
  15.     var success = function(stream){
    3 j- W& I5 C! b
  16.         video.src = window.URL.createObjectURL(stream);6 p8 x' L- ?( F0 w
  17.     }
    9 p' _9 A& B2 l& x2 A( F

  18. 6 H/ N4 w8 z) b0 m' c% l
  19.     socket.onopen = function(){
    " W! n4 ]* b4 s' P
  20.         draw();% L& [+ I% F/ h9 c8 E+ R6 v) x
  21.     }
    7 ?* F6 _2 e% [' c' S
  22. # |: [( w6 B0 ~
  23.     var draw = function(){
    ' j0 {' P/ R( j" i6 S) j
  24.         try{
    5 {( p$ G( L& t/ h  n
  25.             backcontext.drawImage(video,0,0, back.width, back.height);! ?1 j+ p8 Y7 P6 K5 ?# V
  26.         }catch(e){/ I( C2 s' a/ @. b* v
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {
    3 C4 H) ~4 }6 j3 M4 N2 Q
  28.                 return setTimeout(draw, 100);2 p+ f  t% x1 |6 r
  29.             } else {
    ) \- ^7 ?- [5 W: |. e/ k# }
  30.                 throw e;' f7 O1 |, {: |! ?. k
  31.             }
    * e3 b8 v8 S' g  ~! r" d( t
  32.         }
    7 O' u* }; u% w  C3 x. T& Y
  33.         if(video.src){
    4 O  c5 H6 ^! O0 F
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));
    7 B4 X4 W% p8 p/ n5 i
  35.         }" y* E+ R: X' _3 _6 ^2 ?
  36.         setTimeout(draw, 100);
    " n) O0 N# R4 C$ O5 H
  37.     }
    0 k1 ^" g; e* I0 D
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||* c  B8 ~; I5 ~  w: w
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;; w4 f  {* n( n. P& I4 B
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);! M6 J0 w) c# U- @5 X( Y* n
  41. </script>
复制代码
  1. php( |, O$ h8 O8 y1 M

  2. ; x' T# V. K0 ]. o) [. u8 c
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);
    & L, j1 d% C% n2 n0 t6 u' e" K

  4. ' Z7 w6 m- o; n2 U! Q. l
  5. $server->on('open', function (swoole_websocket_server $server, $request) {" [  E8 d) C: k0 ^

  6. 6 k; k. F3 U, w; e! u) O
  7.     echo "新用户id:{$request->fd}加入了\n";! T$ a) B0 L1 W& ?. D' p7 J
  8.    // echo "server: handshake success with fd{$request->fd}\n";
    . _4 p/ k* z( W
  9. });
    $ I# M' Q. g9 n% x  q3 `

  10. + f, C0 ^4 W; [& ]' \% h( `
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {2 M. k; d  [" J) }4 P
  12. + M, @5 m1 C9 s$ n2 x; N& Q
  13.     //循环所有数据0 l8 a4 S2 [: F, S$ x
  14.     foreach($server->connections as $fd) {& n2 H2 {& I1 R: `/ T: v+ e7 c
  15.         //返回数据
    0 [: r; Z$ M: h
  16.         $server->push($fd, $frame->data);* {1 Q" J' ^% r
  17.     }- ^& K- }- J7 D# c  Q, b
  18. : X6 b6 r% V; e, k) N, F
  19. });
    ( C2 Z. t, d- i, U8 L

  20. 0 h4 v( b# w( t+ x1 S
  21. $server->on('close', function ($ser, $fd) {
    : k4 j' ~  q& c9 V- S' l; g
  22.     echo "用户id: {$fd} 退出\n";; j7 h& V& m0 s7 Z7 @' r. O
  23. });" i5 P  j3 O/ N' S

  24. + ]) D( D9 L, p4 r0 `6 c2 r
  25. $server->start();
复制代码

/ a3 Z4 B- @6 E# M) d; g+ C- ]( N. F# g" Q

. K  ^4 c# C, a3 O6 L) D
. J" R0 }1 U  |, V( f- n' x3 K7 N4 o( [8 ?2 L3 J

" J. S" ]6 M0 C( K* f/ _3 Q$ B5 E# i0 E2 l. ?! c7 F" _0 t, L1 D
6 _; u4 U+ u- ~8 p5 D; u

6 o9 ?! w0 s: E
* K5 C6 }' o& A, o
' S; v3 V6 O- \  S
( g1 n1 ?- y/ y
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-4-19 00:33 , Processed in 0.105850 second(s), 22 queries .

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