管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
|
主要使用 webstocket
. |2 g. D0 I: W O+ F8 h9 x2 x" W7 b上代码 前端 观看页面 - <script type="text/javascript">+ A/ m# z! E3 k$ [* u. @. a
- var ws = new WebSocket('ws://192.168.0.150:9502');8 q3 n& n( j$ b0 p4 N
) k8 T7 b) A3 ~- L- ws.onopen = function() {' h5 I; l0 x. |
- console.log("连接成功");. }9 f8 t4 h j7 |* M
- };
5 d$ b* f& n9 p. R ~( |' W' |3 u - ws.onmessage = function(e) {" }( |. n* l7 i6 _
- console.log(e);
, e# b3 Z/ w$ C3 r - / l9 u. h$ t2 U' E4 {$ |4 ^# d5 {
- var data = e.data;; b/ l' O2 f3 k. `% q
- document.getElementById('player').src=data;
' D+ q9 \, }9 Y3 t5 R- i - };
" ~3 |6 d6 }, i9 F. S/ j - ws.onerror = function() {# E9 V$ o9 s* L
- console.log("关闭连接");# f' Z6 }3 I3 t9 [3 p
- };' n0 d Y& J& w
- </script>
复制代码录像页面
$ D% Y& _; [$ N. D9 b9 j最好用火狐测试。 - <canvas id="output" style="display:none"></canvas>5 t7 l1 |. ^! ]
- 0 B% B( k5 A, G. ]+ Y
- - b) p& r" I, x( Y. x5 Q# t
- - V v9 s: m+ Y9 B8 `$ ?; e" e
- <script type="text/javascript" charset="utf-8">2 l5 e/ j. m( k( O
) X8 }( U# W3 E! ]6 u-
* b0 F/ _/ w3 j, J% k: L* s# j - var socket = new WebSocket('ws://192.168.0.150:9502');2 P6 @. p3 b5 [ ]: W- h& l
- //socket.send("嗨我登陆了");
4 F) X' d5 j6 m( N2 {) }
- c- u& H: C# t% E# O! b$ m- var back = document.getElementById('output');& r5 Z% M# ?0 X2 {4 @0 U
- var backcontext = back.getContext('2d');+ R7 ^* U8 G3 Q c1 z. |
- var video = document.getElementsByTagName('video')[0];4 G$ V# ?9 Z: Q$ d" I9 [- `: J
- ( C5 f7 s9 @- n7 }9 ?
- var success = function(stream){1 S: ?( P- b2 i% A7 R
- video.src = window.URL.createObjectURL(stream);
6 q- j% }, O+ M/ ] - }' u: B2 x# w4 G% p7 ^
% r2 N* A8 k4 }( ^2 B- socket.onopen = function(){9 E8 G& m; l$ h
- draw();8 o+ S, b/ k2 N4 Z8 I: L
- }7 D. ]( V, m: i" C/ N$ ~# J
) a: M8 N A" ?7 k; H Z- var draw = function(){
3 c$ l/ \6 N0 {# B - try{
3 G4 Y! h3 m1 q! k r- m - backcontext.drawImage(video,0,0, back.width, back.height);# R$ {$ N. Q$ ~' E8 X) W
- }catch(e){7 N5 q, E9 g8 ^
- if (e.name == "NS_ERROR_NOT_AVAILABLE") {2 M: p- p) G/ \& d4 R8 T
- return setTimeout(draw, 100);
6 x: }9 V6 B9 d - } else {
9 A, x3 G; M- b+ G( X+ c8 z0 w - throw e;
8 x: ~) X, a# G. {8 q1 j - }! j3 @7 [5 M8 e$ f+ a; A
- }
& G7 b8 I+ k5 I& z* L - if(video.src){
' G+ L. J# S7 @4 T6 [ - socket.send(back.toDataURL("image/jpeg", 0.5));
! V; ]. @3 ?. u1 g. J1 w$ w0 T2 a: a, L7 I - } @. L R# _, {( k$ q- J: X
- setTimeout(draw, 100);8 k. [- `( l: c: S# N) }% |' s) K
- }
5 q' |6 O7 d9 a4 @5 _ - navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||+ ]: ~" V' v% S5 N5 F. F6 E
- navigator.mozGetUserMedia || navigator.msGetUserMedia;
7 P- r+ J/ S5 k% k# j - navigator.getUserMedia({video:true, audio:false}, success, console.log);1 Q1 k: `- A$ V% H
- </script>
复制代码- php
3 C/ b8 a8 m4 r* |* x - ( {/ T8 ~. X5 q
- $server = new swoole_websocket_server("0.0.0.0", 9502);
" V" n( ~5 p0 }$ j- h
0 G P+ P7 d5 j* P- $server->on('open', function (swoole_websocket_server $server, $request) {' X M9 F' \$ T" t! Y0 R* Q% q
% Q2 K) @; X0 ^( f8 b% W; y8 I- echo "新用户id:{$request->fd}加入了\n";
( Y8 V- H; ]/ l% A$ Z8 { - // echo "server: handshake success with fd{$request->fd}\n";
) G |/ u! K I1 Q" Z' ] - });
4 H- Q* |4 g# a R& l1 @$ k - ) i/ ]" ^4 k+ u5 x* ~ _+ X
- $server->on('message', function (swoole_websocket_server $server, $frame) {
& e$ y: ~, P! F8 g' @) _; I - ) J! N) ^8 c/ g( _# o$ I3 S
- //循环所有数据. n- W* @& C# w0 P
- foreach($server->connections as $fd) {2 C, _$ F# g- G1 z1 k
- //返回数据
7 U& A2 G) b6 H& j3 K4 D - $server->push($fd, $frame->data);0 h+ O( {3 o0 ?) ]9 [$ \# k Y
- }
' U- M0 w: {& l( d) d- m
- _$ ]6 i2 V. u: D1 \- });- Q9 E) k- H p+ p
- 3 |2 |% \7 o. b. {5 k
- $server->on('close', function ($ser, $fd) {, i. E4 K2 f( z2 M
- echo "用户id: {$fd} 退出\n";
4 k0 Z: O4 q; [. ` - });$ @" z+ Q9 F) ~1 s. S& K' V. E. i4 _
! C5 g& l7 F: T- $server->start();
复制代码 : B% \5 V6 i: H6 s4 ?7 `, \* l
! @* c' g& R9 ]. ?$ D5 R2 `) c: a" j) U0 }8 }
7 h3 g* e/ S/ |# | @) X9 n
% j- s/ R& c6 @# s$ D$ p) u0 A& v, Z
( F9 W8 N8 z( Q" S1 b4 n' b3 S3 ^: l/ o! f' z& ]
( K# O, R) e( `% v% T
8 _& m W& U3 h5 x* y9 a; f) F& a- ?9 i& X# J/ P5 Q8 D
5 Z% ~3 F( \9 `4 T2 f# ~) G |
|