管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
|
主要使用 webstocket. \1 |) ~+ F/ K) |; ~8 e! J; y1 N0 w
上代码 前端 观看页面 - <script type="text/javascript">
, d) w0 B! p/ }" _ - var ws = new WebSocket('ws://192.168.0.150:9502');
4 A. E, M( f3 i- H2 D. a - 0 Q5 n5 t' C8 F& ^) @: c8 H
- ws.onopen = function() {# ^' k1 L+ S! ~& R2 D
- console.log("连接成功");
4 b5 r1 T$ C3 r3 U - };
" j6 X ~: `( K7 B! G! F! ` - ws.onmessage = function(e) {, Z( A e! m5 f3 i" U; ~$ r8 Q
- console.log(e);
) V1 X3 n1 B/ W1 R! k0 z - , d, L9 R0 a9 c) Q9 ^, N
- var data = e.data;6 S5 r' d7 [: s* F2 A4 B
- document.getElementById('player').src=data;
% d* m- O. i9 T$ C - };
# d+ W4 p5 v ^# D - ws.onerror = function() {
+ V5 B4 {4 w T% C1 \/ V+ I% ^ - console.log("关闭连接");
# Y3 a$ T* f7 c( j/ ~ - };
/ D ~6 h, r% I: @. Z/ J8 K - </script>
复制代码录像页面
2 a/ ^( Z5 u" G最好用火狐测试。 - <canvas id="output" style="display:none"></canvas>- D" e* q8 h, Q
- . G$ p9 I0 M. h* g& C8 x! _$ s
; D, ?3 H2 R; c1 h* {- l& ]3 A2 y7 B7 J2 V
- <script type="text/javascript" charset="utf-8">0 P" l. S* I- ~1 r2 Q7 C
- ' n) x! S2 c: ^: W/ E
-
3 P) b2 w6 o4 o% s* v! u3 M - var socket = new WebSocket('ws://192.168.0.150:9502');% @9 j% X& c. o
- //socket.send("嗨我登陆了");
" S' Z( W! N' @* H" m
- G% e, A$ W9 D- var back = document.getElementById('output');) o. l+ q8 f3 }" P. O
- var backcontext = back.getContext('2d');- G3 x, V; A" t. c, \2 n
- var video = document.getElementsByTagName('video')[0];
3 i& W& s! {1 ?: l* K8 a - " g, p6 E! i' |( X9 Y# p! ^) S
- var success = function(stream){
) J9 o* i2 Y, q+ r. i! V$ O - video.src = window.URL.createObjectURL(stream);6 C, x/ z3 H0 J/ |5 P; {
- }
; |9 w7 i+ Y* t7 c - - Z4 _2 P6 s* ^) Z W
- socket.onopen = function(){
( u0 |; h! ^* K) v4 ] - draw();
: L# ]7 G& V3 X - }
1 @8 B5 Q' I" v+ Z" z8 u# p" e
0 Y" V, y x5 ? M5 O& d/ g9 Q- var draw = function(){+ ~; J" k8 \0 Y) o: _/ t) U
- try{2 Q4 o) F( H: C* h+ e' X
- backcontext.drawImage(video,0,0, back.width, back.height);
0 X' m: g* Z' o$ ~% u* w: x8 o+ ? - }catch(e){
( |/ H2 c3 j- V* e0 T' I \; b - if (e.name == "NS_ERROR_NOT_AVAILABLE") {
- A1 o8 ~9 y9 h - return setTimeout(draw, 100);9 U; j- Y7 W+ ~0 ?& }: V9 o: r
- } else {
0 R9 h+ E: |$ }( r9 A8 u - throw e;: t. n, x8 L/ h4 b5 T& d
- }
6 e% ?! f- _: o - }
$ K# u/ |1 P$ D) C7 U; a - if(video.src){
/ s2 g8 e! d. O! ~$ S7 g# S" d) @( d - socket.send(back.toDataURL("image/jpeg", 0.5));
$ S( L1 c Z+ q9 I - }
' i$ H! v7 {) T+ E& I - setTimeout(draw, 100);
8 N* y7 Z+ _0 J6 z9 `$ W9 Y - }
. z3 c. A3 ~; e8 ] - navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||. M) h3 b/ y7 j7 x% X7 H6 b
- navigator.mozGetUserMedia || navigator.msGetUserMedia;
/ ^- |+ }( Z; Z+ R1 S) |# v0 V - navigator.getUserMedia({video:true, audio:false}, success, console.log);
! ]8 T) k9 F7 m5 [: H6 V - </script>
复制代码- php3 ]- c4 j" ] w4 {
! i6 ~& B( U$ A( n' M7 W. }; s: C- $server = new swoole_websocket_server("0.0.0.0", 9502);
J, ~3 ]& z4 U" `$ U. a- Z' o: S - ; Z! M* @1 g' y
- $server->on('open', function (swoole_websocket_server $server, $request) {% P+ T' O/ x: v3 c
$ b4 q2 B* ?5 p- D4 }% u+ A+ P- echo "新用户id:{$request->fd}加入了\n";8 t g3 U; b, |, z& q6 `& |
- // echo "server: handshake success with fd{$request->fd}\n";
9 m# B) X+ F" ]' G6 c! L# F - });
: p. T+ q- O* ]( g, x U c7 V - ' \. Q( y. a% `7 h+ q
- $server->on('message', function (swoole_websocket_server $server, $frame) {$ F6 ~. N/ z3 V; a
& z1 I$ R3 G* y8 J+ v- //循环所有数据
- M, j8 d7 A, D. l& N- N - foreach($server->connections as $fd) {: D" E( H+ m0 x
- //返回数据
' o' l; |6 P \/ L& C) q' F J - $server->push($fd, $frame->data);
6 Q1 q% Q( _) N5 D - }5 A$ H! ?" z3 F0 ~
- % P+ F4 G5 q2 p
- });
' z1 U: j/ k; J8 v! }. B
) Q) r; p3 n! f, U& G) m- $server->on('close', function ($ser, $fd) {
, F: H4 U. c; \/ ^) R' w - echo "用户id: {$fd} 退出\n";' z; [9 a0 o4 @% t/ G4 c
- });1 v& C7 P5 Y+ Q9 v8 ?
4 I/ a+ l* _4 @- $server->start();
复制代码
0 H$ A. p: N7 Y# z) \1 ?3 h& D8 x1 w9 Z2 G
6 J* `8 \) e% l( g+ D" C
, L8 w, K: ~& t2 Z' ?; \/ u: `9 Y+ e/ U- t7 T% X _6 o
: a# U5 t% r& x, M* I% r# P
7 @0 J% q; k9 D0 k# l" w9 v" Z4 N4 {& N# z: i# J" n6 A
2 E4 k; ~, y% b7 ^; d5 g
2 n6 i* y% T/ i3 x, U! y$ o& ]! O- K# J8 r- E7 U
) `7 A# A9 @3 T# N
|
|