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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
主要使用 webstocket
7 s5 w; H- K6 T' w' a- u6 f& U上代码
前端
观看页面
  1. <script type="text/javascript">
      Q2 r+ r$ y: d7 U0 _8 c! f
  2. var ws = new WebSocket('ws://192.168.0.150:9502');
    8 ?  `  I- v6 B+ ~3 U

  3. / E1 Z+ O6 H' N! H2 A5 R- q
  4. ws.onopen = function() {
    ) Y. _( [! d) j# k8 U3 }  Y8 ?/ b- X! g
  5.     console.log("连接成功");9 U! x. \7 G, j6 U. @& m: X8 |/ R- o
  6. };
    & ]$ @$ W$ Y- E' \: B( ~
  7. ws.onmessage = function(e) {
    # K8 _* c7 m. r. V7 f2 N2 K8 m. W
  8.    console.log(e);* D& w- U, ]( y4 L9 k  `

  9. 5 O; Y$ y0 e7 H# F2 p" w& i7 X
  10.    var data = e.data;/ m6 T; v* D7 u& N0 h
  11.    document.getElementById('player').src=data;
    7 _9 m0 h# V& R) f& x7 |8 w
  12. };
    2 ]/ v3 T6 f7 O: E
  13. ws.onerror = function() {. F  K3 m% u! K! C: n4 C( Q+ Q4 I
  14.     console.log("关闭连接");& y: ~4 P* ?8 w6 B& R7 C4 Y
  15. };9 ~6 Q+ H# y% d. L
  16. </script>
复制代码
录像页面
( y- u: H. z' v: E  g
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>( B: G& m7 w' {" _

  2. . O, _( q  o; ~2 m

  3. * y2 A' D- j. f0 _# i0 \

  4. 3 Q" O0 E$ F. C) o' h0 D: Z
  5. <script type="text/javascript" charset="utf-8">. c& M$ E1 ]1 P# F6 G4 P& _  g, V

  6. ; a! `4 g4 H" v
  7. ! z( M' q: ?$ z
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');9 F4 @  v  Q* F$ D9 I; T/ ?
  9.     //socket.send("嗨我登陆了");
    # u5 y) I( S. l9 K; I9 s! b

  10. ! n' C2 i# a1 f+ Z+ x- i
  11.     var back = document.getElementById('output');
    & y/ Q" |* Y' o
  12.     var backcontext = back.getContext('2d');
    $ ~0 W# ^, x% v2 Q( b
  13.     var video = document.getElementsByTagName('video')[0];
    9 W3 C- j  u' B8 i; p0 t
  14.    
    4 e2 }  Z3 D4 [
  15.     var success = function(stream){: ~# V( F$ F: x3 M) Y$ }
  16.         video.src = window.URL.createObjectURL(stream);
    ' v$ S1 r3 A+ u8 V& m
  17.     }9 N; M: f, B+ ?. }! [8 c& A

  18. 4 Y/ ?$ B+ T! G- o, ?- q0 H! a
  19.     socket.onopen = function(){9 Y/ w' C* u0 |. q/ ]
  20.         draw();, e. q; o3 s8 }; t
  21.     }
    / ?$ y, [; R2 j% y
  22. $ [0 D) C# J. [
  23.     var draw = function(){
    + r# e: s+ N7 b' I  T- ^3 u1 {
  24.         try{) E: @2 `( T: J9 p  ~) _
  25.             backcontext.drawImage(video,0,0, back.width, back.height);8 n% a; @- E" X
  26.         }catch(e){
    . b1 [! ^0 l' @0 O( ^" b) b
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {
    * \( u/ W4 S4 [# f, q* Z1 `1 f8 b: ^
  28.                 return setTimeout(draw, 100);  u; k% w. i# [1 `9 A3 C0 A
  29.             } else {4 D5 H) d/ @, G2 ?
  30.                 throw e;
    3 D9 c+ G$ b- u  f
  31.             }
    # E9 U; g6 r  {& l4 I
  32.         }* Y7 p+ `  s8 B( K4 g% U# T  Q! K5 {
  33.         if(video.src){3 \$ `" X1 O5 Q7 L, ]; N, c
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));( ~9 ~9 V& L) `5 H3 u% s- v& q
  35.         }% Q& Q+ q' y+ L; |
  36.         setTimeout(draw, 100);1 T- o- I! W" M
  37.     }4 s$ o" k7 X" U' W- D: ]
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||9 Z' R4 g5 g  V+ ?
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;, v/ Q0 L  H( v. ?8 W: J
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);
    2 C' J0 B+ a( ~# E/ N+ T
  41. </script>
复制代码
  1. php7 F  j! A2 i; x; K% D" R
  2. 5 u2 B+ T0 Z/ o+ Q7 L* o
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);) L/ K. q0 F2 x5 {- H

  4. & y! }: H) P4 t; ^* x
  5. $server->on('open', function (swoole_websocket_server $server, $request) {
    8 o3 ~: ?& G1 p/ N

  6. ' i$ C1 L1 U0 `& A: d  |
  7.     echo "新用户id:{$request->fd}加入了\n";
    / O; K- K! `' E+ A  G# J
  8.    // echo "server: handshake success with fd{$request->fd}\n";
      [0 A; D' t) C) T8 w: m
  9. });# X* w8 G" E0 T% {. ]$ I; J
  10. # c/ j3 x9 E# z
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {
    : z$ v% Q  ~1 I7 R/ G" R4 B! Y
  12. ; ^1 }4 E, T) k6 l( e# j9 _
  13.     //循环所有数据2 T! X' S" c, _' t" h7 B) d
  14.     foreach($server->connections as $fd) {% J5 Z) f$ ]" _- P" B! P$ R* l% N
  15.         //返回数据+ o: k; a# M' e" R
  16.         $server->push($fd, $frame->data);
    : n: b- y8 F5 E& b& F5 f  g5 v
  17.     }
    - a) m0 B2 R  I! x6 X, P6 R* v

  18. 4 O3 c0 [, k' h9 E
  19. });5 M" n& P: j, b! w9 x% E

  20. 2 M. M$ u) d" s0 F; X# D
  21. $server->on('close', function ($ser, $fd) {
    - M0 j" y2 n0 y9 e) @7 n
  22.     echo "用户id: {$fd} 退出\n";9 a8 t* U# b0 l2 V5 L4 F
  23. });! x2 N- L. [+ ]( g. Z( t; t9 K
  24. 1 i6 k& \3 t! A6 R
  25. $server->start();
复制代码
1 ^1 o/ y4 n8 M% b( Z" x
- A' p# J' C: Z' a$ V+ l
, S% z4 {# W3 q+ s2 O

" Z6 z! F! u5 @* D& j. x) h# T- V9 g0 f2 ^6 {

4 l4 |# C* X# T6 t$ [) y+ @
' V( n5 [4 y4 p) p' E7 |9 X* o+ @$ U! T/ \9 \( v
' |2 U( F- q! ?% R+ e
/ q" K8 V% s, i. J. y5 N% q- r

) V. G$ f3 x+ A7 \% {- H/ A4 j$ j0 O3 z- {) `$ i( h: g" B
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-6-19 22:37 , Processed in 0.053893 second(s), 22 queries .

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