管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
|
主要使用 webstocket
. q3 \# m( j7 p+ |7 s- U1 j: N上代码 前端 观看页面 - <script type="text/javascript"> S/ ^7 M7 B6 C4 I7 D8 C# L5 A3 E/ p
- var ws = new WebSocket('ws://192.168.0.150:9502');
. [& J6 r5 D# \. a- K E3 S! m - / D) R: Q) p F% ]. A* L/ k
- ws.onopen = function() {' N5 [. p" F% X. t9 M) o& a
- console.log("连接成功");' M7 I8 T/ h) W n9 k* c" a
- };4 ~# G- \8 C" X% ?/ x2 j7 o
- ws.onmessage = function(e) {
' ]0 C) `8 r: Z! N - console.log(e);
) ~( _2 @/ ]3 p# [ - , t: E# L8 v9 b, D& d- e$ U9 q
- var data = e.data;
! l J( [) |( M% @$ L - document.getElementById('player').src=data;
, F5 N7 N; d; m2 Q+ i# _$ L - };
' p4 y7 m8 |4 z J Z2 e) y" X: ^0 d. B - ws.onerror = function() {
) O' Y0 ]. o) M& C - console.log("关闭连接");# G; [- ?! a* y, `, z; r% |1 B' \" b7 _
- };% G" g' q6 `) J; |+ C
- </script>
复制代码录像页面 & w5 ` V1 i' F8 ~
最好用火狐测试。 - <canvas id="output" style="display:none"></canvas>2 S5 s( S4 ~3 Z/ u
- ! w. X6 J0 C- T6 j
) U: Q9 L/ r; Z3 r' `; E9 N
6 \9 _8 v& b0 _* R0 A- <script type="text/javascript" charset="utf-8">4 s: U) q7 a9 S* S
% K/ b% ~- T5 q- Q-
/ h: i: U" ^& g- a- ^! J - var socket = new WebSocket('ws://192.168.0.150:9502');( W6 g8 f1 j$ n C
- //socket.send("嗨我登陆了");
' ~+ w% @+ k1 {( g3 J5 I7 ~" Q - a: }# w( F7 k$ F: I/ n8 u
- var back = document.getElementById('output');4 a' p4 \7 |7 d/ [9 A
- var backcontext = back.getContext('2d');
. q1 I6 z. _% G" z, J+ L1 M - var video = document.getElementsByTagName('video')[0];) R* d' u7 d0 W6 p9 Z: }$ K
-
+ f" N' g' M, j1 D5 z8 G8 m" [ - var success = function(stream){
- M {+ l) i3 m& D2 L# ` - video.src = window.URL.createObjectURL(stream);
$ m R+ V+ r) I( @( O a( | - }1 _6 h- {. n( `% O) J& j
- " R: u) A& {2 {* \6 w1 D
- socket.onopen = function(){
/ m6 s" S* t: |; D - draw();2 k8 p0 ^+ i) K# J- b
- }+ j# L' v* J, T, V& K. Q; X
- * E! K8 h2 l# {7 i% G/ r q' V) K, Q
- var draw = function(){! y4 G& ~9 r0 K" \
- try{ E* U S9 |" q) y P
- backcontext.drawImage(video,0,0, back.width, back.height); M+ q$ d1 ` z1 A
- }catch(e){
o3 m1 a( g; W: ~& h; G& h - if (e.name == "NS_ERROR_NOT_AVAILABLE") {
+ K- M/ }! J& @; Z9 e! y7 o' i, ? - return setTimeout(draw, 100); l0 ~% N2 j+ I& C# ~
- } else {" i* \2 a- C2 S
- throw e;, u' f0 G8 J$ d/ s! U1 P7 \# W
- }
% C1 {5 ^2 J- ?: ?/ y( Z8 j - }, @7 s0 N& r" r: j: X3 z( _
- if(video.src){! Y. i, k& B4 i# a5 B& h* ?. W
- socket.send(back.toDataURL("image/jpeg", 0.5));
" e3 X# W( F, {$ L - }
. C4 \/ z; F) X9 F, ` - setTimeout(draw, 100);
; y0 J+ [$ R% b - } h1 w3 S1 L6 I$ u
- navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||" j D+ h' R2 y1 f3 V4 p2 |
- navigator.mozGetUserMedia || navigator.msGetUserMedia;+ y% k0 j- f" K& n2 _
- navigator.getUserMedia({video:true, audio:false}, success, console.log);
! m8 ]7 D$ k$ ?3 M q - </script>
复制代码- php
8 s* I! Z4 b0 z6 M8 {+ Q+ B - 0 L7 }$ x& `( e: [- o: G- w! T3 K
- $server = new swoole_websocket_server("0.0.0.0", 9502);+ d; }9 R3 W& ]0 r$ s3 [# M( n
# ~' c2 l( b* v- $server->on('open', function (swoole_websocket_server $server, $request) {) o$ @) P. v2 G4 t6 ^# Q( B' V
- ) I" r) J! G2 T' P4 ?
- echo "新用户id:{$request->fd}加入了\n";
3 Z6 q' Z! n. I9 m - // echo "server: handshake success with fd{$request->fd}\n";
( m0 ]. A' h" t9 u# i5 x( Q$ ? - });3 P: Q& C8 f' h7 r% {( h
- 3 I- {) z9 o ]) G
- $server->on('message', function (swoole_websocket_server $server, $frame) {
) }8 g2 ?, P4 x
o7 } n, @2 o d: u8 D# Y% ]# ?- //循环所有数据8 C" R( ]: d+ X9 v
- foreach($server->connections as $fd) {
6 c9 j- S* I0 f& L8 S - //返回数据6 @% D! C" c/ ]5 K. b8 ?
- $server->push($fd, $frame->data);
1 c1 a/ c/ ^ @% N/ o - }
- S% H- I! `" ?4 u0 @ - + ` e) |, N' t0 A' c$ H! D
- });
9 m: z5 Z! C& x9 ~) O' O# L/ {, L - # u& X' \% F8 k/ ^" f( H. v
- $server->on('close', function ($ser, $fd) {
5 F5 R# {" s E: G0 C9 F4 {0 a - echo "用户id: {$fd} 退出\n";
9 i3 X4 u' o: ?; J6 H6 [ - });
/ o4 R$ w! ^1 a2 \- e3 |: k; [) g/ l
8 Q% S0 {3 `2 ~" n/ M q- $server->start();
复制代码
+ u$ o* G$ v- _' G4 U, V1 I/ U. {& `
. d3 U1 s; i f
9 U* t/ @1 u: T& r5 D0 b- c! a/ J" F( k- ~9 ]
( C& m7 s5 h4 R5 j& V" S8 f; K
/ M5 O7 h- j: n
/ S. l% C* z& s$ c4 G! l. ^- U, r# ^( {0 L
5 _$ f2 \6 U6 M) z) d' T/ O% Z
. ~- b. c/ g, M; {( g2 j+ S, T3 C @2 z* {! Q4 F
8 c+ n, v, N$ ]. q& t* W
|
|