管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
|
主要使用 webstocket
) P( Q; m1 j1 F' v& g# |上代码 前端 观看页面 - <script type="text/javascript">
$ C# w* u1 Z9 t4 ?& z5 a) v3 I - var ws = new WebSocket('ws://192.168.0.150:9502');
4 \/ V; _ j1 x - & w# n( {4 p4 L
- ws.onopen = function() {
P6 m- k B) Z' ? - console.log("连接成功");; x- ~. i- F7 K z
- };
4 y" M: r0 w0 |# r0 N, U. s p* E - ws.onmessage = function(e) {
6 o6 N' q# ^# K/ x9 R# o - console.log(e);
( n0 ]/ E# U2 {' d- s) j/ {
! m {5 M9 _6 L- var data = e.data;
4 m3 h8 Z7 v" [+ I- M - document.getElementById('player').src=data;
2 Z0 Q2 R4 u3 Y5 _& e0 Z4 R - };
$ z1 W, {0 ]0 i* ^/ D0 ^ - ws.onerror = function() {- U) P1 N& u2 U
- console.log("关闭连接");
& X |6 o9 l% j% w' d/ ~. \ - };& r& G6 t0 W# ?" d0 p+ \6 w" B, q O
- </script>
复制代码录像页面 ' F% M( m; e5 X5 w
最好用火狐测试。 - <canvas id="output" style="display:none"></canvas>8 t0 \$ N# z5 |" ^0 b# d2 B
- $ e2 G7 S3 r: t# V0 |! @& f
9 B; {/ x* e: `+ ^9 s& c4 J5 M
6 g% v3 S& C3 D- <script type="text/javascript" charset="utf-8">
1 O0 [( ]5 l+ }: t6 \
( Z2 g) a! g7 J5 }+ G5 d3 C/ @2 d-
3 N1 v5 l# g: X) _8 r - var socket = new WebSocket('ws://192.168.0.150:9502');! A, R. x- r+ `1 H8 w8 o
- //socket.send("嗨我登陆了");# x, K. d4 W7 G, {
- % u3 o" e% N1 t5 c9 Q R1 L
- var back = document.getElementById('output');6 z; {9 e1 v; \ @ ]* r
- var backcontext = back.getContext('2d');
: W( O0 n6 i0 C8 ?0 E3 }1 l - var video = document.getElementsByTagName('video')[0];
9 ]5 z5 E- [3 j( g' R -
2 Z9 | I0 U$ ~( u; M' V - var success = function(stream){7 z( z5 ?; A5 ]# E; z" z
- video.src = window.URL.createObjectURL(stream);
9 D5 N" B9 v3 p& R - }
+ x. B7 F/ `- r' C; [ F. T
, d6 ^9 D& F6 |2 s8 Q- socket.onopen = function(){
+ j! m: d* O* b5 F& `5 L* A - draw();
8 C' j- Q; G& |: t" A - }/ ^1 m i* o7 s' o/ F
% @& C- A2 E# i1 ^5 Z( s- var draw = function(){( P6 o4 _- e. D- G" f- `
- try{
( Y% M) [% v T - backcontext.drawImage(video,0,0, back.width, back.height);) f* j8 f @$ r) T5 q( a! P
- }catch(e){
. u+ \( b) p1 A2 |' s - if (e.name == "NS_ERROR_NOT_AVAILABLE") {2 X2 p* }) q/ o4 R1 V
- return setTimeout(draw, 100);
! u1 }9 C4 P; k- _ - } else {$ D3 w5 C4 u, P; g( X3 @
- throw e;& R. {, U; L A, Q6 R) X
- }
. E% u. U" p# U" v4 }" P# E0 w" N - }
" r/ B4 t& W9 { - if(video.src){8 d; ~7 G, `: [7 D* S/ \
- socket.send(back.toDataURL("image/jpeg", 0.5));
$ j* M# U' k/ ?! M7 I0 M& F- B - }9 w' R0 ~ z# y/ V2 F) Y1 E
- setTimeout(draw, 100);! [+ e3 B! i @8 C: j; K2 X
- }8 ^! k% b# S, K$ W
- navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||
) [, \! e, I, E* e$ {" k - navigator.mozGetUserMedia || navigator.msGetUserMedia;
7 G0 s* z+ x7 ~5 p' l7 |+ i - navigator.getUserMedia({video:true, audio:false}, success, console.log);; f3 Y! |6 N' ^- b2 C
- </script>
复制代码- php# ?) X2 Y e0 ^& v }6 T N
- K3 Q3 H: U) B; }3 G; ?6 ^" T- $server = new swoole_websocket_server("0.0.0.0", 9502);) o; g2 E3 S$ v: i8 `
- 6 ?' V5 s: m' A8 C7 J( g' ]
- $server->on('open', function (swoole_websocket_server $server, $request) {
! R" I& x+ [; W+ p% T
b% b& w& H# C& |: k- echo "新用户id:{$request->fd}加入了\n";' L- b1 X- l" D' V
- // echo "server: handshake success with fd{$request->fd}\n";
& `+ p: U, Q4 g# |/ E) z' o - });
9 i0 M2 A+ ?7 L' [' ^. x! F
) d6 [ B1 a% X- A- $server->on('message', function (swoole_websocket_server $server, $frame) {3 W/ i$ w6 O1 S' {2 }
- * u6 T; t% D; S+ g( K# H8 K" G6 G
- //循环所有数据$ t, I4 h8 @: k2 g
- foreach($server->connections as $fd) {
0 C! h2 h- _, X* t' c - //返回数据
1 r* W5 ^, s/ I6 b5 O) E - $server->push($fd, $frame->data);
* S. U) w0 N5 O( g3 z9 D - }
; L* ]& Z* h+ Y1 c3 {; W" U1 E: C - " q1 N5 u3 s. r* E! c7 G
- });
+ M3 {3 C# V0 u3 A0 O2 c. K7 R4 J
8 V5 R% Y2 O, L' ]4 K M& S- $server->on('close', function ($ser, $fd) {
& G" O* j4 g" h# ]) j3 s9 [* u1 h5 h - echo "用户id: {$fd} 退出\n";
& d E, i* \( N - });; ?4 @4 g2 x) p9 q5 A
- ( C$ H* l% D8 ~8 h, _, T- D
- $server->start();
复制代码 + {4 d. t) ~1 I* p8 t" s
; m5 ~2 I. h/ ~ `! |% x9 e
$ A# H6 N" ~! Z' y. _
- @' m+ f+ |$ E* d7 ]' x1 k6 X7 b2 P* l5 O
7 ]' F# B' Q8 _5 X) q
# C& y4 N( F- j) V5 s' V3 E4 G- U: B: C V( u
2 R+ U1 k2 I) `; g
& t1 k* u h. m4 x0 c
; U9 G. U0 o7 O
: C* o1 h* t9 Z4 G0 f$ I0 |# H* ]9 T9 r! } |
|