|
主要使用 webstocket, P2 k9 A, W; l/ a* U/ m
上代码 前端 观看页面 - <script type="text/javascript">
( b( F4 c" }% S0 u - var ws = new WebSocket('ws://192.168.0.150:9502');" H7 X* W2 ^3 u j# S0 D" f
- 6 X; T/ E! @% C- f) c' F
- ws.onopen = function() {
" j5 ?8 [( J# A! B/ m$ _$ \ - console.log("连接成功");& Y! ^/ c9 F6 Z/ q: r H! L
- };6 a* A Q7 d1 d8 k5 Q3 Z) D) s
- ws.onmessage = function(e) {7 Q/ x: u* Y& {* c8 G* }0 v
- console.log(e);
, H5 M, c' }* }5 ~; n - " y+ b. v# h5 a; [7 Z
- var data = e.data;
& B6 }! O- ^, W4 z- m - document.getElementById('player').src=data;
0 h$ |- m& b, I) ]" i _/ [7 l - };
) f% P& q2 B# M0 z6 j4 S - ws.onerror = function() {
6 V8 C" T" w2 z2 A$ r% M. F - console.log("关闭连接");
8 L: j1 X. P3 b - };* v' X. O6 {) z
- </script>
复制代码录像页面 ; Z7 C9 T/ f1 r. ^, i' w: {/ z# B
最好用火狐测试。 - <canvas id="output" style="display:none"></canvas>
6 A" x+ }3 L8 B6 V8 @4 i" v' R - " ^- K8 o2 {: C# f* V
5 K. x' w5 j# E- O
5 ]; F" D1 ~: `! A' b/ ~- <script type="text/javascript" charset="utf-8">3 J4 F0 t, X' [/ v* J7 t6 i5 u2 o: A' h
$ A2 q$ F; E' n2 I) ^' x4 R& a8 h-
8 s+ P8 m" d0 l) j0 t - var socket = new WebSocket('ws://192.168.0.150:9502');4 D$ _! T$ i1 p7 A/ A+ n; y
- //socket.send("嗨我登陆了");
5 E) o; i0 ?/ f, ^4 X' f7 {6 h- e/ a
( k' z( h* ~9 H( F( @( x- var back = document.getElementById('output');
: y8 N( W- e! J8 O% v5 G' q - var backcontext = back.getContext('2d');- p. ^& K& s/ T2 J
- var video = document.getElementsByTagName('video')[0];$ D5 O7 p, v- Y/ B: N
- 2 B$ i" o& H5 R& r+ U
- var success = function(stream){
% t# A. l: J5 v+ s. I - video.src = window.URL.createObjectURL(stream);! e0 k% y1 d; v1 F# ]7 z5 Y9 c& E
- }
) L- T/ L: t1 F C - * A& k/ g3 J; d! L8 s
- socket.onopen = function(){
0 P& h) m O; P. e4 ~: R; m; E+ g B - draw();+ ~1 v. b( E/ q8 q
- }
4 `( E/ e6 R5 @: L2 z. L7 r% W; ?
! r. b, P! P4 \& M6 A& v s- var draw = function(){' V6 g2 X7 d7 q. p3 ?0 Y. d
- try{3 M- U1 ]' L0 i0 J" z
- backcontext.drawImage(video,0,0, back.width, back.height);
) E" c! s c/ z g+ V5 O8 K+ k' g- q - }catch(e){
6 W6 }; U6 l$ {0 |- M4 h - if (e.name == "NS_ERROR_NOT_AVAILABLE") {) X; L) L- c e) ?* e; q. L7 m1 |
- return setTimeout(draw, 100); C, F: M$ ~6 d; i+ Z" s
- } else {9 y* w- M# k- I0 f. Q7 P2 i6 T
- throw e; m) { Z3 p# l2 N8 g
- }4 n0 l+ i7 v7 P- {
- }, I$ _. N4 m: F1 p5 W& s. @9 S
- if(video.src){( o! @5 T. M0 u, c8 F# O
- socket.send(back.toDataURL("image/jpeg", 0.5));
& L) Z& N6 G0 P$ b6 K - }
5 [" f% k6 m5 `4 V3 T' J9 u - setTimeout(draw, 100);8 |1 o* y' B' P9 ]" H
- }* i0 s/ I' _8 T2 D' k8 H
- navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||9 X! x5 F4 v) Z5 ~! N/ @
- navigator.mozGetUserMedia || navigator.msGetUserMedia;: U: J( X) S! s5 |9 @
- navigator.getUserMedia({video:true, audio:false}, success, console.log);
- M# S. j" b, L - </script>
复制代码- php! E# j5 u. s* j, }# a
- 4 E4 K5 {; m$ @$ M A* @( w+ F
- $server = new swoole_websocket_server("0.0.0.0", 9502);
; W! z, J6 W4 q+ k) w4 v! e - , x4 t5 m/ t* R6 T7 q
- $server->on('open', function (swoole_websocket_server $server, $request) {1 F5 N* B* D0 j* ~5 ^* `% r5 p: `
, _1 v e+ N' W) l3 L- echo "新用户id:{$request->fd}加入了\n";; B8 J0 i: x9 {
- // echo "server: handshake success with fd{$request->fd}\n";
/ X% |( X# G9 \5 @1 e: k" i - });
9 n( I4 g9 ~; z4 f" L! `; N - I x% ?, | P. f! G
- $server->on('message', function (swoole_websocket_server $server, $frame) {* M! f* X9 m( M; r/ Z8 T, o/ i! ?
" t+ P- o3 A2 r- //循环所有数据' O Y2 w. E* V: t) f0 c6 t) o$ `
- foreach($server->connections as $fd) {% R9 `4 o: z- s; ~; B7 @9 o4 r O
- //返回数据& D0 F7 j# h2 B$ ~
- $server->push($fd, $frame->data);" _- g# ~, ]& i2 k+ f* ]8 i9 U
- }, e# o( E/ K! b. t1 r) Y
- 9 K i0 W$ F- Q2 X, q
- });
8 _+ z) v% U0 M7 R3 a! `" |1 I4 x
& Q) d1 U/ L" \1 v) W- $server->on('close', function ($ser, $fd) {* Q! ^- H+ e0 A
- echo "用户id: {$fd} 退出\n";& K& G* M# L5 ^
- });
# _/ |3 P- Q$ o) L5 b* Q. v! T4 k - . B+ g/ }' @% b0 h% z1 u5 a- `
- $server->start();
复制代码 5 ]: |. ]" a" t; B$ A! T) x; I
; O. o$ J2 N: H4 U: F0 ~2 L% v* N% k3 U4 p! [
8 g& u8 o. j4 X. p3 P; \% R) D7 V6 u+ x+ f1 D: _4 c
: P) U8 s) f" O+ D1 L- ]
6 l4 y( L/ j( x
$ z P: a: E% Q% B- w8 A
& K8 {4 F- s4 o9 c* p1 v6 F: R. @' l$ w f
' G% T/ ~9 K4 m. Z5 C% E) D3 Z
4 s+ U8 i- s% l% H& R9 d
|