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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket4 `/ I6 s( C& P) x# H7 d2 y
上代码
前端
观看页面
  1. <script type="text/javascript">
    - G& S; }# D  H/ C1 j8 i& g
  2. var ws = new WebSocket('ws://192.168.0.150:9502');$ R$ B: Y" V6 T# n6 M/ G

  3. 7 v6 ~3 k( K) }+ Y  C
  4. ws.onopen = function() {6 I# `1 d8 i* O
  5.     console.log("连接成功");
    # a7 ]0 ]) G1 T
  6. };; m* z1 ^& V0 h
  7. ws.onmessage = function(e) {
    0 r% W9 `+ o! ?8 v7 w
  8.    console.log(e);
    0 ?( Z8 ~9 b4 M/ _3 T9 e
  9. 3 l. x) k( o; {- i7 |
  10.    var data = e.data;$ i: @  [' q5 W% K4 i  b  Y9 K$ t8 j
  11.    document.getElementById('player').src=data;
    0 f/ m6 L" f8 q6 e' j0 J
  12. };9 i; g* ]4 f0 E9 t
  13. ws.onerror = function() {
    0 b2 p2 m/ {. @; G+ V
  14.     console.log("关闭连接");
    . W, O# b( B, S8 N' @/ V8 x
  15. };$ O7 Q' {* z  c$ Y( N
  16. </script>
复制代码
录像页面

$ U8 `& i6 R+ |' `9 P
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>; w8 L' v( f) U" r: I  a
  2. 6 c6 V  c1 k: V! A8 ?+ h

  3. 1 l  }) n' U, i+ A9 Y

  4. 2 ?2 L: n8 z' ~
  5. <script type="text/javascript" charset="utf-8">
    - c- K- g( g. ]! K- \% E# [  z

  6. 8 Q( R; P& m( h' r1 T8 x

  7. , o* n- F8 @: [- @$ x2 t# H
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');
    5 C2 L- |% D; U, o
  9.     //socket.send("嗨我登陆了");% C# A$ s! h& e5 b& h" b" I

  10. 4 [8 v# R' P  Z" f( O, W9 [
  11.     var back = document.getElementById('output');9 v+ _- U0 ^2 K* L  q/ H
  12.     var backcontext = back.getContext('2d');
      d+ N% J7 X: p" q2 O
  13.     var video = document.getElementsByTagName('video')[0];% X1 ~/ u# l* q  u5 \  C
  14.     9 A7 b; |2 l) v1 \) s# P, c4 p0 f- b
  15.     var success = function(stream){9 e- P/ E& S; N! B5 Q$ G
  16.         video.src = window.URL.createObjectURL(stream);' ]4 A# i7 M4 f! P+ D; W* D
  17.     }! m( }1 X, W! u, Y; f

  18. $ u+ d2 j6 q, m9 L# n7 r9 y
  19.     socket.onopen = function(){
    / i! {# L+ |, W, Z( N$ z
  20.         draw();  S0 ^- S9 C  |8 u
  21.     }. ~+ f5 I  h$ z* h. S$ U5 E

  22. & _; P$ W- ]& t9 b6 _/ x
  23.     var draw = function(){; w7 [- g) e' M+ `' B. Q
  24.         try{/ v+ @% y6 C) q- I" R3 D5 ^
  25.             backcontext.drawImage(video,0,0, back.width, back.height);
    / [" U9 d& S. z( X
  26.         }catch(e){* n; C$ I! a4 H+ `4 ?( B. `. w4 w
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {' G% C8 h! `. s' K7 G
  28.                 return setTimeout(draw, 100);) z" g+ M- I, c/ A& \, K1 y
  29.             } else {+ |* e8 P9 [. V! S4 `: z$ f, a8 J. P
  30.                 throw e;
      s6 x" Z) |. E! y8 p- O, K) ~
  31.             }
    , _+ M  R1 s& T1 v3 ^& ^8 X! E+ E) ~2 `
  32.         }
    2 W  L0 r# j1 t3 a" {# G
  33.         if(video.src){: \! Q/ X2 r6 O( o
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));
    , e+ |) V: F8 S# X6 d% F: P0 c2 o
  35.         }
    " c7 I- A8 u8 e8 g) @8 ~0 m
  36.         setTimeout(draw, 100);
    0 F) S9 Y8 O  @6 T
  37.     }9 s+ Z3 @. o! X% E
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||
    + f$ e( o) \4 S' N
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;5 i# g: {; t( N: C
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);; k! z* \; H1 A8 U8 ], w( w( p
  41. </script>
复制代码
  1. php' \) Z( G* H# ~' D

  2. 3 o3 O+ ~. M+ e- w
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);
    + ^/ J3 ~8 E% ~/ u
  4. 9 I  r# v+ A. R% i% j4 e
  5. $server->on('open', function (swoole_websocket_server $server, $request) {
    , ^% w" s, Q( G  W: t0 {
  6.   w7 x/ M3 T/ ^2 Y" Y$ E
  7.     echo "新用户id:{$request->fd}加入了\n";
    2 l; y. @/ l5 L& L
  8.    // echo "server: handshake success with fd{$request->fd}\n";
    8 r; v/ s% P( \8 m% m5 e
  9. });
    & D! X& Z+ f; S3 K
  10. $ n. f8 _6 V9 r. M$ u% m9 C
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {- x' ?6 x) p; |1 n6 z( O
  12. ; V1 T6 l$ H5 i/ z
  13.     //循环所有数据( k* _% Z' W, ?" A& o
  14.     foreach($server->connections as $fd) {/ _' k& n, F% s4 U
  15.         //返回数据
    $ W, g6 R/ b9 t8 I( D" S2 y0 N$ H8 X
  16.         $server->push($fd, $frame->data);- ]! m7 H) q8 T7 q- D6 ~& C
  17.     }
    8 n0 }4 |% e' [- C: ^

  18. - _, g  L( N' B" u# f1 n1 @7 f
  19. });) G1 w; x' E+ z3 r. f
  20. 6 v/ I, b. |: Z. j/ R* L/ T
  21. $server->on('close', function ($ser, $fd) {  J. w# H/ t- l) T+ g
  22.     echo "用户id: {$fd} 退出\n";
    & e. O+ M  a/ w9 r% o
  23. });
    / P7 Z2 ?+ O/ n5 [; }! @5 A6 c8 i

  24. : [% W3 r! f! j( I6 z
  25. $server->start();
复制代码

  q3 n4 g+ M7 ?; E
# W3 y7 R* c) A# K, k) z; f5 D
4 i. K, H0 U7 f8 b: Y% R3 S
) n9 M  F5 S( E
  ^4 e5 h0 J0 H( A; K- ?+ o# N2 m& w) ^
2 U4 t  q3 J6 r, m$ j( `  n* ?
; V# Z5 [& y6 J

$ X/ I  r4 I3 `/ b9 M5 e9 j" a8 m4 q, ^2 Y

: p, O  m3 f; A/ [1 p
9 g, a' h" v& c" r7 o9 o$ T
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-17 18:33 , Processed in 0.109637 second(s), 19 queries .

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