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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
主要使用 webstocket3 u+ U) f# h8 S3 @
上代码
前端
观看页面
  1. <script type="text/javascript">
    5 b; Z& \; ~8 V
  2. var ws = new WebSocket('ws://192.168.0.150:9502');" t% k! H  u2 \9 P' |( Q$ n9 s$ t; q

  3. & F3 F# Q' Y0 ~
  4. ws.onopen = function() {$ e' E, v6 ^$ G" J4 [
  5.     console.log("连接成功");7 e9 V$ ~2 f& p* E  n. j
  6. };8 t( x( ?- e& \; h  o5 y  }! |% E
  7. ws.onmessage = function(e) {9 h7 R# A3 P0 y' a8 H! o
  8.    console.log(e);. A# y2 [$ A+ p# q

  9. ! h4 W" _9 t+ k7 U# d' z( y( ^1 H
  10.    var data = e.data;
    * d- Q2 u7 s+ h& R. c
  11.    document.getElementById('player').src=data;
    ( ?  u3 |- k9 K3 t$ T7 k
  12. };
    - B0 w8 n4 s; `
  13. ws.onerror = function() {* n, q  `$ e5 u. s
  14.     console.log("关闭连接");
    . T$ r/ b6 s( k" z  }
  15. };! I+ R. t. \0 ?
  16. </script>
复制代码
录像页面

5 F/ l: v6 y, A5 [- k
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>
    ( c6 ?, _3 I! Q- Y3 }

  2. 0 u" z1 H: G0 E2 J( s! k$ U

  3. $ Q* v5 R6 z1 B- Y$ o5 v) |
  4. " v9 z1 X/ c4 A( ~# P/ o$ w  M& a
  5. <script type="text/javascript" charset="utf-8">
    # R7 [( J9 G% T7 E
  6. 8 C4 B7 L8 S/ C
  7. $ H- f8 `6 ]/ h! A2 c% N+ ]+ V( k: g
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');  c- |6 H4 x+ D0 a- Y$ Z5 @
  9.     //socket.send("嗨我登陆了");
    ' [( d  G: a2 q

  10. 2 L  C8 i5 a) o6 Q, g& S
  11.     var back = document.getElementById('output');
    & C8 ?1 J' ~) f) F+ a
  12.     var backcontext = back.getContext('2d');
    # }& O) e6 I9 F' [0 C" C" G, I
  13.     var video = document.getElementsByTagName('video')[0];" d# I4 [' c  ^3 F2 D! j" j4 g5 f
  14.     8 g4 Y: B8 B! D. q7 O
  15.     var success = function(stream){# k, t3 g( n- ]9 M8 M
  16.         video.src = window.URL.createObjectURL(stream);
    : Z2 b+ |+ m1 q/ `# E5 b0 `
  17.     }# y7 Y5 h( @1 L5 G

  18. 3 y8 t$ F0 r7 X* D7 R: N1 s9 \
  19.     socket.onopen = function(){+ o$ _( F2 X5 H$ f
  20.         draw();
    ' K8 P* `9 u* z: V7 e% B4 D# Q: o
  21.     }
    9 @5 F( b4 N0 b4 X! V' N; y- L

  22. . s/ r4 R1 f) R. @
  23.     var draw = function(){/ y6 M, [; u1 \9 j, M* Q& M
  24.         try{/ j* p/ q( M7 U9 K! Y: y* l
  25.             backcontext.drawImage(video,0,0, back.width, back.height);
    5 D, ~2 _) o" ^. o. R; n/ d
  26.         }catch(e){( l4 @3 t4 E2 O3 R$ ]$ u" Z
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {4 \" ]5 m0 o* j9 X6 M7 l
  28.                 return setTimeout(draw, 100);& }: U5 Z. f7 D) _9 }' ]9 y
  29.             } else {
    ( y7 d/ R# Z+ l: O' G$ x
  30.                 throw e;
    9 G6 A9 p. S! Q  ^/ }) |( X9 X
  31.             }
    # i# i7 c  i$ @1 W0 m' D& C- @4 L
  32.         }
    6 d$ u4 T" c6 E9 ]$ g7 N
  33.         if(video.src){8 }6 Q3 e& Y' [# d% F
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));
    2 k, L/ V9 w! B+ z' _
  35.         }
    ! X& {" J$ s. Y" S/ I7 F# `
  36.         setTimeout(draw, 100);% X7 K5 ?; I' Y0 g' t* u
  37.     }
    6 |( }5 T) t' y+ Z' a8 D+ |6 V
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||8 M- I' Q, h! P+ X+ r
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;
    / w  A+ V/ Y/ y# S" d0 {
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);5 e3 [: E- m) l! p4 M
  41. </script>
复制代码
  1. php
    " g: Y1 f5 f) O- O5 r" k
  2. * g' l: O  q7 |9 N( d: ~$ R
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);
    0 c3 s) u% U4 j" e- @6 L

  4. 7 l; @& d- t  s+ C# O- F; L# G4 w
  5. $server->on('open', function (swoole_websocket_server $server, $request) {% ?- D4 R/ P, i2 d8 t" R# C$ D4 o1 k

  6. 2 N% u7 k; ^$ d% _& [
  7.     echo "新用户id:{$request->fd}加入了\n";
    & a$ ]( }. y: x8 K3 M. F* H+ `
  8.    // echo "server: handshake success with fd{$request->fd}\n";
      F0 X+ c& `: ~) j: A. H
  9. });3 [8 `0 n6 K* e) H( s3 C0 ~, Q
  10. " }5 ~# H6 o4 ^
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {  Y- N3 D+ o0 T# l/ y/ ^$ x" a1 s

  12. 2 u& ^4 ]) [" U; Z9 {; R9 o" O* L
  13.     //循环所有数据  Q9 \; ]4 z( D6 Z" Q; G
  14.     foreach($server->connections as $fd) {) \. S3 u2 e  Z6 ^8 K4 E
  15.         //返回数据
    6 ?. A$ H) W6 X
  16.         $server->push($fd, $frame->data);# F. t; d9 I$ c  r
  17.     }
    + k4 O6 o) A; Q% j7 ~
  18. 5 M0 R" D* X8 y+ ^
  19. });
    * _% `" K0 f2 f1 V, y! a! f: @
  20. $ v! w! U3 y! f9 M: q4 U
  21. $server->on('close', function ($ser, $fd) {
    & `9 V4 ?5 S" Y' d
  22.     echo "用户id: {$fd} 退出\n";4 ^4 U. a, m: c! G' S3 u: y7 R2 Q
  23. });- e0 Z) H# c& V% n
  24. 1 z) l2 y9 y1 k
  25. $server->start();
复制代码

$ J+ [2 u2 I: Y" n$ C6 V1 f, H4 C$ b9 p3 l, G% V

  }* L5 |+ c4 k. n. u2 Q  W$ Z2 b& t
) M3 f( A) N% `, w7 M
1 Y* u# |1 _1 q- S! B: d' r
+ w/ f! z' a$ o' L, w2 P* n4 C

" p" d& z/ U% _( S
0 c3 }' \0 k# |) L0 k( y& v$ s; d4 y
/ K8 r' ?1 P2 F; }& Y( s2 U% p; ~  r% U9 h( }4 a
, j: H; }1 t/ ], u# p- O
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-20 04:29 , Processed in 0.110688 second(s), 20 queries .

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