管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
|
主要使用 webstocket
6 y/ N- ^2 F9 V0 o上代码 前端 观看页面 - <script type="text/javascript">/ y$ C w( G$ ~, F7 o% Y
- var ws = new WebSocket('ws://192.168.0.150:9502');
5 k2 w; \' B0 E
, @, d0 e; |0 C' A) U, |2 }- ws.onopen = function() {! x" ^1 o: `+ ]2 Y; X, G- }5 e
- console.log("连接成功");
) |: d* R+ g7 R6 U0 B0 G- ~! ] - };3 H0 ^9 ~* g! ]* b1 I
- ws.onmessage = function(e) {
- m' c% D" X. Y - console.log(e);4 h" L- k* ^* z: ]
2 e8 r, d) E0 }$ Y# l2 F& P- var data = e.data;
0 U+ g1 Q {' n; J8 m; J, [1 @ - document.getElementById('player').src=data;
9 J2 G( f, L V- }( ?- y9 j) U - };
1 ]+ y/ [ e# S( x! o, B) c - ws.onerror = function() {
0 d2 A5 h5 S+ b* v- V0 A - console.log("关闭连接");
! o' V# y" m: \! R- C- L0 T# @ - };) d S. i0 I1 B0 \9 R( ?
- </script>
复制代码录像页面 ( p5 {4 M4 i% i% V$ i& v
最好用火狐测试。 - <canvas id="output" style="display:none"></canvas>5 e ?; [- e |% Z! ]+ p# Q/ z) a
2 R- {, L1 ~0 D8 ]! t; N& Z- . \2 J# U0 ^& a: i# w
- [% T8 `3 \$ X7 k& P( F' b
- <script type="text/javascript" charset="utf-8">
% h& Q9 U3 y; ^- K" G: _ - % O* c) a; g! u q$ ~+ w
-
' q7 p0 B0 Z7 A( Y4 h: Q1 E - var socket = new WebSocket('ws://192.168.0.150:9502');8 K+ J) p! x4 H3 E2 q/ M. @
- //socket.send("嗨我登陆了");5 V% u1 l+ m8 E. L8 x2 n2 L
9 ]- U5 T" ?# k: ^3 j1 j7 p) H- var back = document.getElementById('output');
9 b7 g" k' |+ |9 ~ - var backcontext = back.getContext('2d'); \- i7 a1 w" M
- var video = document.getElementsByTagName('video')[0];0 n5 k) L. n: g2 r. b
- 6 e! \6 W% z& G
- var success = function(stream){
" s& L% H+ j2 i$ V) K/ v( c4 p8 U) W - video.src = window.URL.createObjectURL(stream);1 z/ X9 S% K% Q% s( Z- `% n6 g
- }
; Y5 h/ t" V/ m/ V# o
' J4 ^; J0 q; _5 s5 G- socket.onopen = function(){$ i9 V: r3 s% Q) v+ Q1 A8 H
- draw();
2 F( S9 v: u- ?4 x - }3 N8 b4 l* I/ ^( ?4 `3 [! p
- 5 \6 G1 M$ q% ]( ]: w
- var draw = function(){
, J; G1 V0 D5 h% y7 I7 D$ j - try{3 w$ |1 [2 k+ A9 \9 A
- backcontext.drawImage(video,0,0, back.width, back.height);
$ [' N L% w) u+ N - }catch(e){, X9 B6 |) c1 b- S- }' C
- if (e.name == "NS_ERROR_NOT_AVAILABLE") { |2 g" {1 S2 u
- return setTimeout(draw, 100);
F6 o( d8 V. @. { - } else {
- q. T% [' `* H; V3 P' F - throw e;! G* R6 n; J1 H
- }
; e0 {' N* h" g - }
~' ^ X4 f4 P- N* } - if(video.src){
0 R' h6 q: ?+ p" ? - socket.send(back.toDataURL("image/jpeg", 0.5));
8 ~# }9 {4 s/ F* [9 u/ c: E5 r6 T - }) N5 ?: N& U5 I! W/ |+ y% B- e* `& W
- setTimeout(draw, 100);
7 G0 I0 K4 Z# Y- N' v; B/ N - }
9 V' M) G, D- `3 y9 ]9 w! ? - navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||
+ P) l, D: l3 X& ~& \ ? - navigator.mozGetUserMedia || navigator.msGetUserMedia;
0 t% \+ q E; v, R - navigator.getUserMedia({video:true, audio:false}, success, console.log);
, Q: k' }) R0 ^1 a* N+ a4 t - </script>
复制代码- php: [+ R2 e# W1 |2 O; `+ q, s
- % t& o- {/ o. o* l- R+ m
- $server = new swoole_websocket_server("0.0.0.0", 9502);
3 P; T, Y8 t$ _% w( f
- q4 H' v- `, e( s# n% ]( r7 s- $server->on('open', function (swoole_websocket_server $server, $request) {
7 \0 y h: Q5 c/ R, n - 2 P( A+ z0 q6 t, b9 l
- echo "新用户id:{$request->fd}加入了\n";
, c5 C; |4 }3 k t - // echo "server: handshake success with fd{$request->fd}\n";) T+ a. \. ]( \1 A+ N
- });
( [. a: L& t2 h( l
8 x! _; U. l" P3 r3 W- $server->on('message', function (swoole_websocket_server $server, $frame) {' a3 s3 k* z, E- ?; g
' u" {4 t# c. B1 M# h- //循环所有数据5 x' T( j/ A% b( C, X% E
- foreach($server->connections as $fd) {* X# Y# R. d+ C2 M: Y
- //返回数据
/ n; p$ p8 S. ~& A - $server->push($fd, $frame->data);
) C9 }- r: H0 L! L - }
6 p# _" ]& I! j6 ?/ D4 ~% \
+ l. k& d+ r/ j* t2 o- });$ E) K; O" w6 H' h( b) _( q
- + A9 t6 }0 b, B8 e/ P6 R9 w
- $server->on('close', function ($ser, $fd) {! x4 w) f6 A/ ~% Z
- echo "用户id: {$fd} 退出\n";" S$ O& l1 k9 Q9 S- M
- });
% u1 p8 b1 J" \; w
7 v/ Z1 t5 o+ [( N( @4 W- $server->start();
复制代码
* A1 b; E/ R; P2 v: W" V4 M1 {8 R2 I* c2 R0 Y* U0 f+ L+ C
- Q0 H, q& O2 ]% s( S. Z6 Y5 [/ j+ J, o/ X5 u
5 ?; n. i8 m" X4 J1 N* V) i: [+ q# u
! w! V6 m! U( ]1 o" I
1 X: X |! B2 U$ {1 o& f8 v/ h4 Z+ V- b* j7 ?
( U+ W( Y/ ]% W% K& H
5 A) |+ |% D$ J( u& }5 C% C
+ m( y0 U- Y! O* h+ j/ k, n0 M |
|