管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
|
主要使用 webstocket
3 ~ T2 J/ l. a% |, K上代码 前端 观看页面 - <script type="text/javascript">4 W1 j8 U5 s" k" p( J
- var ws = new WebSocket('ws://192.168.0.150:9502');0 H6 r7 g: F$ V8 t( Y2 J# Q @* i
- 3 @6 K1 W9 V% g5 F5 J
- ws.onopen = function() {
5 ~2 `2 p- r9 x0 z5 F - console.log("连接成功");2 R1 Y* q# W* B j7 n+ H% H+ n0 ]
- };7 c I/ @2 N. }( X1 W$ Y/ h: K
- ws.onmessage = function(e) {1 C' M" c7 z% K' z9 q7 L1 M! s
- console.log(e);: v7 l1 Y3 p6 R# S, `6 Q& j
$ B. e) w, e$ ^- var data = e.data;# x3 k: b* H# x [
- document.getElementById('player').src=data;0 n4 E) ]0 U5 v1 M/ T
- };* w7 q1 L8 `% K$ c, P! P
- ws.onerror = function() {
7 }5 u$ t. A1 `; Y% n - console.log("关闭连接");7 `% T0 ~7 J9 F- R i9 Q4 f* d$ J% q9 `
- };
0 R8 U3 C/ s$ [! L - </script>
复制代码录像页面 # O: w% A; G1 [, w
最好用火狐测试。 - <canvas id="output" style="display:none"></canvas>$ c( l/ h: E3 f3 i) }$ Q0 S# y
- ! u3 I3 Q* x0 c- P" I1 @: U
- 0 A5 U1 ?3 J3 ^! N7 c
- ; f, X2 S8 Z( g
- <script type="text/javascript" charset="utf-8">
9 W2 b) T4 W6 v$ L. V- z - & U1 K/ {, E! e( Q6 I
-
2 a3 k1 y) P, d- X0 i - var socket = new WebSocket('ws://192.168.0.150:9502');
0 l( Z3 w0 ~# ?/ A: g) G3 p" W' f& b - //socket.send("嗨我登陆了");% ^( N. [1 ]3 p5 Z
/ r9 W& z9 [( Z! J1 ^: Q- var back = document.getElementById('output');( s' @' J0 T8 f8 K% N7 m1 a! c% g
- var backcontext = back.getContext('2d');
8 z9 E/ ?$ k) \6 T. r - var video = document.getElementsByTagName('video')[0];! u6 ~* o2 G7 U/ `( J4 E3 |
-
* E5 X# C/ P: h - var success = function(stream){
4 r8 C; o3 O! _+ V( @: g0 h - video.src = window.URL.createObjectURL(stream);* Y! ?: U0 |4 B# | z2 g
- } O( h }& K# R. e7 N. R
- ( I% E! a! K. I+ c& a3 Q
- socket.onopen = function(){$ R) H2 M4 y/ P) O. O
- draw();4 `9 U+ l, p, U+ v! i- W( \* K6 g# a
- }
9 x5 }5 `# q' r$ Y( e
6 a F: C) Q6 ^) Q, g" Y- `8 C. [1 S- var draw = function(){
! S8 j( |9 A4 O6 Y' _8 R - try{
: F% e# V6 s& R: y; P - backcontext.drawImage(video,0,0, back.width, back.height);! A+ {: f7 k+ [
- }catch(e){0 ]$ a/ A% ?/ N; J- \. ~0 M
- if (e.name == "NS_ERROR_NOT_AVAILABLE") {
v+ ^5 Y# o; @1 e7 N4 V - return setTimeout(draw, 100);6 O0 K1 K; c4 V. ^6 n" E
- } else {
- E2 K$ b, Y2 }& _ - throw e;
7 u: E4 c$ _1 |+ L2 @ - }
3 a. i4 o2 }$ u3 d% @ - }
( o2 X2 C2 }. E O - if(video.src){
+ H. C+ E! U( D - socket.send(back.toDataURL("image/jpeg", 0.5));
0 F5 j; v. p: Q m7 u - }
+ g9 B" ?8 \! l0 m' |2 N+ \ - setTimeout(draw, 100);
: H- ~4 |9 c2 x8 K' c - }/ Y1 E9 O3 o8 }" U3 c0 \# y
- navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||
% E6 Z }7 r" y; V1 P& X* A - navigator.mozGetUserMedia || navigator.msGetUserMedia;
' j- E: F/ w6 k2 {3 d7 l - navigator.getUserMedia({video:true, audio:false}, success, console.log);
$ Y" M4 x* s7 D6 k - </script>
复制代码- php
0 G! U2 E+ Q; q7 L, d0 R6 o) U3 u - . }- H" z& W2 u T( p3 B9 y
- $server = new swoole_websocket_server("0.0.0.0", 9502);
: e" L# p+ Q6 c& S8 {7 q - 3 Y$ J" o O" E# s; A" k5 s
- $server->on('open', function (swoole_websocket_server $server, $request) {
/ J o4 V, D" E$ B - & l3 Z$ z M) @% R8 h) t
- echo "新用户id:{$request->fd}加入了\n";1 }+ W# g& v N9 g
- // echo "server: handshake success with fd{$request->fd}\n";
1 j4 n, I/ ]' J' U# ^5 D) m" G - });2 W' _( P! ]0 x* c+ B
* D G" S5 ] y& s$ \' z h- $server->on('message', function (swoole_websocket_server $server, $frame) {" ?0 b, H3 H- \0 m5 y' _
, t* k2 B1 a7 W* |' W! x* u- //循环所有数据
: Z0 x7 s+ b" _- a! [! k& o - foreach($server->connections as $fd) {
3 h- x6 h8 p2 Z7 x - //返回数据
/ u% ~. X3 C6 b - $server->push($fd, $frame->data);
) D g( b1 K0 x2 _8 Z4 h - }' I0 H: K! {* o# _! a" n0 g
" r# H- S5 l. Y6 q- });1 W" q% f* C+ v8 ~: G
- 5 R8 J- A0 H% ?3 k
- $server->on('close', function ($ser, $fd) {
) ~' G2 w, m1 c, O8 B - echo "用户id: {$fd} 退出\n";
& S q% _$ z" Y/ c4 Z) { - });- P, F2 [6 w7 v1 ^' ? |& K* E0 H
- % Y: i5 k4 N2 t B4 ~5 l. [% J
- $server->start();
复制代码 % k5 h* ~0 p8 \
2 m; k8 N1 W: v |& i
! a4 \& [4 N4 C$ p2 v6 \% ^8 ?6 J F; R& P
' J5 Q1 M6 z: S% _# K* R6 {" Q
+ a' y* j* y7 |
0 e- k: [6 J1 u6 k1 g9 S6 G' C g) y1 G2 t/ Y$ g
) e" g" w2 o1 w4 M
_2 f1 r! @# V; v( d+ D" B) y2 Y' m& E' T5 t
& R$ c2 [5 u1 G* Z. J L& `' @! o( k |
|