管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
|
主要使用 webstocket. {& ^% h' A' F$ @' Q; e
上代码 前端 观看页面 - <script type="text/javascript">7 F. B5 P2 ~6 K1 B6 k# z/ j
- var ws = new WebSocket('ws://192.168.0.150:9502');3 l/ [+ ` L6 S! ?, O
- {! k4 Z8 g6 Q) J4 S
- ws.onopen = function() {
1 O0 q: N; R6 y) i" `5 b4 [ h - console.log("连接成功");0 _( @5 Z3 W9 y. o
- };8 S* ^' t8 U; D& l6 I7 h
- ws.onmessage = function(e) {, ~ p& `" G( |8 _2 Z' q( S, g: m
- console.log(e);
. \1 T( P: }5 f1 \) o - . F$ J& o3 e8 q3 ]
- var data = e.data;& Y O) Q, a) n1 {* @
- document.getElementById('player').src=data;7 b |* o2 s) E
- };/ X, u) K, ?. o; t4 h3 D% q
- ws.onerror = function() {
. ^1 K* B- d8 a: J% S - console.log("关闭连接");
- ?7 w/ X5 i! Z - };4 G$ v) E+ d3 x6 R" r0 h t1 v
- </script>
复制代码录像页面 3 V7 m% a" x/ _# K! H
最好用火狐测试。 - <canvas id="output" style="display:none"></canvas>
8 l" d8 @! Y! v2 `
4 k! C6 ^3 r' I8 M2 p) e- U) L
0 T8 J6 _/ _9 H+ C8 g4 l
* H. v" F) f' A# O: F0 a- <script type="text/javascript" charset="utf-8">2 t) I7 a7 r3 a( c
5 S& J% e& L# y: o" W4 L-
* {- [$ i1 z4 C* h6 ^7 X/ A - var socket = new WebSocket('ws://192.168.0.150:9502');9 K" x) T) i# u' L+ U
- //socket.send("嗨我登陆了");
( E! d: ^) ]& H/ L, Z+ ^ - ' b3 p$ W% K) B, A- I5 m- F
- var back = document.getElementById('output');
. W, c$ v' u& w- O% I - var backcontext = back.getContext('2d');6 @! A5 N( }5 h" q% Y/ F. Q" r1 H! h! N
- var video = document.getElementsByTagName('video')[0];
) X! k# c' ]" K J: G5 s( o0 o -
" ~. a* ^9 E: d8 A6 X; y% A8 }& v - var success = function(stream){) J: W, r: K& G. [; D4 a
- video.src = window.URL.createObjectURL(stream);
( q& k" ^2 b; @! \ - }+ I+ x; x$ @+ Z" l q9 u2 F% o
- ' L. H# {: z; b# Q3 f
- socket.onopen = function(){( e0 g& T/ s; I1 N+ @7 ^) e
- draw();
6 @$ w ]: }6 C5 W - }/ U9 k9 Y7 H' _& ]* \; |: _% N
- $ E5 W$ D0 L" J& k9 I, E
- var draw = function(){
+ K" h: u( a& B2 L - try{
8 M: M; c+ |) h. q6 M+ O - backcontext.drawImage(video,0,0, back.width, back.height);
2 c2 S; @ ]9 D8 K8 E8 O# V - }catch(e){/ m* ~% J) m. S2 c* F5 ]& i8 q
- if (e.name == "NS_ERROR_NOT_AVAILABLE") {
8 {$ b n+ [! E6 i( b - return setTimeout(draw, 100);1 l% _: U- W7 t2 \
- } else {- c2 o& n6 N7 F6 B
- throw e;
; V- ]+ [6 ]" _5 ^ - }
! e7 l a0 J# G- |2 y9 g: q- |) e - } x/ u U0 R+ K0 H. ~' G
- if(video.src){
- Z5 K2 `. B; h - socket.send(back.toDataURL("image/jpeg", 0.5));
5 U' V& n9 q! a' r3 f) v( L - }0 {/ Z" A6 I8 ?( a4 R" y/ Q1 i
- setTimeout(draw, 100);; x4 |3 m# f0 D& o7 d
- }
; V! F: Q, w# n- _' d- I - navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||, a: U; j' n) Y' y: F' s
- navigator.mozGetUserMedia || navigator.msGetUserMedia;0 w0 I4 f% Q1 [0 i( k- C+ G3 S
- navigator.getUserMedia({video:true, audio:false}, success, console.log);, W$ M7 S* N- }
- </script>
复制代码- php' e* _2 O; O% m0 ?
- : V" a% X6 y' W' Q) \
- $server = new swoole_websocket_server("0.0.0.0", 9502);9 n& l. {$ W/ P4 i i( E2 b
- . M7 G5 Z. d `/ c: K4 b4 v
- $server->on('open', function (swoole_websocket_server $server, $request) {
L2 X7 x w) d0 ? - ) l. n8 D" z$ L) Z7 u& C
- echo "新用户id:{$request->fd}加入了\n";
5 g1 j5 p: O: I5 | - // echo "server: handshake success with fd{$request->fd}\n";& t$ { L; C( F g! w1 E
- });% ]2 m# |" a- w( V' N/ ^5 J; q" G) n
' @+ \. \: T2 m$ |- X, a- $server->on('message', function (swoole_websocket_server $server, $frame) {
$ {' d6 p% ~ M5 ?/ {/ Z4 L) P8 ] - 6 g4 {/ e0 _* m% x+ [7 R3 ]% b' q5 g
- //循环所有数据, q5 N- `# S6 Y1 w( c3 P
- foreach($server->connections as $fd) {; g" `( n, s6 ]( g, m. `
- //返回数据" `& z/ \( \ V( v# L
- $server->push($fd, $frame->data);
" h& I1 c+ t& X! h7 e - }' O7 ^ Q; w/ U p& Q9 l
- . r5 K6 ^! [4 Z4 {6 [; z
- });+ S$ ]8 z3 h& h$ C1 r: A# K e+ v4 T
- 2 R/ S- x9 ?% P: N! m
- $server->on('close', function ($ser, $fd) {- l+ F V0 [: }9 s! H, p9 ]3 T" L
- echo "用户id: {$fd} 退出\n";$ N& D/ p& u. @5 \1 ~
- });; n6 ]# V0 C2 W" ]6 B
- 3 V0 K+ _3 P7 o2 X0 b
- $server->start();
复制代码
. y# y% E% I3 o/ ^3 m; i, x k5 e" w9 Q( U, g
0 V9 c4 L* j/ L) b$ h2 i
1 ^: }2 Q2 b( W. x6 g; N$ f, ~+ o8 F7 U7 ]$ Y; |0 p m
) K1 Y. c+ A- E4 l3 C
& \; t a3 F$ K. K' L3 S& j: ^
% o2 {: t* J! I3 s# H+ q+ [
7 s6 Q- I" z- R& s+ h5 k
0 C. W; c, I$ q& G) \3 z
& N1 n( K4 i5 j
$ b; b7 C* A5 v5 N |
|