|
主要使用 webstocket) y. m, x& z* j4 h: Z6 O, ?
上代码 前端 观看页面 - <script type="text/javascript">
L7 V- u/ ^0 w% t - var ws = new WebSocket('ws://192.168.0.150:9502');1 z2 q2 C' @( |
: b' Y$ i6 R# M: z- ws.onopen = function() { I# ~; m. D5 P) i
- console.log("连接成功");
. Y5 R+ @4 n; z% _, p$ J - };2 f, n. F- p7 p
- ws.onmessage = function(e) {% }* V# R5 P7 b; }- V% h2 p8 Q
- console.log(e);
2 ~4 k5 C8 ]0 j2 ~5 @* r) w
0 d2 [3 g3 l. F# b6 P- var data = e.data;: H* |: l* p n5 X7 i0 J e
- document.getElementById('player').src=data;, S7 r+ G6 S% c7 z4 E5 k
- };
# i1 Q. q. M* ~' J1 g9 b2 Q3 G3 N - ws.onerror = function() {
' Z5 Y4 z0 x0 `7 w2 \4 ?2 l7 S - console.log("关闭连接");" u! Z$ W" @4 b# \5 |4 k) q. T
- }; p! W5 T9 z9 t% o F6 h; `
- </script>
复制代码录像页面 9 ]0 }! L+ [" k( K( a
最好用火狐测试。 - <canvas id="output" style="display:none"></canvas>
3 _2 N# w7 x2 }; O4 h
, S! c1 G7 I$ [) c/ a9 X- $ e& ^% R3 V; F! \. N
- ; G A- ~2 ^1 I6 i9 K
- <script type="text/javascript" charset="utf-8">/ \6 a6 z/ r3 d/ W3 i% l
- / m% G0 _& ^: Z9 Z
- ( q$ S* K; L. I% m; T) S
- var socket = new WebSocket('ws://192.168.0.150:9502');
B8 b3 x7 F- `* l4 x; B - //socket.send("嗨我登陆了");
0 @* o) d& u7 M; |6 p - 3 N- p: x% L% v7 a! U4 E4 V+ r
- var back = document.getElementById('output');
! m3 b6 O5 Z+ {, N) h" T! Y - var backcontext = back.getContext('2d');8 {) ^' V. v0 `% e" l/ A- e$ W
- var video = document.getElementsByTagName('video')[0];9 m2 M5 S: I! L( u
- 6 _6 t9 y2 q, S- U+ r
- var success = function(stream){
) P* w4 y, n. O+ P- ^ - video.src = window.URL.createObjectURL(stream);9 g' C4 N- J8 V1 j @
- }
! [' @0 K; _) G" H% s( w- } p - / K+ L4 |8 x/ k9 S0 f/ j8 l( E6 V
- socket.onopen = function(){$ n8 A8 O- H: K
- draw();: l3 i( Q/ z2 @7 b
- }0 p V$ M% z" g
- 6 }3 o" a# |, v9 g- W+ D
- var draw = function(){$ T- e) t/ I/ {6 C( ~6 p6 W8 }9 D
- try{- l ^3 J# i* \( {3 {
- backcontext.drawImage(video,0,0, back.width, back.height);
4 e9 o1 h8 C, N3 M2 `# e3 w - }catch(e){
) c4 T4 k; s4 A: ]9 ~6 r1 f - if (e.name == "NS_ERROR_NOT_AVAILABLE") {3 H+ Q2 \' Z4 N3 |2 L8 j
- return setTimeout(draw, 100);& F- J8 i4 A" p/ o: [3 m4 X: P
- } else {
& Y. W& W0 n) @% ^3 d' \ - throw e;
0 S% Z& f2 J" s' t% _+ j - }
- F; E6 p6 r4 l a - }
( F/ ^( W. ?3 n: G x$ M8 S# E! W - if(video.src){
# O s9 C" _2 i) Q: } - socket.send(back.toDataURL("image/jpeg", 0.5));# |3 f6 p! ~( b. \9 J
- }
?% W! y& h* n! j - setTimeout(draw, 100);
" M& [; W, L+ D" V - }
! k6 z( B# I: z. ~ - navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||
8 Q$ ?- m5 R. M - navigator.mozGetUserMedia || navigator.msGetUserMedia;+ T L: y2 o/ F* }6 n
- navigator.getUserMedia({video:true, audio:false}, success, console.log);' O5 a4 q# e' x; u4 j4 k
- </script>
复制代码- php
2 v! a, ~( Y; y5 M9 f8 x5 [
/ Z7 t* k6 n/ i- $server = new swoole_websocket_server("0.0.0.0", 9502);
* n0 [; \& `. N( x/ {; V0 D9 O3 ?
, P7 K* M: y& ?& a3 ~0 G( V% C8 T! e- $server->on('open', function (swoole_websocket_server $server, $request) {
( G% S! S ]6 r+ V7 ` - ( j2 w3 V; a+ }/ Z" s# Z! ~
- echo "新用户id:{$request->fd}加入了\n";
0 c( f% C$ U4 q. m" w* Q4 I. V - // echo "server: handshake success with fd{$request->fd}\n";
* i& b: ~2 u( c$ `6 c* t - });
1 i, P' U! Q8 N+ M$ a4 y2 k - ) ?2 R) N6 `7 Q6 S9 l% y
- $server->on('message', function (swoole_websocket_server $server, $frame) {$ f" A1 \2 c3 `% |9 d
- ( Q {9 o* n6 [2 A' @
- //循环所有数据
- m' b2 m8 u8 g0 S" K" _% }6 y - foreach($server->connections as $fd) {7 d4 _0 w4 x) v2 Z" o+ ^
- //返回数据
+ \- C8 ?% R9 O3 J4 g8 N' ~+ O( } - $server->push($fd, $frame->data);
, w3 h8 U" A0 p. s& Z - }
- M" [5 ~* n' ?! g: N# [
& E& Z: O* F! F* L& @- });
: o# ~" p- c7 A, f' N! Y4 Y
4 S, w3 V4 ~' h7 Y- $server->on('close', function ($ser, $fd) {3 M; @: b$ Q& e3 U
- echo "用户id: {$fd} 退出\n";' C9 e: }: H @" x
- });
$ H. B' ]. x0 F: o
! N+ L3 L' ^. j- $server->start();
复制代码 ; z3 K- _$ Z, Q$ t) j
' \& B7 c5 q4 g* y8 b
4 Q. r; m' x! m+ W6 m( \' \$ O/ E x! Q9 ?. Q6 W+ [# P
, f! }; }. y2 S* [, ~4 e4 U/ [7 M9 ^4 s: D( _ S
2 |+ m0 @* |. ?/ k& g$ S7 C4 l" K6 N9 M% |9 e: B% C
: b2 V" i4 E" ~9 U0 V! J4 I# y4 v0 R' Y6 X8 s; l- O
7 u# x3 v9 f- h( l9 w2 F' ]# u% C3 Z; S1 c/ B
|