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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket
3 _0 P; k2 \2 s7 [, k上代码
前端
观看页面
  1. <script type="text/javascript">
    , N) I' N; O/ M" y  q9 ~0 o+ @
  2. var ws = new WebSocket('ws://192.168.0.150:9502');
    . s$ J9 y6 u/ l
  3. : p5 B" X5 T9 \! v) @
  4. ws.onopen = function() {; {/ J* I5 q/ n3 D
  5.     console.log("连接成功");
      m* y$ Q  M0 l3 @& m
  6. };5 I. ~1 k: W# }0 l2 ~
  7. ws.onmessage = function(e) {
    4 I9 |! Z" [! t/ s+ a8 Q+ Y
  8.    console.log(e);
    , b  {' _  r% e
  9. . }8 n: O' D9 G3 t( f$ [' d
  10.    var data = e.data;. r, h+ N: N; l
  11.    document.getElementById('player').src=data;
    0 r1 f& ^# O/ B' K" ^3 B& D2 Y4 o( U
  12. };
    8 l' Q' w" f/ E+ x+ c
  13. ws.onerror = function() {
    & ?. p4 H7 b" `: f$ g4 r1 G4 Y
  14.     console.log("关闭连接");
    9 l, R+ C2 J. L) X
  15. };% {: u* k5 e, k: a+ R
  16. </script>
复制代码
录像页面
$ I/ R: y3 h5 V6 G
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>
      C' i# P3 L2 M# ?( B0 J
  2. " V& B: A. W" |
  3. ! `! s+ S0 ?, a- l& j3 F9 T$ ~" u
  4. ' s/ P- ^( a! l3 m' j1 A: V- \
  5. <script type="text/javascript" charset="utf-8">
    ' k, Q5 X! Z  V& i* W% a9 q- E% O

  6. ( J$ N# T1 X- d8 V& b4 r4 d, a
  7. 3 S' E; i4 ]2 k, g3 A  P: [
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');+ z6 c; X& u, |6 T& f
  9.     //socket.send("嗨我登陆了");
    / g& U: C/ }' Y
  10. + x5 O  m' K$ Q5 }: b; V* u1 r4 V( I
  11.     var back = document.getElementById('output');- p: N& D2 z6 \
  12.     var backcontext = back.getContext('2d');$ d1 B! p" `4 f0 \2 c0 a
  13.     var video = document.getElementsByTagName('video')[0];; E$ @2 c( f' o
  14.    
    3 X- D0 e9 y& X' J: v. u: m/ N/ y
  15.     var success = function(stream){) L, d# L# I! x# l
  16.         video.src = window.URL.createObjectURL(stream);! |; f+ R% P3 v& Q: ?3 p
  17.     }
    $ o: o1 Y* X' P3 Y! `+ j
  18. * s1 @, F; m1 j8 s2 g/ J
  19.     socket.onopen = function(){8 g$ s9 A5 O4 v, q' v" D1 s: Q6 H" V: G
  20.         draw();
    7 E/ v' |' Z; w/ B
  21.     }
      a. d4 a0 b+ \% \

  22. . V6 |! s! v; t+ R+ m% M* o
  23.     var draw = function(){  r  C$ @; p4 h+ }4 P
  24.         try{
    0 A- _1 x$ N4 R' J
  25.             backcontext.drawImage(video,0,0, back.width, back.height);
    , Z/ M7 W1 O7 q) H1 w
  26.         }catch(e){
    + G$ M6 T% {6 d6 m; A9 F+ l
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {
    * y3 a% Q" Q- ]6 e
  28.                 return setTimeout(draw, 100);
    & U+ f5 X2 y1 l/ |8 z. C+ Z
  29.             } else {- @) L3 O& h/ L6 H! M1 K5 v* l/ O
  30.                 throw e;
    7 ^; [; H8 {' G2 i$ N0 m
  31.             }& N# A  T; k6 l+ C& J! G2 q) Z
  32.         }: ^/ ?6 C! Q! _( |6 D6 L
  33.         if(video.src){/ _  E% \4 i) l3 r3 s
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));
    9 b7 z1 B; ]* v/ d7 Q
  35.         }
    ' [2 `& D6 Z5 u: b
  36.         setTimeout(draw, 100);
    ) b# g$ A5 J: f6 A; Y1 d
  37.     }7 |; ?8 _' i) E; a9 Z" M8 t
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||
    $ h2 H; u5 t$ k# t
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;
    - x  p! G2 Y4 ]) b# ^0 d7 B* q; B
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);
    5 f5 _! W/ o* D% D6 p7 \8 k0 w
  41. </script>
复制代码
  1. php; B  Q# ?5 s5 h7 k* D
  2. 8 r: k5 z: @$ Q- k
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);
    6 Z1 x$ T& ?" b* I

  4. 5 X: X6 c# e5 Z% h( [: s
  5. $server->on('open', function (swoole_websocket_server $server, $request) {' ?, }- k5 [, a; E' c: \
  6. - u: @' A! q: F4 c# y6 {1 i: F8 |+ F
  7.     echo "新用户id:{$request->fd}加入了\n";
    1 T  F9 d3 C' e% ?( A
  8.    // echo "server: handshake success with fd{$request->fd}\n";" V6 @% l4 z. T! H! O
  9. });, W, v& _3 E/ z7 n
  10. # L6 M/ Y0 J( U# z7 \: h
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {# Q9 K% p' U' Z1 d7 ?% X
  12. . Q  O4 B6 q* @' m' q: \$ U
  13.     //循环所有数据
    " z# b! d# p% {7 U% s0 U8 y, u
  14.     foreach($server->connections as $fd) {
    8 H0 h* R" b, w
  15.         //返回数据$ v  m# U0 r, J: X
  16.         $server->push($fd, $frame->data);; ]; `% Z! x! Z4 C; h- {
  17.     }
    6 ~, ]! l5 ~! `! e

  18. # S+ j9 B5 L7 K5 e+ U& j
  19. });& T9 `- b  k+ ?& j

  20. 4 S4 l! [$ E5 h) H
  21. $server->on('close', function ($ser, $fd) {
    8 a. ~2 l( y0 i* E* j# ^3 y
  22.     echo "用户id: {$fd} 退出\n";
    + |8 @8 {# R0 C' P1 c9 ]1 o: G0 A
  23. });
    / X2 g4 O) L: S

  24. ' _* H5 K1 m* j4 [. ]& |
  25. $server->start();
复制代码

) M& _5 R# v0 @5 Q' f+ R+ D6 O. l* M) p; s: t. H! p6 ?
+ {% {1 k9 i+ T/ l9 u; A
% a( ?- u, V0 X3 J2 r, T5 C
+ \* d' }" _8 d" V$ B8 C: q+ L
% R1 k. D$ l' A
- A/ k: J" G- \! Z, o1 y

6 d; y4 z* ~# H. k) f
* F5 n$ G( E, A6 `  ?4 k" `: M+ [( Q: p

% A1 B& o% N( D7 x$ o+ j
: S  l: Z- ]0 O: s9 t! @
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-17 12:29 , Processed in 0.117789 second(s), 19 queries .

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