管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
|
主要使用 webstocket: ?6 P8 d8 W, ]( t0 u
上代码 前端 观看页面 - <script type="text/javascript">% l: f& V+ \- ?, w
- var ws = new WebSocket('ws://192.168.0.150:9502');
a% ?+ k' V2 V* P' _
" \! r$ A& ?, C0 ?8 P' a- ws.onopen = function() {/ L+ B7 H7 H( c0 `" Q/ @
- console.log("连接成功");3 g/ s! Y1 G4 C& E! P
- };. C. l$ z) C- t3 ?0 b5 ^% f
- ws.onmessage = function(e) {; _* @) D! a+ }, Y6 E
- console.log(e);
+ i& ]- N ]9 p5 U
2 k5 f4 J9 `$ R' \2 h8 k- var data = e.data;3 P7 j$ w* K3 d9 I: w
- document.getElementById('player').src=data; P" H/ e. Y$ |
- };4 ~( I% n% k9 y
- ws.onerror = function() {
7 M2 m: B8 U# z3 t, K - console.log("关闭连接");, T, `; b; [& B2 l9 s$ r5 M
- };
1 D$ |, h. c8 v, {1 | - </script>
复制代码录像页面 ( A6 t- E+ B# a! g' A4 P- T& P; s
最好用火狐测试。 - <canvas id="output" style="display:none"></canvas>+ j, B3 l& S0 x& r. p4 n5 G
- / D4 T/ |$ f5 _" S. p
- 1 N0 w1 }' x0 k' ~
- + G$ _* n0 x1 R3 {* t- S! Z1 k4 W
- <script type="text/javascript" charset="utf-8">
8 C, J- N# J3 }/ l! u4 Y - ! c3 l( O: `; S' K
-
9 l3 n: p( b7 a) Z) ~0 L) c3 ?2 ` - var socket = new WebSocket('ws://192.168.0.150:9502');' n# |+ m+ X5 j! L
- //socket.send("嗨我登陆了");
2 J" h9 Q% i) w1 g
( Y& o9 `7 \7 {2 Z. g( D- var back = document.getElementById('output');* S' `* L; ^+ @
- var backcontext = back.getContext('2d');' u% t; t. r$ Q8 r, X- w- y
- var video = document.getElementsByTagName('video')[0];- L: H' E5 d8 }2 U2 h+ H' x
- ! J: Y2 ?7 o5 b5 R& F& q
- var success = function(stream){
i9 y, `" u9 h9 x - video.src = window.URL.createObjectURL(stream);
6 o) w8 J4 c& n - }2 X$ H% X3 @: D8 i4 o; L
- 3 ]/ o) L- q% y& _6 V! f2 W7 i
- socket.onopen = function(){' u$ j- t9 g' X9 k! w
- draw();
: W+ x9 r u7 O5 l. D# o- m1 d - }
& Z3 f U' u, Y% o( M
8 m2 J8 v9 J0 E- var draw = function(){
! _3 N. c: C7 ?2 k+ u& v - try{) O/ }: @! W4 l- h! [' b
- backcontext.drawImage(video,0,0, back.width, back.height);
- c9 E! u3 s2 W# c0 m! A* ?& F - }catch(e){
7 e8 |: F o% }* i - if (e.name == "NS_ERROR_NOT_AVAILABLE") {
% e& S( }1 r( s8 Y3 n; Z2 g - return setTimeout(draw, 100);' ^1 z! J4 C* d4 H* K4 r- T% _% M
- } else {
) t( L% g) l) G# _5 {' ?% C - throw e;
# b& C9 ]: v, m5 L1 U, ?. ` - }$ G4 a* p( O/ J+ L( P5 u P4 r# z
- }& q, E: A9 [/ C( s5 u9 C( b4 y
- if(video.src){
6 @8 o: P7 q* `2 L' |5 ~; ~ - socket.send(back.toDataURL("image/jpeg", 0.5));- N$ [: p$ W7 G
- }
7 Z; c0 K6 M8 K. O! h( c- w# R - setTimeout(draw, 100);
! @- i o; B( J) r* X' H - }. A9 r' _. {5 a! n" x
- navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||
1 p) z9 y" k. _! T+ x- D - navigator.mozGetUserMedia || navigator.msGetUserMedia;
; L5 y5 _* ^4 \: j% F5 }' a - navigator.getUserMedia({video:true, audio:false}, success, console.log);: n2 ?8 i2 v7 e! R& O
- </script>
复制代码- php
& N! w( V9 k; U1 d* P
, N0 Z0 x8 U( D9 y6 ?% {& f" B- $server = new swoole_websocket_server("0.0.0.0", 9502);
|4 I6 _2 n* ^/ o - ( S- Z. N1 x! d" l: u( h7 C% P
- $server->on('open', function (swoole_websocket_server $server, $request) {' k+ w }0 p3 N! n
5 T. @+ g+ C% Q- echo "新用户id:{$request->fd}加入了\n";
6 E5 L1 d$ H7 D0 R. g0 L4 G+ M - // echo "server: handshake success with fd{$request->fd}\n";
' `7 r- m( D: p3 K - });' R8 }1 d% U8 M6 J9 q+ i
) Q, d* n8 R* X- F) A- $server->on('message', function (swoole_websocket_server $server, $frame) {
, x0 e# W1 O% t! p8 C
( [8 p9 D4 C! }" }8 y- //循环所有数据" a9 n4 M1 C) x" O7 w' o
- foreach($server->connections as $fd) {
* Q1 P- [* |3 K7 }. J' r - //返回数据 j- f8 D; F) [) v9 N1 k4 q. w4 B& d
- $server->push($fd, $frame->data);3 y! _1 V+ @- @+ x
- }
& @+ ]% d4 l5 B2 {( T& ~
8 v0 {8 _; p; O2 s% x! \% }" Z8 z" S- });
- r1 G) o6 M3 O! E+ I4 z - % ^ p W* o! V+ b: N9 I
- $server->on('close', function ($ser, $fd) {
7 u. }- |, U" T! Y: W, v - echo "用户id: {$fd} 退出\n";% `1 o( h" _/ ~( A2 U
- });7 g6 n+ o, {# |. f" a y
- + |0 B1 W1 V) v0 Y2 s
- $server->start();
复制代码
4 a/ e# m6 M/ {4 T: S2 X# P% J: t( V6 \% b% r, n. ~: u$ r" _
8 e& ?: h# H6 d9 ?- }. G/ y# L1 } T$ K& a7 u' {" n- m
4 p+ v* L" l- z& K4 M) t
* i! @* i1 e5 U0 F) S4 l+ \4 {) S- l. t6 Z$ n
2 k. o9 t8 Y, [1 t3 Y5 ], i
/ A4 k2 _1 `+ T
3 D! i- N, r4 t5 `6 I0 ^( a4 \8 p ~5 V
0 B( Y7 J0 F! L8 h4 T' X) o |
|