管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
|
主要使用 webstocket/ k k: S! c" b& ~
上代码 前端 观看页面 - <script type="text/javascript">8 T' n: H+ ~* F7 m; k) D2 I4 S
- var ws = new WebSocket('ws://192.168.0.150:9502');
9 b% _1 s1 O; e9 i# U - 1 y6 f: ^3 A/ j' A
- ws.onopen = function() {
* W/ F& z2 `' V2 G4 ^5 a' Y - console.log("连接成功");
7 [0 E, S! W9 \5 k - };. A- |7 G9 j% l6 X
- ws.onmessage = function(e) {3 }$ A0 P) @3 w
- console.log(e);
3 g6 D3 n$ {2 \: | F/ W$ b8 L) \
?( ]5 y! p7 q& b- var data = e.data;4 b/ C/ @% e8 a& E6 o$ C
- document.getElementById('player').src=data;
* Z( I9 A3 ^% C - }; P# q) _6 T: v$ x% B
- ws.onerror = function() {
8 K+ X, k& ~/ t& Y/ N V! G - console.log("关闭连接");* G; [3 ^) p2 x8 p* G
- };
7 Y4 U9 U7 x: N# q - </script>
复制代码录像页面 8 q) j9 A6 P0 N* N
最好用火狐测试。 - <canvas id="output" style="display:none"></canvas>
- U1 J7 A% W; v R& m - : r; j0 K0 g% w& K1 j5 f
( J& n L( A! \' C6 |, L+ ]& Z- 9 H" @2 Y8 L r4 {' U+ F, I# { m
- <script type="text/javascript" charset="utf-8">0 x) G# R1 A. T! P% b7 y+ @9 |% _$ B
- + A2 ^ H$ ?: Z" B1 u
- ! k2 R+ y x8 k$ Y1 C/ j
- var socket = new WebSocket('ws://192.168.0.150:9502');
: i1 t" o- Q7 x - //socket.send("嗨我登陆了");
w, B2 M3 S! f* s; p# R9 V- d - 4 h! q0 S2 \( d1 K% y
- var back = document.getElementById('output');
' V7 h, D2 B9 Z& d! `( e/ L - var backcontext = back.getContext('2d');
2 ? _* Z0 @1 C) o - var video = document.getElementsByTagName('video')[0];% W+ R. h! x$ C" A# [
-
/ D9 O0 e) F! o1 d6 L! I% p% s - var success = function(stream){- {7 \% x7 H8 h- z$ m6 G
- video.src = window.URL.createObjectURL(stream);
0 H9 ]7 Y5 j. u b( N4 M - }1 ?8 S D* x) j9 @# l2 W
- 2 I& f, h2 A, g
- socket.onopen = function(){
- g* w( z* |5 \, }% | - draw();
7 T5 [+ ~, C* |: Q! Z# C - }
5 G6 V D6 U4 r0 h/ P+ g
$ |; v g: {, U* \$ G- var draw = function(){
w$ ]- s& h: H F* I- {1 Z) A - try{
' T# j2 q1 _# y/ d - backcontext.drawImage(video,0,0, back.width, back.height);/ S3 {/ j+ X3 u
- }catch(e){
) B5 i m$ C2 X8 V - if (e.name == "NS_ERROR_NOT_AVAILABLE") {
- R3 j% R9 ^% @ - return setTimeout(draw, 100);
# t1 x& r/ S8 w( H3 g/ t - } else {& U! k1 c J9 J) B5 Z4 S
- throw e;
4 |- R% F! |& a - }1 h9 M, ]( N% o' H1 X% B! c" G7 W. l
- }
# a9 P: J2 z3 f' Q: y- N - if(video.src){
" W3 ?9 q Z' X( \ - socket.send(back.toDataURL("image/jpeg", 0.5));; v- L4 G0 X8 ]5 N
- }
9 C+ s! | Y2 b) ?; c. V - setTimeout(draw, 100);
! s, F3 |5 I# M - }
3 J# I$ g+ j$ E0 y% W - navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||
( h3 L# ^2 _- z# I5 ~ - navigator.mozGetUserMedia || navigator.msGetUserMedia;
" Z$ V' l- ]; t% v. A - navigator.getUserMedia({video:true, audio:false}, success, console.log);
8 R; a1 v) P0 R% w, v - </script>
复制代码- php
. m+ g! G* n# u6 Y9 d - 1 ` ]7 t; m0 z$ m7 c
- $server = new swoole_websocket_server("0.0.0.0", 9502);# Z8 n T: h4 ~) t
- ' e _, V3 U" Y
- $server->on('open', function (swoole_websocket_server $server, $request) {
6 N/ c z+ b4 z0 y
; D5 g! p- O& K1 X- echo "新用户id:{$request->fd}加入了\n";
$ n4 k' i0 c! d - // echo "server: handshake success with fd{$request->fd}\n";' [% F2 }% Q' D& A% D
- });) x* B9 E3 P8 n7 h
- 1 |, g9 q+ C( D; S
- $server->on('message', function (swoole_websocket_server $server, $frame) {5 y, g& _7 |: r6 o
( m8 B- x2 v9 s& R- I1 ]- //循环所有数据* @2 b8 N: G1 n
- foreach($server->connections as $fd) {) U# N- B O- h$ b
- //返回数据) ]# V9 @( j/ u8 n) [# |
- $server->push($fd, $frame->data);
) e' i) S1 j( [5 V1 \ - }
4 y. ^* V0 c9 L; A- s
+ }- s: j0 f) A- });" H: R# ~, F& c; O
0 a. n, v0 p$ O- $server->on('close', function ($ser, $fd) {( V% ]5 |, H2 `0 ^) n m
- echo "用户id: {$fd} 退出\n";
/ t. z) g4 z8 L - });+ {6 Q5 E3 ], [( ^# {; t; Y
. A5 \ h& O0 J& ]+ Y$ c- $server->start();
复制代码
+ z; g( `, `' E# S
/ m( c; ^, T+ r) b) X3 h* n' @, D+ P
; i0 ^: X) v7 t- i
, W7 _& [" e/ U/ K% m# m, ^9 x$ N# y( C4 c- g5 r7 T5 q3 U9 X
+ L' @5 ]6 G. E; E
% _9 T7 k# Y) P& z) W( v/ a# i& {; @, n6 B' r! F/ Z
9 s, C2 M: y4 {
) t i) u; f: ^) |
: n8 q; \3 f8 `$ Z
0 o H( x6 p* |* P) L0 n5 X9 |, h |
|