管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
|
主要使用 webstocket. r$ E2 `; s+ w- w" Z$ Q) i
上代码 前端 观看页面 - <script type="text/javascript">( E; G! o+ K. O7 r- Z0 m! E7 h
- var ws = new WebSocket('ws://192.168.0.150:9502');
& {- G/ F, ]$ N) q) d
( X* n7 e/ K! _- H( B- ws.onopen = function() {- `' S; r$ o3 a9 R9 N! W
- console.log("连接成功");0 j4 ^8 s7 V! K( ]( Q; v
- };
1 j6 c! B2 y+ b - ws.onmessage = function(e) {% _" P Y/ E9 Y+ b
- console.log(e);
2 ~4 |% o) X) Z g( e2 [
5 i4 S3 Y5 H g1 H- N4 r- var data = e.data;+ J( ^; z9 P Q
- document.getElementById('player').src=data;( M+ E+ I$ e# P$ |, s
- };
/ p8 m. W% s+ U! j/ e& q - ws.onerror = function() {
. N6 l: G7 |* J7 Z2 v; \ - console.log("关闭连接");1 x1 q1 I9 ?% ?0 u+ ]. v( c
- };% P0 i+ Z0 R9 r5 P8 `- c$ J0 c
- </script>
复制代码录像页面 : Y2 ^4 G) v' O# [5 s9 w0 \
最好用火狐测试。 - <canvas id="output" style="display:none"></canvas>; c% O' ]$ C6 M0 X$ `8 P
5 ~( X9 X! y l6 Z: T* e
/ l3 k$ h; Q& [3 y8 ?# O* \/ b: }- ( _7 s/ j+ |2 X% x% `
- <script type="text/javascript" charset="utf-8"># N% l3 M6 K; s$ l6 k
# G& F r. F" }. I-
3 q1 w! q" S) ?& J - var socket = new WebSocket('ws://192.168.0.150:9502');' ^; y6 g6 ?* G9 i1 b& j" Q9 I
- //socket.send("嗨我登陆了");# C% D, c% {8 Z7 }9 ^/ u
0 p, H! k, x, n9 g; }4 k, s* H- var back = document.getElementById('output');
8 U0 G% G& ~; F, P" ?1 L - var backcontext = back.getContext('2d');
3 y& _% e( K) g - var video = document.getElementsByTagName('video')[0];
* r) |9 k) O8 F5 M6 d2 ]; y -
9 H2 t4 E) Q% r& @* }4 p" @$ B - var success = function(stream){
+ L: W& r" M& w/ k! k8 Z - video.src = window.URL.createObjectURL(stream);* v4 S8 @- [/ Q4 S; b
- }
% L1 H5 R4 m+ l3 d \* e
- s" [1 q D" D4 p6 v* ~' l- socket.onopen = function(){
]- H3 Q+ i+ ^/ J1 J8 P6 ^# ? - draw();: k; k6 U" I& o- ^) C$ E
- }
: X2 s5 Y* K( E6 a; { - 1 o+ {$ s% d4 d) O
- var draw = function(){
; `. e& T& C( ^7 {1 X# w. N% ? - try{8 Z/ ~1 j- F6 d+ l* q
- backcontext.drawImage(video,0,0, back.width, back.height);
0 t0 B8 O. u0 U6 c3 ^ - }catch(e){7 T" f4 a) _% K' l! B: }/ |
- if (e.name == "NS_ERROR_NOT_AVAILABLE") {
: v! g! |0 q2 `8 F2 g - return setTimeout(draw, 100);% J( L' n# g3 @- @/ C
- } else {
2 f% O) w6 C( y, @8 D- B - throw e;) A% j; _5 x" j, j- V
- }, b3 d4 N$ V. }# r; I% N" i% W* C
- }
' ]( ]2 M) {$ z8 E. c) g0 D6 o4 A, X - if(video.src){
, c/ A1 i2 L5 H! A, V - socket.send(back.toDataURL("image/jpeg", 0.5));3 M" F- r! f' d) ^0 X' r# E6 c+ d* q
- }
4 P2 I: m8 @ n- p! ^ - setTimeout(draw, 100);
( |2 N) F" }1 I" x0 i% V - }* x$ t; m. I6 A% x. C& H- k( \4 i
- navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||
' L4 f+ v. E. n) C. X5 i - navigator.mozGetUserMedia || navigator.msGetUserMedia;# g* @0 b5 `# v0 y
- navigator.getUserMedia({video:true, audio:false}, success, console.log);
9 H! \$ ^* i1 ?+ [ - </script>
复制代码- php: x' x% e$ d* \# S8 W9 F
, h( {% F: M; ~6 `- c$ y- $server = new swoole_websocket_server("0.0.0.0", 9502);+ C" M. u! R3 y$ m
- 3 K: z, N/ }3 b" E; I/ B# D- R
- $server->on('open', function (swoole_websocket_server $server, $request) {
- { L" G) d+ g4 K z6 x: n0 c1 ?2 Q3 Y9 K - 2 D& @/ U Q0 z7 T- l* F$ M
- echo "新用户id:{$request->fd}加入了\n";: f* q; Y. L! u/ k
- // echo "server: handshake success with fd{$request->fd}\n";- A2 }$ |1 V5 Z8 G5 \ I" A
- });
4 }: Y; m2 ]. \" e% k$ f - * t- Y n, ]; f
- $server->on('message', function (swoole_websocket_server $server, $frame) {
( L9 D5 J( l; f" n - 0 P7 o2 w) ] T
- //循环所有数据' m9 _8 I2 E- }( Z3 o7 F a
- foreach($server->connections as $fd) {( m2 t6 H8 W$ a8 M+ y8 q" F- w
- //返回数据( L' v4 V" P Y% z
- $server->push($fd, $frame->data);
6 F8 X$ W( q/ j. { - }# o9 G$ R; S0 @) j8 p
* Z6 r/ y& n6 ^7 `* f- });6 M$ Z* ~1 w% Q3 N& A
- 0 I: X: g( D8 B% D, o# r$ @; s0 J( k
- $server->on('close', function ($ser, $fd) {
7 k/ b6 b4 }/ n' Y - echo "用户id: {$fd} 退出\n";
1 Z. D* x K6 i3 m+ D& W - });
+ ~0 X1 e5 o% H$ L4 w! U! [" D. D
4 ~) H0 D/ a; t# i: n0 E' Q- $server->start();
复制代码
# _6 b. F5 G) c2 f
" _% {/ ?( C4 n& _% x% R/ r5 |8 y( B8 p
+ ^/ E) E6 P4 f
/ n5 J1 t( y, C( e+ z# w. `# M: q. @1 C! s9 `
; A0 d' ], J/ i: N
0 |0 ~ [6 K# m5 V3 x" m8 a9 I/ }
5 K# a7 v: U( o9 s' x, U4 ^
6 D8 W: H4 m2 u) |$ j- ]; g# ]: s4 A( z9 n+ u, \$ S2 E
0 h0 z, Q0 E( g/ i/ }( P
& j1 x ?) q+ o4 _+ s% C |
|