新增 Mjpegplayer 用来播放 Web 流
This commit is contained in:
378
SHH.MjpegPlayer/Protocols/Base2Reply.cs
Normal file
378
SHH.MjpegPlayer/Protocols/Base2Reply.cs
Normal file
@@ -0,0 +1,378 @@
|
||||
using System.Runtime.Serialization;
|
||||
|
||||
namespace Core.Protocol
|
||||
{
|
||||
/// <summary>
|
||||
/// 基础响应分页
|
||||
/// </summary>
|
||||
public class BaseReplyPagination
|
||||
{
|
||||
/// <summary>
|
||||
/// 当前页
|
||||
/// </summary>
|
||||
[DataMember]
|
||||
public int Current_Page { get; set; }
|
||||
= 1;
|
||||
|
||||
/// <summary>
|
||||
/// 每页数量
|
||||
/// </summary>
|
||||
[DataMember]
|
||||
public int Page_Size { get; set; }
|
||||
= 1000;
|
||||
|
||||
/// <summary>
|
||||
/// 总记录数
|
||||
/// </summary>
|
||||
[DataMember]
|
||||
public int Total { get; set; }
|
||||
= 0;
|
||||
}
|
||||
|
||||
#region BaseReply
|
||||
|
||||
/// <summary>
|
||||
/// 基础响应
|
||||
/// </summary>
|
||||
[DataContract]
|
||||
public class BaseReply
|
||||
{
|
||||
/// <summary>
|
||||
/// 是否成功
|
||||
/// </summary>
|
||||
[DataMember]
|
||||
public Guid ExecGuid { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 执行码
|
||||
/// </summary>
|
||||
[DataMember]
|
||||
public int Code { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 是否成功
|
||||
/// </summary>
|
||||
[DataMember]
|
||||
public bool Success { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 执行消息
|
||||
/// </summary>
|
||||
[DataMember]
|
||||
public string Msg { get; set; }
|
||||
= string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 数据API
|
||||
/// </summary>
|
||||
[DataMember]
|
||||
public string? DataApi { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 数据主体
|
||||
/// </summary>
|
||||
[DataMember]
|
||||
public object? DataTable { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 数据对象
|
||||
/// </summary>
|
||||
[DataMember]
|
||||
public object? DataObject { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 列信息
|
||||
/// </summary>
|
||||
[DataMember]
|
||||
public List<ReplyColumn>? Columns { get; set; }
|
||||
= new List<ReplyColumn>();
|
||||
|
||||
/// <summary>
|
||||
/// 分页信息
|
||||
/// </summary>
|
||||
[DataMember]
|
||||
public BaseReplyPagination Pagination { get; set; }
|
||||
= new BaseReplyPagination();
|
||||
|
||||
#region Create
|
||||
|
||||
/// <summary>
|
||||
/// 创建基础响应对象
|
||||
/// </summary>
|
||||
/// <param name="msg"></param>
|
||||
/// <returns></returns>
|
||||
public static BaseReply Create(string msg)
|
||||
{
|
||||
var reply = new BaseReply();
|
||||
reply.Msg = msg;
|
||||
|
||||
reply.ReplySuccess();
|
||||
return reply;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Create
|
||||
|
||||
/// <summary>
|
||||
/// 创建基础响应对象
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public static BaseReply Create(List<object> data, List<ReplyColumn>? columns = null)
|
||||
{
|
||||
var reply = new BaseReply();
|
||||
reply.DataTable = data;
|
||||
reply.Columns = columns;
|
||||
|
||||
if (data != null)
|
||||
reply.Pagination.Total = data.Count;
|
||||
|
||||
reply.ReplySuccess();
|
||||
return reply;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Create
|
||||
|
||||
/// <summary>
|
||||
/// 创建基础响应对象
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public static BaseReply Create<T>(List<T> data, List<ReplyColumn>? columns = null)
|
||||
{
|
||||
var reply = new BaseReply();
|
||||
reply.DataTable = data;
|
||||
reply.Columns = columns;
|
||||
|
||||
if (data != null)
|
||||
reply.Pagination.Total = data.Count;
|
||||
|
||||
reply.ReplySuccess();
|
||||
return reply;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region CreateFalt
|
||||
|
||||
/// <summary>
|
||||
/// 创建基础响应对象
|
||||
/// </summary>
|
||||
/// <param name="msg"></param>
|
||||
/// <returns></returns>
|
||||
public static BaseReply CreateFalt(string msg = "失败")
|
||||
{
|
||||
var reply = new BaseReply();
|
||||
reply.Success = false;
|
||||
reply.Code = -1;
|
||||
reply.Msg = msg;
|
||||
return reply;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region ReplySuccess
|
||||
|
||||
/// <summary>
|
||||
/// 成功
|
||||
/// </summary>
|
||||
public void ReplySuccess()
|
||||
{
|
||||
Success = true;
|
||||
Code = 200;
|
||||
|
||||
if (string.IsNullOrEmpty(Msg))
|
||||
Msg = "成功";
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region ReplyFalt
|
||||
|
||||
/// <summary>
|
||||
/// 失败
|
||||
/// </summary>
|
||||
public void ReplyFalt(string msg = "失败", int code = -1)
|
||||
{
|
||||
Success = false;
|
||||
Code = code;
|
||||
Msg = msg;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
/// 基础响应
|
||||
/// </summary>
|
||||
[DataContract]
|
||||
public class Base2Reply
|
||||
{
|
||||
/// <summary>
|
||||
/// 是否成功
|
||||
/// </summary>
|
||||
[DataMember]
|
||||
public bool Success { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 执行码
|
||||
/// </summary>
|
||||
[DataMember]
|
||||
public int Code { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 执行消息
|
||||
/// </summary>
|
||||
[DataMember]
|
||||
public string Msg { get; set; }
|
||||
= string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 数据类型
|
||||
/// </summary>
|
||||
[DataMember]
|
||||
public ReplyDataType DataType { get; set; }
|
||||
= ReplyDataType.Object;
|
||||
|
||||
/// <summary>
|
||||
/// 数据主体
|
||||
/// </summary>
|
||||
[DataMember]
|
||||
public object? Data { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 成功
|
||||
/// </summary>
|
||||
/// <param name="data"></param>
|
||||
public void ReplySuccess(string data)
|
||||
{
|
||||
Success = true;
|
||||
Code = 0;
|
||||
Msg = "成功";
|
||||
Data = data;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 成功
|
||||
/// </summary>
|
||||
public void ReplySuccess()
|
||||
{
|
||||
Success = true;
|
||||
Code = 0;
|
||||
Msg = "成功";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 失败
|
||||
/// </summary>
|
||||
public void ReplyFalt()
|
||||
{
|
||||
Success = false;
|
||||
Code = -1;
|
||||
Msg = "失败";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 失败
|
||||
/// </summary>
|
||||
/// <param name="msg"></param>
|
||||
/// <param name="data"></param>
|
||||
public void ReplyFalt(string msg, string? data = null)
|
||||
{
|
||||
Success = false;
|
||||
Code = -1;
|
||||
Msg = msg;
|
||||
Data = data;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 响应数据类型
|
||||
/// </summary>
|
||||
public enum ReplyDataType
|
||||
{
|
||||
/// <summary>
|
||||
/// 空类型
|
||||
/// </summary>
|
||||
Empty,
|
||||
|
||||
/// <summary>
|
||||
/// 字符串类型
|
||||
/// </summary>
|
||||
String,
|
||||
|
||||
/// <summary>
|
||||
/// 对象类型
|
||||
/// </summary>
|
||||
Object,
|
||||
|
||||
/// <summary>
|
||||
/// 列表类型
|
||||
/// </summary>
|
||||
ObjectList,
|
||||
|
||||
/// <summary>
|
||||
/// 动态对象类型
|
||||
/// </summary>
|
||||
ExpandoObject,
|
||||
|
||||
/// <summary>
|
||||
/// 动态对象类型
|
||||
/// </summary>
|
||||
ExpandoObjectList,
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 响应列
|
||||
/// </summary>
|
||||
public class ReplyColumn
|
||||
{
|
||||
public ReplyColumn()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
public ReplyColumn(string name, string caption)
|
||||
{
|
||||
Name = name;
|
||||
Caption = caption;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 列名
|
||||
/// </summary>
|
||||
[DataMember]
|
||||
public string Name { get; set; }
|
||||
= string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 列标题
|
||||
/// </summary>
|
||||
[DataMember]
|
||||
public string Caption { get; set; }
|
||||
= string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 列宽度
|
||||
/// </summary>
|
||||
[DataMember]
|
||||
public double Width { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 是否可见
|
||||
/// </summary>
|
||||
[DataMember]
|
||||
public bool IsVisible { get; set; }
|
||||
= true;
|
||||
|
||||
/// <summary>
|
||||
/// 格式化字符串
|
||||
/// </summary>
|
||||
[DataMember]
|
||||
public string Format { get; set; }
|
||||
= string.Empty;
|
||||
}
|
||||
}
|
||||
129
SHH.MjpegPlayer/Protocols/CoreImagesModel.cs
Normal file
129
SHH.MjpegPlayer/Protocols/CoreImagesModel.cs
Normal file
@@ -0,0 +1,129 @@
|
||||
using Core.Protocol;
|
||||
using System.Runtime.Serialization;
|
||||
|
||||
namespace Core.WcfProtocol
|
||||
{
|
||||
[DataContract]
|
||||
public class RegisterModelRequest
|
||||
{
|
||||
/// <summary>
|
||||
/// 进程Id
|
||||
/// </summary>
|
||||
[DataMember]
|
||||
public Int32 ProcId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 进程类型
|
||||
/// </summary>
|
||||
[DataMember]
|
||||
public Int32 ProcType { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 进程通信号
|
||||
/// </summary>
|
||||
[DataMember]
|
||||
public Int32 ProcChannel { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 进程启动时间
|
||||
/// </summary>
|
||||
[DataMember]
|
||||
public Int64 ProcStartTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 接收消息端口
|
||||
/// </summary>
|
||||
[DataMember]
|
||||
public Int32 AcceptPort { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 注册结果
|
||||
/// </summary>
|
||||
[DataContract]
|
||||
public class RegisterModelReply : Base2Reply
|
||||
{
|
||||
}
|
||||
|
||||
[DataContract]
|
||||
public class UploadImageRequest
|
||||
{
|
||||
/// <summary>
|
||||
/// 唯一标识
|
||||
/// </summary>
|
||||
[DataMember]
|
||||
public Int64 Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 设备 IP
|
||||
/// </summary>
|
||||
[DataMember]
|
||||
public string IpAddress { get; set; }
|
||||
= string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 进程 ID
|
||||
/// </summary>
|
||||
[DataMember]
|
||||
public Int32 ProcId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 图片序号
|
||||
/// </summary>
|
||||
[DataMember]
|
||||
public UInt64 Order { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 名称
|
||||
/// </summary>
|
||||
[DataMember]
|
||||
public string Name { get; set; }
|
||||
= string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 类型
|
||||
/// </summary>
|
||||
[DataMember]
|
||||
public string Type { get; set; }
|
||||
= string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 时间
|
||||
/// </summary>
|
||||
[DataMember]
|
||||
public DateTime Time { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 图片数据
|
||||
/// </summary>
|
||||
[DataMember]
|
||||
public byte[]? ImageBytes { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 图像宽度
|
||||
/// </summary>
|
||||
[DataMember]
|
||||
public int ImageWidth { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 图像高度
|
||||
/// </summary>
|
||||
[DataMember]
|
||||
public int ImageHeight { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 图片数据
|
||||
/// </summary>
|
||||
[DataMember]
|
||||
public string ImageData { get; set; }
|
||||
= string.Empty;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 图片上传回复
|
||||
/// </summary>
|
||||
[DataContract]
|
||||
public class UploadImageReply : Base2Reply
|
||||
{
|
||||
}
|
||||
}
|
||||
26
SHH.MjpegPlayer/Protocols/ICoreImagesService.cs
Normal file
26
SHH.MjpegPlayer/Protocols/ICoreImagesService.cs
Normal file
@@ -0,0 +1,26 @@
|
||||
using CoreWCF;
|
||||
|
||||
namespace Core.WcfProtocol
|
||||
{
|
||||
/// <summary>
|
||||
/// CoreImagesService 接口
|
||||
/// </summary>
|
||||
[ServiceContract]
|
||||
public interface ICoreImagesService
|
||||
{
|
||||
/// <summary>
|
||||
/// 上传图片
|
||||
/// </summary>
|
||||
/// <param name="req"></param>
|
||||
/// <returns></returns>
|
||||
[OperationContract]
|
||||
UploadImageReply UploadImage(UploadImageRequest req);
|
||||
|
||||
/// <summary>
|
||||
/// 上传图片无返回结果
|
||||
/// </summary>
|
||||
/// <param name="req"></param>
|
||||
[OperationContract(IsOneWay = true)]
|
||||
void UploadImageOneWay(UploadImageRequest req);
|
||||
}
|
||||
}
|
||||
21
SHH.MjpegPlayer/Protocols/IMjpegImagesService.cs
Normal file
21
SHH.MjpegPlayer/Protocols/IMjpegImagesService.cs
Normal file
@@ -0,0 +1,21 @@
|
||||
using Core.WcfProtocol;
|
||||
using CoreWCF;
|
||||
using SHH.MjpegPlayer;
|
||||
|
||||
namespace Player.MJPEG
|
||||
{
|
||||
/// <summary>
|
||||
/// IMjpegImagesService 接口
|
||||
/// </summary>
|
||||
[ServiceContract]
|
||||
public interface IMjpegImagesService : ICoreImagesService
|
||||
{
|
||||
/// <summary>
|
||||
/// 注册模型
|
||||
/// </summary>
|
||||
/// <param name="req"></param>
|
||||
/// <returns></returns>
|
||||
[OperationContract]
|
||||
MjpegPlayInfoReply GetRtspRtcPlayInfo();
|
||||
}
|
||||
}
|
||||
61
SHH.MjpegPlayer/Protocols/MjpegPlayInfoReply.cs
Normal file
61
SHH.MjpegPlayer/Protocols/MjpegPlayInfoReply.cs
Normal file
@@ -0,0 +1,61 @@
|
||||
using Core.Protocol;
|
||||
using System.Runtime.Serialization;
|
||||
|
||||
namespace SHH.MjpegPlayer
|
||||
{
|
||||
/// <summary>
|
||||
/// Mjpeg播放信息回复
|
||||
/// </summary>
|
||||
[DataContract]
|
||||
public class MjpegPlayInfoReply : BaseReply
|
||||
{
|
||||
/// <summary>
|
||||
/// 返回的信息集合
|
||||
/// </summary>
|
||||
[DataMember]
|
||||
public List<MjpegPlayInfo> Infos { get; set; }
|
||||
= new List<MjpegPlayInfo>();
|
||||
}
|
||||
|
||||
public class MjpegPlayInfo
|
||||
{
|
||||
/// <summary>
|
||||
/// 摄像头 ID
|
||||
/// </summary>
|
||||
[DataMember]
|
||||
public Int32 CameraId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 分析类型代码
|
||||
/// </summary>
|
||||
[DataMember]
|
||||
public int AITypeCode { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 分析类型
|
||||
/// </summary>
|
||||
[DataMember]
|
||||
public string AIType { get; set; }
|
||||
= string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// Rtsp 端口
|
||||
/// </summary>
|
||||
[DataMember]
|
||||
public Int32 RtspPort { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 用户名
|
||||
/// </summary>
|
||||
[DataMember]
|
||||
public string Account { get; set; }
|
||||
= string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 密码
|
||||
/// </summary>
|
||||
[DataMember]
|
||||
public string Password { get; set; }
|
||||
= string.Empty;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user