feat: 支持实际摄像头视频流

This commit is contained in:
2025-07-03 17:51:12 +08:00
parent 178ac0de67
commit e84a784517
4 changed files with 1323 additions and 438 deletions

View File

@@ -8,6 +8,306 @@
/* eslint-disable */
// ReSharper disable InconsistentNaming
export class VideoStreamClient {
private http: { fetch(url: RequestInfo, init?: RequestInit): Promise<Response> };
private baseUrl: string;
protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;
constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise<Response> }) {
this.http = http ? http : window as any;
this.baseUrl = baseUrl ?? "http://localhost:5000";
}
/**
* 获取 HTTP 视频流服务状态
* @return 服务状态信息
*/
getStatus(): Promise<any> {
let url_ = this.baseUrl + "/api/VideoStream/Status";
url_ = url_.replace(/[?&]$/, "");
let options_: RequestInit = {
method: "GET",
headers: {
"Accept": "application/json"
}
};
return this.http.fetch(url_, options_).then((_response: Response) => {
return this.processGetStatus(_response);
});
}
protected processGetStatus(response: Response): Promise<any> {
const status = response.status;
let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
if (status === 200) {
return response.text().then((_responseText) => {
let result200: any = null;
let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
result200 = resultData200 !== undefined ? resultData200 : <any>null;
return result200;
});
} else if (status === 500) {
return response.text().then((_responseText) => {
let result500: any = null;
let resultData500 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
result500 = Exception.fromJS(resultData500);
return throwException("A server side error occurred.", status, _responseText, _headers, result500);
});
} else if (status !== 200 && status !== 204) {
return response.text().then((_responseText) => {
return throwException("An unexpected server error occurred.", status, _responseText, _headers);
});
}
return Promise.resolve<any>(null as any);
}
/**
* 获取 HTTP 视频流信息
* @return 流信息
*/
getStreamInfo(): Promise<any> {
let url_ = this.baseUrl + "/api/VideoStream/StreamInfo";
url_ = url_.replace(/[?&]$/, "");
let options_: RequestInit = {
method: "GET",
headers: {
"Accept": "application/json"
}
};
return this.http.fetch(url_, options_).then((_response: Response) => {
return this.processGetStreamInfo(_response);
});
}
protected processGetStreamInfo(response: Response): Promise<any> {
const status = response.status;
let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
if (status === 200) {
return response.text().then((_responseText) => {
let result200: any = null;
let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
result200 = resultData200 !== undefined ? resultData200 : <any>null;
return result200;
});
} else if (status === 500) {
return response.text().then((_responseText) => {
let result500: any = null;
let resultData500 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
result500 = Exception.fromJS(resultData500);
return throwException("A server side error occurred.", status, _responseText, _headers, result500);
});
} else if (status !== 200 && status !== 204) {
return response.text().then((_responseText) => {
return throwException("An unexpected server error occurred.", status, _responseText, _headers);
});
}
return Promise.resolve<any>(null as any);
}
/**
* 配置摄像头连接参数
* @param config 摄像头配置
* @return 配置结果
*/
configureCamera(config: CameraConfigRequest): Promise<any> {
let url_ = this.baseUrl + "/api/VideoStream/ConfigureCamera";
url_ = url_.replace(/[?&]$/, "");
const content_ = JSON.stringify(config);
let options_: RequestInit = {
body: content_,
method: "POST",
headers: {
"Content-Type": "application/json",
"Accept": "application/json"
}
};
return this.http.fetch(url_, options_).then((_response: Response) => {
return this.processConfigureCamera(_response);
});
}
protected processConfigureCamera(response: Response): Promise<any> {
const status = response.status;
let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
if (status === 200) {
return response.text().then((_responseText) => {
let result200: any = null;
let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
result200 = resultData200 !== undefined ? resultData200 : <any>null;
return result200;
});
} else if (status === 400) {
return response.text().then((_responseText) => {
let result400: any = null;
let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
result400 = resultData400 !== undefined ? resultData400 : <any>null;
return throwException("A server side error occurred.", status, _responseText, _headers, result400);
});
} else if (status === 500) {
return response.text().then((_responseText) => {
let result500: any = null;
let resultData500 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
result500 = Exception.fromJS(resultData500);
return throwException("A server side error occurred.", status, _responseText, _headers, result500);
});
} else if (status !== 200 && status !== 204) {
return response.text().then((_responseText) => {
return throwException("An unexpected server error occurred.", status, _responseText, _headers);
});
}
return Promise.resolve<any>(null as any);
}
/**
* 获取当前摄像头配置
* @return 摄像头配置信息
*/
getCameraConfig(): Promise<any> {
let url_ = this.baseUrl + "/api/VideoStream/CameraConfig";
url_ = url_.replace(/[?&]$/, "");
let options_: RequestInit = {
method: "GET",
headers: {
"Accept": "application/json"
}
};
return this.http.fetch(url_, options_).then((_response: Response) => {
return this.processGetCameraConfig(_response);
});
}
protected processGetCameraConfig(response: Response): Promise<any> {
const status = response.status;
let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
if (status === 200) {
return response.text().then((_responseText) => {
let result200: any = null;
let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
result200 = resultData200 !== undefined ? resultData200 : <any>null;
return result200;
});
} else if (status === 500) {
return response.text().then((_responseText) => {
let result500: any = null;
let resultData500 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
result500 = Exception.fromJS(resultData500);
return throwException("A server side error occurred.", status, _responseText, _headers, result500);
});
} else if (status !== 200 && status !== 204) {
return response.text().then((_responseText) => {
return throwException("An unexpected server error occurred.", status, _responseText, _headers);
});
}
return Promise.resolve<any>(null as any);
}
/**
* 测试摄像头连接
* @return 连接测试结果
*/
testCameraConnection(): Promise<any> {
let url_ = this.baseUrl + "/api/VideoStream/TestCameraConnection";
url_ = url_.replace(/[?&]$/, "");
let options_: RequestInit = {
method: "POST",
headers: {
"Accept": "application/json"
}
};
return this.http.fetch(url_, options_).then((_response: Response) => {
return this.processTestCameraConnection(_response);
});
}
protected processTestCameraConnection(response: Response): Promise<any> {
const status = response.status;
let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
if (status === 200) {
return response.text().then((_responseText) => {
let result200: any = null;
let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
result200 = resultData200 !== undefined ? resultData200 : <any>null;
return result200;
});
} else if (status === 500) {
return response.text().then((_responseText) => {
let result500: any = null;
let resultData500 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
result500 = Exception.fromJS(resultData500);
return throwException("A server side error occurred.", status, _responseText, _headers, result500);
});
} else if (status !== 200 && status !== 204) {
return response.text().then((_responseText) => {
return throwException("An unexpected server error occurred.", status, _responseText, _headers);
});
}
return Promise.resolve<any>(null as any);
}
/**
* 测试 HTTP 视频流连接
* @return 连接测试结果
*/
testConnection(): Promise<boolean> {
let url_ = this.baseUrl + "/api/VideoStream/TestConnection";
url_ = url_.replace(/[?&]$/, "");
let options_: RequestInit = {
method: "POST",
headers: {
"Accept": "application/json"
}
};
return this.http.fetch(url_, options_).then((_response: Response) => {
return this.processTestConnection(_response);
});
}
protected processTestConnection(response: Response): Promise<boolean> {
const status = response.status;
let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
if (status === 200) {
return response.text().then((_responseText) => {
let result200: any = null;
let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
result200 = resultData200 !== undefined ? resultData200 : <any>null;
return result200;
});
} else if (status === 500) {
return response.text().then((_responseText) => {
let result500: any = null;
let resultData500 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
result500 = Exception.fromJS(resultData500);
return throwException("A server side error occurred.", status, _responseText, _headers, result500);
});
} else if (status !== 200 && status !== 204) {
return response.text().then((_responseText) => {
return throwException("An unexpected server error occurred.", status, _responseText, _headers);
});
}
return Promise.resolve<boolean>(null as any);
}
}
export class BsdlParserClient {
private http: { fetch(url: RequestInfo, init?: RequestInit): Promise<Response> };
private baseUrl: string;
@@ -1542,6 +1842,55 @@ export class RemoteUpdateClient {
}
}
export class TutorialClient {
private http: { fetch(url: RequestInfo, init?: RequestInit): Promise<Response> };
private baseUrl: string;
protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;
constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise<Response> }) {
this.http = http ? http : window as any;
this.baseUrl = baseUrl ?? "http://localhost:5000";
}
/**
* 获取所有可用的教程目录
* @return 教程目录列表
*/
getTutorials(): Promise<void> {
let url_ = this.baseUrl + "/api/Tutorial";
url_ = url_.replace(/[?&]$/, "");
let options_: RequestInit = {
method: "GET",
headers: {
}
};
return this.http.fetch(url_, options_).then((_response: Response) => {
return this.processGetTutorials(_response);
});
}
protected processGetTutorials(response: Response): Promise<void> {
const status = response.status;
let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
if (status === 200) {
return response.text().then((_responseText) => {
return;
});
} else if (status === 500) {
return response.text().then((_responseText) => {
return throwException("A server side error occurred.", status, _responseText, _headers);
});
} else if (status !== 200 && status !== 204) {
return response.text().then((_responseText) => {
return throwException("An unexpected server error occurred.", status, _responseText, _headers);
});
}
return Promise.resolve<void>(null as any);
}
}
export class UDPClient {
private http: { fetch(url: RequestInfo, init?: RequestInit): Promise<Response> };
private baseUrl: string;
@@ -1800,15 +2149,20 @@ export class UDPClient {
}
/**
* 获取指定IP地址接的数据列表
* 获取指定IP地址接的数据列表
* @param address (optional) IP地址
* @param taskID (optional)
*/
getRecvDataArray(address: string | undefined): Promise<UDPData[]> {
getRecvDataArray(address: string | undefined, taskID: number | undefined): Promise<UDPData[]> {
let url_ = this.baseUrl + "/api/UDP/GetRecvDataArray?";
if (address === null)
throw new Error("The parameter 'address' cannot be null.");
else if (address !== undefined)
url_ += "address=" + encodeURIComponent("" + address) + "&";
if (taskID === null)
throw new Error("The parameter 'taskID' cannot be null.");
else if (taskID !== undefined)
url_ += "taskID=" + encodeURIComponent("" + taskID) + "&";
url_ = url_.replace(/[?&]$/, "");
let options_: RequestInit = {
@@ -1853,55 +2207,6 @@ export class UDPClient {
}
}
export class TutorialClient {
private http: { fetch(url: RequestInfo, init?: RequestInit): Promise<Response> };
private baseUrl: string;
protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;
constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise<Response> }) {
this.http = http ? http : window as any;
this.baseUrl = baseUrl ?? "http://localhost:5000";
}
/**
* 获取所有可用的教程目录
* @return 教程目录列表
*/
getTutorials(): Promise<void> {
let url_ = this.baseUrl + "/api/Tutorial";
url_ = url_.replace(/[?&]$/, "");
let options_: RequestInit = {
method: "GET",
headers: {
}
};
return this.http.fetch(url_, options_).then((_response: Response) => {
return this.processGetTutorials(_response);
});
}
protected processGetTutorials(response: Response): Promise<void> {
const status = response.status;
let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
if (status === 200) {
return response.text().then((_responseText) => {
return;
});
} else if (status === 500) {
return response.text().then((_responseText) => {
return throwException("A server side error occurred.", status, _responseText, _headers);
});
} else if (status !== 200 && status !== 204) {
return response.text().then((_responseText) => {
return throwException("An unexpected server error occurred.", status, _responseText, _headers);
});
}
return Promise.resolve<void>(null as any);
}
}
export class Exception implements IException {
message?: string;
innerException?: Exception | undefined;
@@ -1950,6 +2255,48 @@ export interface IException {
stackTrace?: string | undefined;
}
/** 摄像头配置请求模型 */
export class CameraConfigRequest implements ICameraConfigRequest {
address!: string;
port!: number;
constructor(data?: ICameraConfigRequest) {
if (data) {
for (var property in data) {
if (data.hasOwnProperty(property))
(<any>this)[property] = (<any>data)[property];
}
}
}
init(_data?: any) {
if (_data) {
this.address = _data["address"];
this.port = _data["port"];
}
}
static fromJS(data: any): CameraConfigRequest {
data = typeof data === 'object' ? data : {};
let result = new CameraConfigRequest();
result.init(data);
return result;
}
toJSON(data?: any) {
data = typeof data === 'object' ? data : {};
data["address"] = this.address;
data["port"] = this.port;
return data;
}
}
/** 摄像头配置请求模型 */
export interface ICameraConfigRequest {
address: string;
port: number;
}
export class SystemException extends Exception implements ISystemException {
constructor(data?: ISystemException) {
@@ -2091,6 +2438,8 @@ export class UDPData implements IUDPData {
address?: string;
/** 发送来源的端口号 */
port?: number;
/** 任务ID */
taskID?: number;
/** 接受到的数据 */
data?: string;
/** 是否被读取过 */
@@ -2110,6 +2459,7 @@ export class UDPData implements IUDPData {
this.dateTime = _data["dateTime"] ? new Date(_data["dateTime"].toString()) : <any>undefined;
this.address = _data["address"];
this.port = _data["port"];
this.taskID = _data["taskID"];
this.data = _data["data"];
this.hasRead = _data["hasRead"];
}
@@ -2127,6 +2477,7 @@ export class UDPData implements IUDPData {
data["dateTime"] = this.dateTime ? this.dateTime.toISOString() : <any>undefined;
data["address"] = this.address;
data["port"] = this.port;
data["taskID"] = this.taskID;
data["data"] = this.data;
data["hasRead"] = this.hasRead;
return data;
@@ -2141,6 +2492,8 @@ export interface IUDPData {
address?: string;
/** 发送来源的端口号 */
port?: number;
/** 任务ID */
taskID?: number;
/** 接受到的数据 */
data?: string;
/** 是否被读取过 */
@@ -2188,145 +2541,4 @@ function throwException(message: string, status: number, response: string, heade
throw result;
else
throw new ApiException(message, status, response, headers, null);
}
// VideoStreamClient - 手动添加用于HTTP视频流控制
export class VideoStreamClient {
private http: { fetch(url: RequestInfo, init?: RequestInit): Promise<Response> };
private baseUrl: string;
protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;
constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise<Response> }) {
this.http = http ? http : window as any;
this.baseUrl = baseUrl ?? "http://localhost:5000";
} /**
* 获取HTTP视频流服务状态
* @return HTTP视频流服务状态信息
*/
status(): Promise<any> {
let url_ = this.baseUrl + "/api/VideoStream/Status";
url_ = url_.replace(/[?&]$/, "");
let options_: RequestInit = {
method: "GET",
headers: {
"Accept": "application/json"
}
};
return this.http.fetch(url_, options_).then((_response: Response) => {
return this.processStatus(_response);
});
}
protected processStatus(response: Response): Promise<any> {
const status = response.status;
let _headers: any = {};
if (response.headers && response.headers.forEach) {
response.headers.forEach((v: any, k: any) => _headers[k] = v);
}
if (status === 200) {
return response.text().then((_responseText) => {
let result200: any = null;
result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
return result200;
});
} else if (status === 500) {
return response.text().then((_responseText) => {
throw new Error(_responseText);
});
} else if (status !== 200 && status !== 204) {
return response.text().then((_responseText) => {
throw new Error("未知的响应状态码: " + status + ", 响应文本: " + _responseText);
});
}
return Promise.resolve<any>(null as any);
} /**
* 获取HTTP视频流信息
* @return HTTP视频流信息
*/
streamInfo(): Promise<any> {
let url_ = this.baseUrl + "/api/VideoStream/StreamInfo";
url_ = url_.replace(/[?&]$/, "");
let options_: RequestInit = {
method: "GET",
headers: {
"Accept": "application/json"
}
};
return this.http.fetch(url_, options_).then((_response: Response) => {
return this.processStreamInfo(_response);
});
}
protected processStreamInfo(response: Response): Promise<any> {
const status = response.status;
let _headers: any = {};
if (response.headers && response.headers.forEach) {
response.headers.forEach((v: any, k: any) => _headers[k] = v);
}
if (status === 200) {
return response.text().then((_responseText) => {
let result200: any = null;
result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
return result200;
});
} else if (status === 500) {
return response.text().then((_responseText) => {
throw new Error(_responseText);
});
} else if (status !== 200 && status !== 204) {
return response.text().then((_responseText) => {
throw new Error("未知的响应状态码: " + status + ", 响应文本: " + _responseText);
});
}
return Promise.resolve<any>(null as any);
} /**
* 测试HTTP视频流连接
* @return 测试结果
*/
testConnection(): Promise<boolean> {
let url_ = this.baseUrl + "/api/VideoStream/TestConnection";
url_ = url_.replace(/[?&]$/, "");
let options_: RequestInit = {
method: "POST",
headers: {
"Accept": "application/json"
}
};
return this.http.fetch(url_, options_).then((_response: Response) => {
return this.processTestConnection(_response);
});
}
protected processTestConnection(response: Response): Promise<boolean> {
const status = response.status;
let _headers: any = {};
if (response.headers && response.headers.forEach) {
response.headers.forEach((v: any, k: any) => _headers[k] = v);
}
if (status === 200) {
return response.text().then((_responseText) => {
let result200: any = null;
result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
return result200;
});
} else if (status === 500) {
return response.text().then((_responseText) => {
throw new Error(_responseText);
});
} else if (status !== 200 && status !== 204) {
return response.text().then((_responseText) => {
throw new Error("未知的响应状态码: " + status + ", 响应文本: " + _responseText);
});
}
return Promise.resolve<boolean>(false);
}
}
}

File diff suppressed because it is too large Load Diff