管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
|
主要使用 webstocket
6 s: X T& M9 p上代码 前端 观看页面 - <script type="text/javascript">
& c# ~& f) Y4 i q4 C, }6 y' n - var ws = new WebSocket('ws://192.168.0.150:9502');: o* Q# a( y% h( |. F( A6 \/ P
- * ?1 S% n9 ?; V) B3 Z
- ws.onopen = function() {# D* G6 S2 G/ j: |
- console.log("连接成功");9 |0 {6 m" G6 L" H
- };
* \ A$ I D+ ~! N# Y3 v8 ]) { - ws.onmessage = function(e) {
+ S! J; S( S4 L7 X* Z% ? - console.log(e);
! K5 N. S* {0 N8 l! t4 ~% Z
# E) o8 X& r' H/ d6 L+ M1 R" w- var data = e.data;, s" l1 {5 I- g5 R1 @
- document.getElementById('player').src=data;9 b% C$ k, ^& C3 M: w
- };
. p$ X3 `9 q( H: M+ ^ - ws.onerror = function() {
9 b0 J0 o/ w* N2 f# T - console.log("关闭连接");9 Y$ j) H2 |- h
- };: B& a# }8 C9 f6 H) f
- </script>
复制代码录像页面 $ n" s$ ~) |% O1 n* `' B0 |
最好用火狐测试。 - <canvas id="output" style="display:none"></canvas>
; Z9 E/ b/ [- m8 D9 `. D' n
P% S D& Z; x7 y0 H
7 p( \% O" ^9 O. n6 B- B j; }- 2 W3 T% v1 `: e7 g V1 I
- <script type="text/javascript" charset="utf-8">( y* k# X1 I6 o; @
- + q8 K6 ^$ g! l% r# T7 \
- 3 ?% L: p1 j) E1 K8 |
- var socket = new WebSocket('ws://192.168.0.150:9502');
4 z/ B' w" h) ^0 d# f$ H! B - //socket.send("嗨我登陆了");* u/ k% |4 c- [$ k' Q2 Z* e
, ^$ t) M y) `2 M5 S7 Q0 `- var back = document.getElementById('output');
+ J: V# o* D( ^) H" X8 G3 l6 v/ e - var backcontext = back.getContext('2d');: l; I4 a7 T. F S7 C! a
- var video = document.getElementsByTagName('video')[0];2 \. I1 }2 U% i r3 _
-
( D9 |1 e. q1 S" A2 O# A0 I - var success = function(stream){2 a5 g' x1 I2 _1 ]
- video.src = window.URL.createObjectURL(stream);7 w7 s" b" ]6 B. w3 M# h2 b6 [
- }. w" f) A1 w9 ?! o; y: w+ S
- - L2 {$ M5 `" Q, G
- socket.onopen = function(){
0 k6 S+ ~. I4 L' R, w6 C0 o3 V0 H - draw();$ q8 K9 ^1 ~3 U
- }* H2 J' `1 \# Z ?
- " K l, s8 t) n4 E, C i
- var draw = function(){
3 f; F: R4 d- n' k6 c' R - try{
& J4 u) l( K/ P - backcontext.drawImage(video,0,0, back.width, back.height);0 r! F8 \% S: c7 [' [- v8 R
- }catch(e){3 A% I8 b6 [% O* @$ C$ X _" S# x
- if (e.name == "NS_ERROR_NOT_AVAILABLE") {
}6 b9 n2 V3 v l/ o6 c - return setTimeout(draw, 100);% t8 Y4 |( \ `1 T0 G, R; q
- } else {
5 m( {9 j" ^# p, Y4 y - throw e;% J# [/ u V" ?
- }0 a) n5 J* }! t' i- |
- }
+ E. a8 g# {& w* w - if(video.src){
! W& Z- g2 G4 c U3 r7 z& R% ? - socket.send(back.toDataURL("image/jpeg", 0.5));
( E; X9 N8 o4 l- s. z - }
6 k, h5 q5 R! V: o2 \0 r7 T" } - setTimeout(draw, 100);9 _4 t- m3 O$ g H
- }
! c- [1 d& Y% j. I% U - navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||: t7 K& P# R4 Z, X
- navigator.mozGetUserMedia || navigator.msGetUserMedia;9 g1 ]6 W- H) `3 e. U5 r$ y
- navigator.getUserMedia({video:true, audio:false}, success, console.log);5 v! |3 u4 K, Q. t& B; r
- </script>
复制代码- php
5 C) M4 z& ?( o
0 ?5 q( F5 b, C- $server = new swoole_websocket_server("0.0.0.0", 9502);
3 h) ?; C8 W- w- y3 J
_6 i$ O$ q8 S/ u6 j- $server->on('open', function (swoole_websocket_server $server, $request) {. d2 \3 i- k* R5 U% Y& V- }. T" u: J
* @9 ~ ?" E U% K+ e& T- echo "新用户id:{$request->fd}加入了\n";& F7 S* Z8 L7 o" N: E
- // echo "server: handshake success with fd{$request->fd}\n";
: u3 j& _, x1 ?4 @ M6 l - });
; p+ d4 S+ z# I9 Q/ \
7 F; Q; b( X2 Y, n+ Z- $server->on('message', function (swoole_websocket_server $server, $frame) {2 `: A5 z# X f% w3 ?& u
" C3 ?; ~! f- v$ _- T, m7 T3 J* J- //循环所有数据! n: g8 z6 |# A( b: Y; F
- foreach($server->connections as $fd) {
/ J, ` T0 \$ W6 l% D+ q7 R - //返回数据
- t& L: b& \0 ~( w$ P' P( V - $server->push($fd, $frame->data);4 B- |; E5 M; D$ q. e! @9 A
- }5 i9 Q7 a# u& P# I2 b/ d
) @, v7 B. J# W- });
; l( l0 \9 D: l. N - ! w: G) `' Z) Z+ ^8 l* G. a% v
- $server->on('close', function ($ser, $fd) {8 U8 V! y" B6 y5 I
- echo "用户id: {$fd} 退出\n";
2 F# z/ G! L- ]( U, M+ K: O5 Q - });" I7 f- W9 e6 F
- ( U$ M) c7 E) k+ ]
- $server->start();
复制代码
* {! k. f# C6 ~' D/ V) V; W, N
5 d X- E' ]8 m8 b9 |! z9 n
8 V6 z% C1 M* I: L% p" d
4 S( Y: C# w, L) [0 |! s i: a$ A7 x+ P
& h" Q% X7 s$ s
7 }( j% J4 e: r8 b" \! E t& m( W" I4 s% r- K2 A
% ^- }- g! \. @* ~' K
: C+ u$ E6 Q2 s1 D4 G* R
! S$ r2 ~4 \! L& B8 a
8 }, x, _! `6 @3 s; p. }4 ^ |
|