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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket
& t6 L$ I+ i0 J7 L上代码
前端
观看页面
  1. <script type="text/javascript">
    - m8 s; {4 @, s* I* t* d
  2. var ws = new WebSocket('ws://192.168.0.150:9502');% h8 d& z$ m, E& M
  3. 8 H; q; F9 N& F+ l/ B
  4. ws.onopen = function() {8 w- p: f$ E0 h5 |# B" ?( o# E
  5.     console.log("连接成功");
    1 M. I* U$ H7 ^: f" M
  6. };% d. X: S& e2 v
  7. ws.onmessage = function(e) {- [9 t  L% o6 I9 p( Z/ S
  8.    console.log(e);; G% r4 f$ g- E& [" Y; g

  9. % |2 j9 j" W) ~0 ?
  10.    var data = e.data;- H3 r: Q' q- I5 j
  11.    document.getElementById('player').src=data;
    $ D% t9 a, b* S$ s% L- h3 Q
  12. };
    5 k4 j' j& e7 R& S
  13. ws.onerror = function() {
    1 ~2 L. O5 f" x3 N* f
  14.     console.log("关闭连接");
    ) O  C0 F5 o% @+ a6 a
  15. };
    / k0 p4 ~  o' K: D9 }
  16. </script>
复制代码
录像页面

' A" A$ y" I% H9 n# J+ V9 u
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>
    . X' `4 c- @+ N  _
  2. 3 u. `+ L& t' ]. x5 z- e9 C& |1 ]( L4 s

  3. " G1 w) H* r4 r) }& N! O+ V

  4. & m) q) L. w- K2 h, e2 ]
  5. <script type="text/javascript" charset="utf-8">6 |" Y" J( z3 Q" ]* P# s. R

  6. 0 v1 E0 n5 E; Z& O" c

  7. : u& u+ h: A* ~- J3 n+ b& Y; v
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');, N4 d8 K' y8 R+ _( q) @: }- w
  9.     //socket.send("嗨我登陆了");
    / x" W; P8 j* s# T

  10. ( l$ H( v7 \2 |
  11.     var back = document.getElementById('output');) C/ B. E) L  \. S; b. i9 z: }
  12.     var backcontext = back.getContext('2d');
    ( N; O5 M2 K- g: Q
  13.     var video = document.getElementsByTagName('video')[0];3 D' E# o6 W* Z" G: {' `# i0 [
  14.     7 H# J6 R! c3 r, e1 k
  15.     var success = function(stream){9 n0 `3 M! V* ~; M$ O
  16.         video.src = window.URL.createObjectURL(stream);
    + r4 i: x4 t4 e3 N. E( t/ c# b
  17.     }
    * H% z5 P" b5 t  E5 _

  18. % R1 L1 b* v1 f( {% f
  19.     socket.onopen = function(){
    2 B. G1 o" M3 Y( v
  20.         draw();4 g9 [% q3 W0 H! o. y
  21.     }* O, G: r- @% x# ^# g/ R4 o8 i) c4 o
  22. . G; `5 _( I- W
  23.     var draw = function(){
    ( [$ I, `: B; F: ^/ P' E/ p
  24.         try{
    0 o* D3 W8 y5 G9 g. f) ~
  25.             backcontext.drawImage(video,0,0, back.width, back.height);
    . A. z' T* i: E/ @/ [! e
  26.         }catch(e){% q1 A7 K* O! l( `
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {
    # l! v0 V# h, U. |, h% l
  28.                 return setTimeout(draw, 100);) y% f! ]! T' h" h8 Y# \4 Y
  29.             } else {
    8 o+ ?/ ]$ A7 C9 p
  30.                 throw e;( I5 o. `2 f: {7 p
  31.             }
    $ K) Y0 P8 K; ?9 o6 K
  32.         }! Y& A9 y( I# G* l
  33.         if(video.src){
    6 G) F) }' T4 H$ F% V, @8 d
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));
    , f+ ~7 V4 ]* [  _0 P7 _0 W4 i
  35.         }) }7 n% Y1 a7 _6 c  u; X
  36.         setTimeout(draw, 100);& z# B4 F' s$ y3 v* E
  37.     }
    8 y& B  q5 S6 T
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||) d8 k- W, m, R' M
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;
    5 Q/ y  H  [9 ]: V' z
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);
    9 w. A# Y' M7 u
  41. </script>
复制代码
  1. php( [& g1 t- S2 Y- T1 y  y
  2. % f: i# E; y* a5 p  h: s
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);
    8 U  n" h% n) S+ i" C2 L6 `0 L5 r
  4. 0 I9 A# n& K* H) K4 L; ~( A
  5. $server->on('open', function (swoole_websocket_server $server, $request) {! Q! k! ?+ f5 Q7 L5 t# s6 N' j. C

  6. ( }, @6 [9 h0 K& A% i% w  J
  7.     echo "新用户id:{$request->fd}加入了\n";
    # H8 W% s* g* m9 v3 N& u
  8.    // echo "server: handshake success with fd{$request->fd}\n";, F1 E3 ^$ e# m2 G4 t! g
  9. });/ ^' G( A2 N& f
  10. 7 ~3 ^! I( z2 ]
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {3 P; R& g0 O8 W/ \

  12. $ P4 _8 ^- O" f
  13.     //循环所有数据2 ^: w1 a7 e5 i& ]( `' V7 Y
  14.     foreach($server->connections as $fd) {: ], ~8 a" X* a& I
  15.         //返回数据
    , T% ]% w3 S0 ?* X, y/ v' q2 i" x
  16.         $server->push($fd, $frame->data);
    3 S( j5 W: L) e
  17.     }
    # y/ S2 T( [1 `. t' ~
  18. + x5 H3 F* v! p3 s1 N, I
  19. });, X: Y- z0 v5 |& V$ d
  20. 2 W% t& z* a" I- ^
  21. $server->on('close', function ($ser, $fd) {& P6 o# z( \% O$ ^$ {
  22.     echo "用户id: {$fd} 退出\n";
    9 H0 [& X; v! H8 {1 {; O* n
  23. });# H; i7 W6 M& E. d, c( s& S0 `

  24. . I- U6 F- S. p! b7 f$ U4 M
  25. $server->start();
复制代码
* k: G4 a" X/ ?1 L& l

7 h3 y4 P( G6 d) K8 ], _% N4 M. o: d- C. {, ^5 y  C( D$ r

) L5 _+ o) d3 H# |  v- U
! l  h7 |3 p2 T; F9 r# H3 l
* K" w/ |! }. H/ b
0 K# [( b# a, l$ V, a" a; Z
& o. h5 g! E- l3 S6 a3 v
6 K) l; E4 A9 U# E6 W' k$ m0 B1 K; V4 N
; n7 N1 i" i; ?  p/ b" o  J1 n
0 c$ e4 u, H0 S
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-6-19 22:43 , Processed in 0.054933 second(s), 20 queries .

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