管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
|
主要使用 webstocket! k: L0 l0 Q; w" E4 s7 B
上代码 前端 观看页面 - <script type="text/javascript">0 h* C3 B, T: s3 t' i
- var ws = new WebSocket('ws://192.168.0.150:9502');
; `/ t0 }9 I/ n/ ~! P1 G& | - . D Z( U6 ]- j: h# ]
- ws.onopen = function() {
5 D, d; i" m5 y! T* c+ M7 }) @6 r - console.log("连接成功");
3 K# K- c2 L. \ a. L- Z7 t - };
( C# q4 c5 k) c. \: a6 q1 u" _% O - ws.onmessage = function(e) {
5 O9 ]9 F( e3 I) Y - console.log(e);
4 i: p/ ~, p7 c2 v7 g
& i1 O8 |5 X! G" n- var data = e.data;
8 {4 q7 i# P5 K' x9 S3 K - document.getElementById('player').src=data;
$ _7 K n r3 d - };: x0 W2 }7 m$ e4 s
- ws.onerror = function() {% x: [1 I5 t4 ^) z% C$ L
- console.log("关闭连接");
" y: Q: r* J+ b - };
$ A2 Q( X% n, v! N) R" _ - </script>
复制代码录像页面 6 Z/ g/ m; G6 {7 \
最好用火狐测试。 - <canvas id="output" style="display:none"></canvas>
- |" L) c& j( E9 j1 N" r
- ^; ^7 g$ [; S w8 r# `- , Z+ h6 }; D" \! A7 R' A2 h) w
- % u$ J$ U6 C3 |1 a$ a: `8 Z
- <script type="text/javascript" charset="utf-8">
, F/ S8 j# L/ V% K' h
" x. V W3 e3 f, ~1 c2 i& N, q2 L1 A-
' D( z# \! D- e! ]' O! |" D - var socket = new WebSocket('ws://192.168.0.150:9502');+ [- R5 n' A" z/ x* K V0 A G" E
- //socket.send("嗨我登陆了");
4 o e" b+ [% j$ ]5 z' R5 b$ \ - + ~" @* b; T# K& m
- var back = document.getElementById('output');7 ?4 e' H6 O6 ~ c
- var backcontext = back.getContext('2d');
3 }, w, \+ o" F# x - var video = document.getElementsByTagName('video')[0];" V5 L4 }- ]+ }8 B. L) J7 n
-
/ y7 a7 S( y" T; D - var success = function(stream){3 p- Y9 X$ r$ Q
- video.src = window.URL.createObjectURL(stream);
8 l! m& W8 L K( q - }& l0 H" t& s% s& }
; D$ \; j7 N+ b( T/ X; Z' M( p- socket.onopen = function(){. D8 L0 s, {* ^ F9 e7 e
- draw();9 x4 A3 [6 w) W
- }; f9 n$ J: C( k+ ^ q+ b+ {
- & V( P2 k# \* T9 N
- var draw = function(){
3 E5 |. }' C' H; K" f1 \8 M5 _ - try{
S& r3 ~+ m8 a( B* F5 a - backcontext.drawImage(video,0,0, back.width, back.height);& y" K" u Z) i* ~- K$ m$ i! [; q7 R; X
- }catch(e){* m* g' A4 a% p8 N. ?6 W) u
- if (e.name == "NS_ERROR_NOT_AVAILABLE") {+ E3 y; q( H8 P4 \
- return setTimeout(draw, 100);! P, x2 x7 d- c; N% O. b& y
- } else {* O0 r' c. M, D# B1 N: _
- throw e;0 V# B$ z2 x4 n; g& X# x
- } [3 c' ~4 f$ O+ l; c
- }
2 k3 a- s# Y8 B) `0 i8 q5 b o - if(video.src){4 q c6 q+ d! ^0 F+ [9 l2 X$ I2 b
- socket.send(back.toDataURL("image/jpeg", 0.5));
6 {+ b6 F4 o8 b/ x% V - }
# i6 W' E3 _+ k- n - setTimeout(draw, 100);6 Q! [. [7 Y- e
- }$ v0 I. t& w+ T( y
- navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||$ Z! J7 n% o! b0 C9 ?7 L
- navigator.mozGetUserMedia || navigator.msGetUserMedia;
" P0 Q4 D1 T% R. F4 N* T( z - navigator.getUserMedia({video:true, audio:false}, success, console.log);4 f# S+ f; v5 z7 A: L2 K, q% t
- </script>
复制代码- php
3 M9 Q3 Z) F, {0 P% U- k" i* R
7 p8 W! b* O" R( \- $server = new swoole_websocket_server("0.0.0.0", 9502);
! }; e, U0 W% x% p
; } J. j9 O1 I. D) z. X+ K- $server->on('open', function (swoole_websocket_server $server, $request) {
4 e, ~" n2 _! R0 i. S - $ Y/ ?1 H8 r" u5 N! y! t( f! S
- echo "新用户id:{$request->fd}加入了\n";% m# ]% X; S* Q, r
- // echo "server: handshake success with fd{$request->fd}\n";
; R2 _ l: f# \+ q* ~ M, t Q# i - });
# z+ ?+ F; o/ }
1 c; e' u5 b* @) _( C4 t- $server->on('message', function (swoole_websocket_server $server, $frame) {" u) s! U5 d! O% r3 y) U
- ! ~5 Y0 l0 j( s2 H
- //循环所有数据- a9 s; Y- F& h# U# L
- foreach($server->connections as $fd) {
2 O. k! d3 U7 {! { E - //返回数据" g& U P+ W; N6 K* @( j' R
- $server->push($fd, $frame->data);
$ N- w7 O/ Y0 r8 I$ U; D0 p - }, ]$ R f/ V% ]3 W# m* Y6 Q& D
" l. P( ^. l, k9 w; @- });0 Z3 e: P& r$ [+ E+ B2 ?4 [( P
- - Y5 Z# d$ w: q' n9 ]7 O! ^
- $server->on('close', function ($ser, $fd) {) R3 p6 l, G6 u. s0 e2 P
- echo "用户id: {$fd} 退出\n";) K( P z3 P( `7 P2 B S, v
- });5 j$ Z, T2 u% [1 i7 }
, j0 q. j# [5 H6 K7 W- $server->start();
复制代码 2 W. H* F/ _9 x: b
; q @, m# B( K/ J8 q1 a) _
, t6 [% B+ o# c1 @/ ?
( j4 u9 D, v9 S7 j6 v
( @* Q0 Y/ v5 K
! a2 I4 [0 g( [* G5 X# W: \+ I3 c- R8 O6 R$ G# |( X& W" N( g6 {- E& E" A% S+ W
6 z L$ r* Y9 R3 x }7 O( B6 c
2 o1 j, m! T( X. v
4 a+ R- b8 h1 f) V2 O# w4 L' w5 N2 V
# s7 ^! D# d# u0 |4 I" ~4 o# _
|
|