管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
|
主要使用 webstocket, k3 I5 h3 E5 A8 T1 T- X
上代码 前端 观看页面 - <script type="text/javascript">6 C% M* `8 [* Q( w
- var ws = new WebSocket('ws://192.168.0.150:9502');3 Y7 t2 c/ b4 v5 i) C3 e% [* O
- . i( s. \8 y5 _- K- [, [ u! @
- ws.onopen = function() {# ` [5 m( @$ u7 f. A
- console.log("连接成功");
+ f8 ]( [: k# O5 h' a3 | - };
5 X1 s6 t! L- B+ } - ws.onmessage = function(e) {
+ V- k( Z k5 X, ?/ j - console.log(e);
. ?8 \0 `/ x3 g. W1 G
5 f `, h4 j0 w8 n- var data = e.data;9 a! E# d7 R1 W9 T8 f. z3 }
- document.getElementById('player').src=data;+ S% k+ ^, C) L& G9 p
- };
& `; i/ {! U6 H3 O; Q3 p - ws.onerror = function() {; @2 }8 q' f6 y6 T/ A2 B
- console.log("关闭连接");1 V; [" F/ p* S% r% X
- };
4 @; b& G6 o6 y1 c) R% C - </script>
复制代码录像页面
" J; h9 Z: h' v. \最好用火狐测试。 - <canvas id="output" style="display:none"></canvas>' B, o3 L& }3 E& r
- 2 U3 \# A* @6 B3 P5 _0 _: o
- ( \- Q* l s3 } g) ]/ b
% d1 V" W% Y: R( f+ x- <script type="text/javascript" charset="utf-8">
9 P" ?. i; B5 |+ G$ y
1 S/ e k& Z0 ^7 B+ n/ r" Z3 S! H-
8 A) p! L5 k3 M: ]- T' q - var socket = new WebSocket('ws://192.168.0.150:9502');1 }1 ]5 V7 Q" P* m0 O ~# _
- //socket.send("嗨我登陆了"); w" w w; B& l6 b( @% @; K$ J
; m5 W4 _2 d; A3 k- var back = document.getElementById('output');
- q8 N& ]% Y3 G1 _" a+ c8 h$ ] - var backcontext = back.getContext('2d');
8 w% q1 Q, ]4 h2 G$ Q% x! Y - var video = document.getElementsByTagName('video')[0];
/ a4 O P9 L6 Z/ G5 A) t& B - ) o/ y' p8 A/ z: Z
- var success = function(stream){
. I) c% \5 p1 u V - video.src = window.URL.createObjectURL(stream);& _3 h5 e R1 E& f3 m: ]* v$ q g
- }) i& V3 q3 h* F9 G# J* _
$ W0 W$ o# [, z" z; W- socket.onopen = function(){
6 ]2 B/ [* Y% C. ~ - draw();! J& f" T% \ d8 Y! Y% w1 g
- }. N3 ^- H1 C6 z
- ; P2 W+ f5 Z9 _/ E- e
- var draw = function(){ U9 _) Q" O- D0 K0 t
- try{" A& @; f T6 J# P1 O. @4 w9 x4 T& g
- backcontext.drawImage(video,0,0, back.width, back.height); w# O# H3 I* T2 m* \, ?& Q# w0 w" ]
- }catch(e){" v2 Q2 h1 r$ A5 L
- if (e.name == "NS_ERROR_NOT_AVAILABLE") {7 e1 O8 ]; X5 V j' e
- return setTimeout(draw, 100);# ^, q! ]9 G% u g# D% I2 ?5 j
- } else {
( M% g! A6 u% c8 J - throw e;
& ]; {* C; ]; [9 f - }
9 ~, j& l( L* x - }% v6 q2 x) Z+ n2 F* s
- if(video.src){% f9 H/ N! H+ a& m+ D1 o2 y, a: G
- socket.send(back.toDataURL("image/jpeg", 0.5));' y: Z9 C% C+ c$ W. i' g
- }
) A6 |" ^# D" L, f6 ] - setTimeout(draw, 100);
) s+ g- z& {6 R - }
6 p% [+ m1 D: K, n' ~, }: @ - navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||6 D( a( m9 e5 k- K9 U) ~
- navigator.mozGetUserMedia || navigator.msGetUserMedia;
3 F# y1 Z" B0 _ - navigator.getUserMedia({video:true, audio:false}, success, console.log); i& S+ V0 z5 X/ Y, P5 n1 E
- </script>
复制代码- php% G& h! V7 m# {8 |8 a) |# k2 G
- 1 V& y) a c9 b! O! Z4 m3 @6 C+ M& V) {
- $server = new swoole_websocket_server("0.0.0.0", 9502);
* O" c! ~- W' L - 6 U- r2 {- M( O. Y* q
- $server->on('open', function (swoole_websocket_server $server, $request) {
+ a. ~2 F: E8 r& o! k. \
- |) y9 ]" l% }& Z( f- echo "新用户id:{$request->fd}加入了\n";! \. a$ w# m- ~! Y) \- X
- // echo "server: handshake success with fd{$request->fd}\n";
3 K! g0 d7 H( h8 W9 k# D+ L - });6 L4 @$ I4 O7 ~$ x w
- ; c+ B, ]& p" K" K7 I3 K, e
- $server->on('message', function (swoole_websocket_server $server, $frame) {
- y0 i5 i6 i4 t0 V% y9 t ]' W) b - ) G# C7 u# L1 B$ g% r
- //循环所有数据* [' x* m2 q& o$ @
- foreach($server->connections as $fd) {
" m) _; o9 n% Y% @* l - //返回数据6 w% i ]: v- l
- $server->push($fd, $frame->data);# {& m# ^# J! v/ f6 f% Y# t/ K
- }
& x& ] U% {' a+ _6 u& L - : O5 O% U5 L( w" \# r
- });
' H) q+ E8 d" P; h7 d - ! {) ?' V4 `% ~3 i& u; }5 |
- $server->on('close', function ($ser, $fd) {9 ^: l/ z: t: L* Y9 z
- echo "用户id: {$fd} 退出\n";1 t& ?% S7 i/ O9 s9 V8 A
- });" Y, V' v4 n; P" t) L, N9 g/ m
- o3 z. T0 o2 X! P, L6 }
- $server->start();
复制代码 , w/ }* g! J0 {" t
* b) h% d8 M- [0 W' J6 J) B6 ~6 ]3 r: o5 j% a# ]
: k" j) D6 u' W5 K; y7 w8 p B& M/ H1 Z) r
3 I# b3 D( d4 Q& a6 ]; g3 B$ Z+ g
. z' S# A" y7 W0 h: \
4 d( L3 j3 M( i! R# }$ @
# ?( f" z' [5 f( a" p4 M& K: Y" V6 R. u( [3 `1 w/ C' j
9 T: x# m. L8 J) ?9 m% \8 j
|
|