管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
|
主要使用 webstocket
& L+ ]2 K* `# g: g6 d上代码 前端 观看页面 - <script type="text/javascript">
l; ]8 X& \3 _ - var ws = new WebSocket('ws://192.168.0.150:9502');
( I$ e. l& B# `( h) }7 H& ]
: ^$ U* z. K6 i; h4 ~% u: l- ws.onopen = function() {
$ k' g4 b6 f+ \9 L5 C! q - console.log("连接成功");( _ T& x- ]8 I3 X& u% U# G( X+ B
- };8 T( m9 t l& |0 C2 H% q
- ws.onmessage = function(e) {
; K: L3 ]2 t `! O9 x - console.log(e);& t" i6 w8 r" u- r
" E( `7 X& M/ k& J: M9 ?- var data = e.data;
4 j. i/ g2 b3 I" l3 q* W. b - document.getElementById('player').src=data;
4 G" Q9 W7 x% b5 l* ^ - };. n$ ^ k$ G8 ?
- ws.onerror = function() {" |1 g1 P t& ?" F) q
- console.log("关闭连接");5 s* z9 ^& I, |6 m0 J& o' ~
- };1 O R5 \7 }0 X
- </script>
复制代码录像页面 : q n% |! W: U. F8 O' V- y
最好用火狐测试。 - <canvas id="output" style="display:none"></canvas>8 y9 b( e0 h6 K& `. n4 o
1 t2 Q5 ?9 x5 ^: |6 E' c6 ]- ; Y4 v2 z6 k$ C/ r. ]
" J5 o' K; f' b, A T; P' @5 u- <script type="text/javascript" charset="utf-8"># h& L `& a- }4 |' R
5 b3 N- U7 x3 f' U d-
2 g% Q1 O2 i1 \8 O: L {$ i - var socket = new WebSocket('ws://192.168.0.150:9502');4 ~1 F5 h2 S0 b
- //socket.send("嗨我登陆了");! \* x6 P i A: c. g
- 2 R6 x9 H" B+ u- F
- var back = document.getElementById('output');
8 V6 Z- i* A! V2 l+ S3 M7 V8 l - var backcontext = back.getContext('2d');0 f: Q4 g( L! N, Y
- var video = document.getElementsByTagName('video')[0];
# d" K# A2 |2 O* x9 V -
% g u P. `$ h - var success = function(stream){
9 ]; a1 X5 R# V' _" n2 Q* ]$ [ - video.src = window.URL.createObjectURL(stream);) [9 A* A+ ^ @8 v
- }/ \0 G# i% Z7 K% Y
; e+ T. z0 a+ \6 p# C `- socket.onopen = function(){
) e# R6 k) J. A/ \9 n- V- H - draw();
! d/ I/ }' P2 g9 J; N( A! [9 ` - }9 i, C% J- U# \4 P. m7 L) s
/ Z7 f3 S: s4 ?8 ]- var draw = function(){2 O2 n' ]; p/ w
- try{
& X8 { z( K8 H9 ^- o8 I - backcontext.drawImage(video,0,0, back.width, back.height);
2 ?8 D' Q( k) \! T8 ]3 { - }catch(e){1 r* V! @ {" y8 v1 m
- if (e.name == "NS_ERROR_NOT_AVAILABLE") {+ _$ @$ M; V; J$ x0 e1 s3 v$ V
- return setTimeout(draw, 100);
' G3 o+ q% h' m( {8 k1 C! o - } else {
+ P" ], p2 k1 A# |6 Z | - throw e;
9 h: h- G2 P, J* \ - }
8 n3 H! ?% H! W. J - }: G9 r3 |7 S5 X6 G
- if(video.src){
* R s2 Y4 `7 U5 z" f7 Y# m - socket.send(back.toDataURL("image/jpeg", 0.5));) `9 c+ @' U8 i, R9 N1 I) k
- }
6 @ g% A }) ~ - setTimeout(draw, 100);) ^3 L- p5 U% q' M) w; S$ J
- }( v9 `; b% R t$ v# H/ s% A
- navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||/ o, S" b! _' E" O, Y" [+ p+ ~
- navigator.mozGetUserMedia || navigator.msGetUserMedia;9 M( `0 Y, U/ R. [
- navigator.getUserMedia({video:true, audio:false}, success, console.log);
4 y8 `' t$ p1 f" k. X1 W- ~ - </script>
复制代码- php
/ S9 \* }4 K1 B, {6 B+ ? - ; x7 X! S3 w7 M. [! |
- $server = new swoole_websocket_server("0.0.0.0", 9502);' u& t' k# s4 B* K
) u8 c% I: r+ Y% V- $server->on('open', function (swoole_websocket_server $server, $request) {4 H* g* J- t/ w1 L/ E- a: X
& r* T3 U/ {8 h6 q- echo "新用户id:{$request->fd}加入了\n";
& K% Z( O, L1 H3 U$ W5 E5 p! w" Y - // echo "server: handshake success with fd{$request->fd}\n";
# d" S" v! i$ o* q7 L! E - });
3 l2 R6 H/ t7 r1 {% G9 b% r! @
# q9 I' [4 [0 h& ^2 k, H) {( d- $server->on('message', function (swoole_websocket_server $server, $frame) {
2 z) z! @# N! \
0 D* s2 M$ U, H- //循环所有数据
7 Z/ f# g: b. x/ `) K; U' I( q - foreach($server->connections as $fd) {$ Q, I) g- C* q. X& S! h
- //返回数据, _- M2 }8 |: L% ^% ~
- $server->push($fd, $frame->data);
9 d! X; E4 s% v: A - }5 g% f; t- d8 l; H6 Z6 D {
- 8 q4 b! l8 A) J) g# k
- });
' X) I! u' d" F2 u% ^ - 5 K7 H; P' v5 h7 f6 p& n7 O/ }0 M) `
- $server->on('close', function ($ser, $fd) {
; x* y# @$ r* @; U8 |/ X - echo "用户id: {$fd} 退出\n";+ J7 f/ Y; f, M8 C8 ~( o
- });0 i: `6 c) T& o. Q8 k% j
* @! S1 z, V- V* B0 c- $server->start();
复制代码 " M- B6 @; I3 s6 J9 V2 i+ x/ k
# v. [ v/ Z. T. N! a3 q
! C* H, }* a# V1 e( f
0 D. l0 ?( Z3 l7 n/ p h+ K. M, K2 R$ |$ t2 y0 B- u
& j$ v# l8 f' ~
. d3 f# i7 L2 T2 D
4 O2 B; w, b- n" P5 o, l# o2 C+ H5 a/ l* |# ]
. G" [+ b; ^! v M6 z
|/ m, r$ ]1 f# X
* G' l( A. w' H+ i0 n. c8 W( K! e, `) K
|
|