管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
|
主要使用 webstocket9 \# d) `0 { k
上代码 前端 观看页面 - <script type="text/javascript">- s) ~! q+ N8 M: K2 f
- var ws = new WebSocket('ws://192.168.0.150:9502');4 ~% L; {# n, t4 \* O! j
6 [% t3 C8 ]2 \4 i, N$ `4 Q- ws.onopen = function() {
# c3 T0 Q- a2 z6 a - console.log("连接成功");" [% d# g( Y) {
- };0 ?6 {% u, l2 H4 H" w" X$ J
- ws.onmessage = function(e) {
. ?5 l, R9 k7 g, r - console.log(e);
, A0 b! k0 |* x/ y2 V y
* G% G/ L4 ^5 m, e, g+ ]" C5 Q- var data = e.data;0 O* Z5 [/ p% m$ R# n2 D
- document.getElementById('player').src=data;2 o; l2 T7 c5 `3 p) [
- };
7 ]; z1 _6 H1 u% Y/ U - ws.onerror = function() {
1 g! E' h$ P- n' s - console.log("关闭连接");
' h5 I7 D, Y7 a ` - };
4 Q" P# l. N4 C1 T8 j - </script>
复制代码录像页面
# {$ i# r+ \$ ]3 `3 W* x最好用火狐测试。 - <canvas id="output" style="display:none"></canvas>9 h9 w/ ?; i1 @
- . R4 r* @0 p7 X
) A& x. e; |, T4 h$ \. z; b9 M- 0 A2 K; x6 g' M: q$ Q' _4 k# `
- <script type="text/javascript" charset="utf-8">) M8 |# W7 C3 _9 v
& ]/ L5 Z# S, I8 P9 X! I1 t% i5 m-
! ^4 ?) V" }' T# T - var socket = new WebSocket('ws://192.168.0.150:9502');
2 J) H4 Z/ u/ k. J) U - //socket.send("嗨我登陆了");
. W3 a3 C3 B- e, y5 C9 j - ' [7 z+ t& ?- K) z. R* }; G. K
- var back = document.getElementById('output');
3 `8 g w0 m$ m5 |5 r- r - var backcontext = back.getContext('2d');
/ c/ l$ l' ~& m! n2 n - var video = document.getElementsByTagName('video')[0];* F0 ^7 E* u3 X3 [
- 9 x/ O* N4 P" F4 F7 q
- var success = function(stream){
) H; w2 T# ~( x; v - video.src = window.URL.createObjectURL(stream); p% L" ~ z9 f
- }+ H$ z+ K/ |- g" z2 j
- 3 X3 d7 r: u. g+ h
- socket.onopen = function(){. [% T _1 P7 @$ W9 S2 B" O/ Q
- draw();
6 Y, N& X' p: C* n! V - }
' N# T9 v' C2 A A - ; ^: z4 ]1 T* Y& `$ v) c: C
- var draw = function(){
5 w; I9 h: R0 s - try{. y2 C1 s7 W2 \) {
- backcontext.drawImage(video,0,0, back.width, back.height); G/ }- J$ E9 s" ^: Q& l$ o4 h
- }catch(e){
/ Y) i r' ~6 l% U8 Q - if (e.name == "NS_ERROR_NOT_AVAILABLE") {
3 w) E8 \9 ? ^ - return setTimeout(draw, 100);0 |8 [6 Z) e* c2 R. W
- } else {7 \! |8 ]( j) k! Y2 l2 ]+ j2 L
- throw e;
. x$ ]# Y8 K9 Q - }9 t" Z# z1 Y i) m, ?4 U
- }
! ?* ?' n4 u" ]1 q, P - if(video.src){
- N* u8 |. W8 T: s; l' Q( f$ T( t2 U - socket.send(back.toDataURL("image/jpeg", 0.5));
8 A6 C1 r% w' \% B' d$ B - }
p/ q2 ~0 P% L! u" S( R - setTimeout(draw, 100);
0 Q/ V, ^& w- ?2 s( Q8 G# j - }
: S! i6 g( {8 L# b' W - navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||- \0 ]& [+ l4 D1 O6 _
- navigator.mozGetUserMedia || navigator.msGetUserMedia;8 U, R" n: U& q
- navigator.getUserMedia({video:true, audio:false}, success, console.log);
% r; O ]6 e0 p, x, ^0 D - </script>
复制代码- php
: Z) Y1 K& K) ?& }: {, B5 e - 9 a! Z) O, o6 `; M, y6 T
- $server = new swoole_websocket_server("0.0.0.0", 9502);( d t9 L5 `9 q" n3 N
, w4 b$ _" w% Z# V( o* l& `- $server->on('open', function (swoole_websocket_server $server, $request) {
( \4 H# P7 A- h$ Z
) H/ s3 W/ h5 N% ~" X p- echo "新用户id:{$request->fd}加入了\n";9 k& R7 s9 [, c' {1 O- k) p
- // echo "server: handshake success with fd{$request->fd}\n";
& T. r! ~4 }# U - });
& b- } b9 ^& D0 A2 W
5 j# u0 Q1 o; D4 Y r- D- $server->on('message', function (swoole_websocket_server $server, $frame) {* d1 X2 O8 | P t$ B
- 5 `8 A- ^( Z' r& ~7 g& C
- //循环所有数据+ i" n) u! p0 w
- foreach($server->connections as $fd) {
7 J) F7 b) S. M- O6 F5 W4 z" N0 d: A - //返回数据
1 K! d/ C( B8 S - $server->push($fd, $frame->data); R7 B( Y) W: V; n
- }6 z. t( E) B6 h6 M l( U% p
- 6 U1 U/ i2 d0 S
- });9 D; K3 i$ }( x/ O- h/ V3 z* K! c
- , i4 U k) y. `: L
- $server->on('close', function ($ser, $fd) {: D5 s* L! `: e( i
- echo "用户id: {$fd} 退出\n";$ n: Z* s' Z* V5 D! R3 M/ f4 p8 r
- });; d8 z$ z% S+ y7 i- m
4 d% v9 e6 ?8 n( b+ ]0 _3 _% F" Y- $server->start();
复制代码
( K' e3 {" }+ F, S+ h' X- _+ P C: l) t
! c# D5 D8 V/ o. l0 J& C! S
4 e! j5 Q* ]- i/ o2 }: ~* q- Z& C6 L0 ^
+ Q* r& D: J6 d* _: R) B
. l& x. F( ~; \) t+ Z: P8 C$ T1 S% [
4 V b; q- p G
" A+ Z- x3 E8 `3 o; l a
- E1 U) m# @ C, x9 }% Q
0 }2 e" q6 H" `4 S
|
|