主要使用 webstocket; E, i2 @; r8 h% n, C0 Q7 O2 i
上代码 前端 观看页面 - <script type="text/javascript">0 l& x8 c1 u1 z' d
- var ws = new WebSocket('ws://192.168.0.150:9502');2 ?6 u- p( \1 [1 b. j5 s' w+ s
/ E0 V% G) e- q9 N) V- e6 h- ws.onopen = function() {
2 U% \8 P2 H' `* P5 r+ { - console.log("连接成功");
8 z4 o/ _# w0 X/ _ - };: C+ b9 h) r9 b4 a, c
- ws.onmessage = function(e) {! ^% M1 L! z. @9 `
- console.log(e);
' z: i9 [3 j; n, y( c/ b$ l
/ N. n+ v1 H* Z% R8 c: w- var data = e.data;7 L* ?2 s6 q3 w1 z* S
- document.getElementById('player').src=data;/ y2 O/ u1 x! T3 u) b, a; P3 ^
- };
# b0 L0 [0 N u' j7 v3 d" T- e6 b - ws.onerror = function() {8 T* d4 N4 O0 C# a
- console.log("关闭连接"); j1 t3 f! \( R0 m% w M
- };
* B5 U- p6 ~9 p# A! i - </script>
复制代码录像页面 6 J X( Y/ E- l
最好用火狐测试。 - <canvas id="output" style="display:none"></canvas>& t% V& b3 `1 \
- 4 {0 ]& A/ J* q) ^4 V5 M9 h
+ H2 {5 ]1 D6 ]" m' Z- 3 ?/ n! t' ?% y8 T
- <script type="text/javascript" charset="utf-8">
. W: I s& }, t( g0 I
2 Z. k( e6 p, T2 v; z- # n. ], \7 c! t ]; c
- var socket = new WebSocket('ws://192.168.0.150:9502');
) N9 `" X( Y4 Q u# P: _( \$ z - //socket.send("嗨我登陆了");
$ m$ s+ i) Z9 H- }7 h
4 t" e/ p# ]$ ~5 E6 N) R+ p3 Y- var back = document.getElementById('output');( k) s9 F3 g/ w; a4 J% f5 J
- var backcontext = back.getContext('2d');
$ X) {9 ?4 q2 K( H6 n - var video = document.getElementsByTagName('video')[0];6 d3 i" ]# l" C! ~- S8 s8 W. B; N$ u
- 6 S H+ a' ^2 x/ j
- var success = function(stream){
% k7 ]9 \% q) Z/ a0 w - video.src = window.URL.createObjectURL(stream);5 \3 @: S" O) q. X+ o0 b" T
- }
9 W5 M! _! n8 j( v* n) a
' H" a% }. H& |$ U& \5 o$ j- socket.onopen = function(){( r" u7 O0 w& ~, v/ P7 A% t1 K' {
- draw();
2 H+ W8 S1 t+ d: Q* S, S( |4 A. x4 E# F - }" ~ e% p R1 y- t4 \0 ]( e6 K
- ; n( t+ y! u" ^3 V: C# Z( e" e2 j
- var draw = function(){" w$ `# e0 |: ?2 J& ]# Y! L
- try{
% q; w6 [* @$ ^! V. r) u* s - backcontext.drawImage(video,0,0, back.width, back.height);! j7 ~1 T3 B L6 l% h9 h
- }catch(e){6 q% C6 L* `# Q
- if (e.name == "NS_ERROR_NOT_AVAILABLE") {: p. k: m' C; A A# ~" h5 V2 K! [
- return setTimeout(draw, 100);
# R7 F8 {, u" h, g; W* U3 Q - } else {* c( }+ r! X; s9 V( L6 k8 y
- throw e;
2 h: V1 g; b2 N7 C - }
) o* | s0 b% `' I- a) [& |. D: D - }; u, P% q- |: D& l
- if(video.src){* H9 X4 F1 a9 X7 j7 B
- socket.send(back.toDataURL("image/jpeg", 0.5));/ }8 _6 }' _0 A7 o* y
- }
) s6 T& J) g5 q8 s9 G - setTimeout(draw, 100);* f+ P( g# Q2 O8 O0 |
- }$ r9 C6 E' S$ H$ \9 @- }) O2 P
- navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||# X+ i' O$ w4 @+ L& }* v
- navigator.mozGetUserMedia || navigator.msGetUserMedia;
9 o1 W, o9 r0 n" u- |. ^ - navigator.getUserMedia({video:true, audio:false}, success, console.log);
# B) G; F0 ]' z; R+ ?; N# Y - </script>
复制代码- php6 O4 N3 F L. C9 e! o; B
- " R/ _2 |+ P' j, J
- $server = new swoole_websocket_server("0.0.0.0", 9502);
" _" d1 M* R" `0 ~9 f3 `( e
% V! q# [# T) c6 d- $server->on('open', function (swoole_websocket_server $server, $request) {
) d" H3 V7 M' @9 { - " _3 D/ ^9 _8 v$ E
- echo "新用户id:{$request->fd}加入了\n";( l0 q& g0 E0 n8 U( W
- // echo "server: handshake success with fd{$request->fd}\n";
. y: E+ n. y( |- o4 W( `9 K- M$ \ - });2 f! [% s5 {4 I
- 9 D) R' ]! C7 t4 m, m3 ?' G9 s e
- $server->on('message', function (swoole_websocket_server $server, $frame) {
1 X3 c0 H3 @5 y: ]) b - 4 |' V# P0 O' i5 ~6 e' D7 p' w! J2 n
- //循环所有数据0 C+ ?' {% I4 c! z( ?9 i
- foreach($server->connections as $fd) {2 b/ e, h- m6 _
- //返回数据) {9 v0 W0 J8 J
- $server->push($fd, $frame->data);* O7 j' s2 Y# L [0 F* F, b
- }0 b* Y% _( M; ^! n3 l
% P9 B/ O' j0 ^- w% Y3 D- });( ^: [: w4 ~1 P& R) [* d+ B/ G) j
- ( d# ^9 Q4 m$ a x6 b
- $server->on('close', function ($ser, $fd) {2 d# [) Y: f+ h; E$ v
- echo "用户id: {$fd} 退出\n";" M7 _1 b' Q! s4 p9 {2 H% P
- });
1 m' c5 f+ x7 A- v! f& ~/ F0 b - / K l: o/ R# G$ c, a7 z
- $server->start();
复制代码
+ b5 `% A) w1 l$ y2 |* C( F- e& o# C+ J# y( g
( {, ~5 P# r: J# W& D3 D
6 l. B+ s. [# k/ u, H& W0 t, K% S6 g3 W
7 B% a7 N7 G- |& p+ _: J
4 B% M5 d, f- r0 p( T4 ?( U. S
d+ P2 e7 V/ K2 e: z6 a- F3 A9 M2 c
% h- `, J! W& { t* m9 ^
; C% h: s! r& x X! c( W; g1 P6 ]% `. l$ q, M
|