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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket2 x2 \) g" X7 w- z2 [# k9 A: \! I
上代码
前端
观看页面
  1. <script type="text/javascript">
      N/ Q, k: v; g
  2. var ws = new WebSocket('ws://192.168.0.150:9502');+ ]" ]$ p9 z4 _6 B) o7 t

  3. ! t/ d; [3 f: J. L
  4. ws.onopen = function() {% @% ?% C2 J9 q7 j1 A' i9 m
  5.     console.log("连接成功");
    " b  [7 x& O: h
  6. };
    0 G/ r: v3 H; ~$ c9 ]2 B- Q
  7. ws.onmessage = function(e) {% ?0 |2 V. b1 [7 e
  8.    console.log(e);4 P; h) ~1 U& ?1 W3 [% T8 M

  9. 7 \- [5 o& x4 \! }8 r  g
  10.    var data = e.data;& ]. _7 k! W7 ^1 ?9 t. V. Z# A
  11.    document.getElementById('player').src=data;
    1 }0 j* Q- W: c& D4 ^% Z
  12. };1 D  U( p# t  J' `4 J9 S$ e! l
  13. ws.onerror = function() {" z4 i. [, I/ P/ J. n8 v
  14.     console.log("关闭连接");! E: [  v2 t/ ?+ ]- c7 G
  15. };# F1 y8 z  L  U
  16. </script>
复制代码
录像页面
$ j" p* ]+ X% I
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>
    5 ^1 d# O7 G$ _0 Q! D
  2. 9 H- D' H/ o4 k; O! E5 m6 N

  3. 5 j6 @! a9 \6 e
  4. 2 F& s1 D5 `8 k
  5. <script type="text/javascript" charset="utf-8">
    # p' {% B6 v9 ]1 q0 Y
  6.   Q( _4 J7 I& V: {* `( h
  7. 7 y3 R1 q/ L5 J* F9 [4 N5 g7 O
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');4 y& t2 W- x1 E& j' Q
  9.     //socket.send("嗨我登陆了");/ B0 T- C% Y' v: d6 u: V

  10. ! v; h. Y% Z: g
  11.     var back = document.getElementById('output');
    ( _8 Y! \% d* ]( Z1 K% v+ d. H
  12.     var backcontext = back.getContext('2d');
    : k/ a  ~& Z, M; _. O5 q% f8 ~
  13.     var video = document.getElementsByTagName('video')[0];
    . g, ^2 p# |  g' g7 n) W
  14.    
    1 c' c6 ?  @) J
  15.     var success = function(stream){1 Z/ n2 `1 Z0 k4 I# z9 _$ q/ ]! A3 n
  16.         video.src = window.URL.createObjectURL(stream);" q0 k% y. U! Q
  17.     }
    ' z) G" A* i4 D' E9 g5 F

  18. # h! y2 B) N$ ]3 V" b! O
  19.     socket.onopen = function(){
    0 n0 C$ D; T$ B3 C, L
  20.         draw();1 E2 o. M. ~$ l. w9 |! w
  21.     }$ x+ _6 y# ^8 B( g1 u5 _
  22. ( r+ R' e4 W  R1 |
  23.     var draw = function(){
    9 Z/ p: h$ w" m. a, D
  24.         try{
    3 Q, W0 N$ p  v, i; m! a! L$ z" F
  25.             backcontext.drawImage(video,0,0, back.width, back.height);
    " q+ h/ V) k+ p! i! i
  26.         }catch(e){
    , ?3 m& l1 ]' _$ [4 F" T" u, `# i
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {
    0 t$ h! G/ i( _5 ?' h% c0 ~% m
  28.                 return setTimeout(draw, 100);
    1 W  ~4 B+ D5 H" l) S
  29.             } else {9 z$ b" \: b, }8 U; z6 o% `
  30.                 throw e;+ C5 e3 Y* |* o+ M8 l! }5 T
  31.             }" s8 J0 k, _0 s2 z
  32.         }
    1 ~5 b' v3 y( K: W$ o' U
  33.         if(video.src){
    9 G- K* l( @8 d) K0 Y1 T2 Z
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));: z- B: Y9 }2 K
  35.         }
    3 W* `' \4 f# ^; N( s, \" L6 U
  36.         setTimeout(draw, 100);# k9 V# ]0 P+ X  _! \% d
  37.     }
    . O6 I: i( a2 D2 f0 n
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||2 K8 A  X. Z" j4 o7 Z
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;  \+ ~4 N% {7 M! y
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);/ A0 E9 |8 q' ~' Z  ?( g2 f7 v
  41. </script>
复制代码
  1. php6 ^3 [: P! Y, V" D! |( ]5 R

  2. 7 g+ {  Y0 f9 t' S+ A: l
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);
    + O. P# ~7 L) |  E2 S) D

  4. * Y. ^1 m: d6 j0 D3 N; e
  5. $server->on('open', function (swoole_websocket_server $server, $request) {3 i& {* \$ |  _5 Q: Q: f

  6. . ?7 S& Q- g8 a+ \9 m0 J8 z+ D
  7.     echo "新用户id:{$request->fd}加入了\n";* P1 j: U/ j( X" g. m& {5 J
  8.    // echo "server: handshake success with fd{$request->fd}\n";% z. c! \+ k0 f6 S
  9. });
    7 n4 Y7 o7 q1 M5 w/ b

  10. 4 G- Z& F- c+ M9 D
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {
    : }: u4 a8 F$ t* B
  12. % M1 h( C( A; e  X: k, b
  13.     //循环所有数据: V. D" U% N4 T/ i' ~. s, Z8 Y# g
  14.     foreach($server->connections as $fd) {1 D+ [" G8 F/ M$ j  u' d% D! I; T
  15.         //返回数据
    ' I- b& F0 C5 s
  16.         $server->push($fd, $frame->data);
    % f9 H6 e' N, f( }, U7 Q0 I( k
  17.     }
    - u* G7 u1 t' q4 h+ b( f1 A

  18. 5 W! F6 {" g" N4 P+ ]; G7 ?
  19. });
    . ~5 R# x1 N' }* W2 W* u  ^5 e, T
  20. 3 {- R9 a' O- Q1 b
  21. $server->on('close', function ($ser, $fd) {
    * d( U. B3 h8 R8 Z& ?
  22.     echo "用户id: {$fd} 退出\n";
    / |: `# P8 b3 c, t! O
  23. });
    ; r$ C; k! m5 P) `# [( |: L

  24. 6 h9 f* m4 o' ^  L) D
  25. $server->start();
复制代码

4 L. M9 h, Z  f0 V- i$ d' O% e! x3 }, F" @" ?9 r

6 E* C2 \* @6 q9 J2 _
& ~3 I0 T/ t4 A" p! ?* v0 h' o: ]$ L& o
* t" `; C4 o: a( }6 D: S* X9 o
2 s& A3 K0 e- I) `! }! }9 K0 X
$ l5 D. i; U* K# z4 i$ j# p( @

& A3 s6 x, B6 a4 f2 G/ ?8 y+ u" v
# O' E8 ?" K' G: @3 ]+ `' @: T$ s8 q5 q2 ]! h6 e" j

- Z# W$ m! }4 O. F5 O' s+ W  S
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-9-21 00:13 , Processed in 0.055053 second(s), 19 queries .

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