C# 视频监控系列(7):服务器端——封装API(下)(5)

简介:
  ///   <summary>
        
///  3.6.1.2设置移动侦测区域范围及个数
        
///      说 明:  设置运动检测区域;当收到运动信息的数据帧(PktMotionDetection)时,调用
        
///      MotionAnalyzer;MotionAnalyzer会根据在SetupMotionDetection中的设置来分析每个需要
        
///      检测的区域,当某区域的阀值(MotionAnalyzer的iThreshold)到达时,会在返回的区域数组    
        
///      (MotionAnalyzer的iResult)标明最后的判断;矩形框范围是(0,0,703,575)
        
///  
        
///  int __stdcall SetupMotionDetection(HANDLE hChannelHandle, RECT *RectList, int iAreas) 
        
///   </summary>
        
///   <param name="hChannelHandle"> 通道句柄 </param>
        
///   <param name="RectList"> 矩形框数组 </param>
        
///   <param name="iAreas"> 矩形框个数,最大值为100 </param>
        
///   <returns> 成功返回0;失败返回错误号 </returns>
        [DllImport( " DS40xxSDK.dll " )]
        
public   static   extern   int  SetupMotionDetection(IntPtr hChannelHandle,  ref  Rectangle RectList,  int  iAreas);

        
///   <summary>
        
///  3.6.1.3移动侦测分析
        
///      说 明:  动态监测分析,移动侦测由DSP完成,DSP送出的IPktMotionData帧就是已经
        
///      分析好的运动信息,区域的运动分析由主机完成,数据源由码流中的PktMotionData帧提供,
        
///      结果在iResult中说明,2.0以上版本的运动分析基于DSP提供的运动强度,不再使用运动
        
///      矢量,其灵敏度及可靠性有大幅提高,用户软件可使用由码流提供的运动强度信息来自己分
        
///      析或调用该函数来进行区域分析
        
///  
        
///  函 数:  int __stdcall MotionAnalyzer(HANDLE hChannelHandle, char *MotionData,  int iThreshold, int *iResult) 
        
///   </summary>
        
///   <param name="hChannelHandle"> 通道句柄 </param>
        
///   <param name="MotionData"> 运动矢量指针 </param>
        
///   <param name="iThreshold"> 判断运动程度的伐值 </param>
        
///   <param name="iResult"> 按照伐值指定的强度分析后的结果数组。数组的大小在SetupMotionDetection的numberOfAreas指定,如果某数组单元的值大于零则表明有该区域有该值表明的运动强度 </param>
        
///   <returns> 成功返回0;失败返回错误号  </returns>
        [DllImport( " DS40xxSDK.dll " )]
        
public   static   extern   int  MotionAnalyzer(IntPtr hChannelHandle,  char [] MotionData,  int  iThreshold,  ref   int  iResult);
        
#endregion

        
#region  3.6.2设置方式二

        
///   <summary>
        
///  3.6.2.1设置移动侦测(扩展)
        
///      说 明:  设置移动侦测,这种设置方式可替代设置方式一中3个函数的共同作用,在这种情况下,DSP将不再反馈移动侦测帧。
        
///      参数delay:画面静止之后的延时时间,单位为秒,若在该延时时间内没有产生
        
///      移动侦测,则将回调函数MotionDetectionCallback之中的参数bMotionDetected标志为False,
        
///      若在该延时时间之内,在当前所设置的区域内产生移动侦测,则bMotionDetected被标志为
        
///      True,并且在产生移动侦测之后的delay时间内,DSP不会对在此时间段之内的视频帧进行
        
///      移动侦测分析,因此DSP和主机都省却了在此时间段对产生的视频运动进行频繁判断和分
        
///      析。直至超过了此delay秒延时时间,DSP才会对此时刻的视频进行判断,若产生了移动侦
        
///      测,则回调函数中的bMotionDetected被再次标志为True,否则标志为False。
        
///      
        
///  
        
///  函 数:  int __stdcall SetupMotionDetectionEx(HANDLE hChannelHandle,int iGrade, int iFastMotionDetectFps, int iSlowMotionDetectFps,UINT delay,RECT *RectList, int  iAreas, MOTION_DETECTION_CALLBACK MotionDetectionCallback,int reserved) 
        
///   </summary>
        
///   <param name="hChannelHandle"> 通道句柄 </param>
        
///   <param name="iGrade">
        
///      运动分析灵敏度等级,取值范围0-6,0级最灵敏,6级最迟钝, 
        
///      推荐值2。将iGrade和“0x80000000“做”或“操作,会对移动侦测启用 
        
///      自适应分析。
        
///   </param>
        
///   <param name="iFastMotionDetectFps"> 高速运动检测的帧间隔,取值范围0-12,0表示不作高速运动检测,通常值取为2 </param>
        
///   <param name="iSlowMotionDetectFps"> 低速运动检测的帧间隔,取值范围13以上,当取值为0时,不作低速运动检测 </param>
        
///   <param name="delay"> 前一次移动帧测产生后的延时时间 </param>
        
///   <param name="RectList"> 进行移动侦测的矩形框数组 </param>
        
///   <param name="iAreas"> 矩形框个数(最大个数为100) </param>
        
///   <param name="MotionDetectionCallback"> 移动侦测结果回调函数  </param>
        
///   <param name="reserved"> 保留参数 </param>
        
///   <returns> 成功返回0;失败返回错误号 </returns>
        [DllImport( " DS40xxSDK.dll " )]
        
public   static   extern   int  SetupMotionDetectionEx(IntPtr hChannelHandle,  int  iGrade,  int  iFastMotionDetectFps,  int  iSlowMotionDetectFps,  uint  delay,  ref  Rectangle RectList,  int  iAreas, MOTION_DETECTION_CALLBACK MotionDetectionCallback,  int  reserved);


        
#endregion

        
#region  3.6.3启动及停止移动侦测

        
///   <summary>
        
///  3.6.3.1启动移动侦测 
        
///      说 明:  启动移动侦测。
        
///      注意:移动侦测和编码相互独立,用户程序可在不启动编码的情况下进行运动检测
        
///  
        
///  int __stdcall StartMotionDetection(HANDLE hChannelHandle) 
        
///   </summary>
        
///   <param name="hChannelHandle"> 通道句柄 </param>
        
///   <returns> 成功返回0;失败返回错误号 </returns>
        [DllImport( " DS40xxSDK.dll " )]
        
public   static   extern   int  StartMotionDetection(IntPtr hChannelHandle);

        
///   <summary>
        
///  3.6.3.2停止移动侦测
        
///      说 明:  停止移动侦测
        
///  
        
///  int __stdcall StopMotionDetection(HANDLE hChannelHandle) 
        
///   </summary>
        
///   <param name="hChannelHandle"></param>
        
///   <returns></returns>
        [DllImport( " DS40xxSDK.dll " )]
        
public   static   extern   int  StopMotionDetection(IntPtr hChannelHandle);

        
#endregion

        
#endregion

        
#region  3.7视频信息叠加

        
#region  3.7.1信息叠入视频编码(OSD、LOGO、MASK)

        
// 注意:使用此部分函数时,在录像文件中,包含所叠加的信息 

        
#region  3.7.1.1 OSD

        
///   <summary>
        
///  3.7.1.1.1设置OSD显示模式
        
///  
        
///  函 数:  int __stdcall SetOsdDisplayMode(HANDLE hChannelHandle, int Brightness,  BOOL Translucent, int parameter, USHORT *Format1, USHORT *Format2) 
        
///   </summary>
        
///   <param name="hChannelHandle"> 通道句柄 </param>
        
///   <param name="Brightness"> OSD显示亮度。0最暗,255最亮 </param>
        
///   <param name="Translucent"> OSD图像是否做半透明处理 </param>
        
///   <param name="parameter"> Bit0:是否自动进行颜色翻转 Bit16-23垂直放大倍数 Bit24-31水平  </param>
        
///   <param name="Format1"> 描述字符叠加的位置和次序的格式 </param>
        
///   <param name="Format2"></param>
         #region  USHORT    *Forma1, *Format2
        
// USHORT    *Forma1, *Format2 
        
// 描述字符叠加的位置和次序的格式串,具体定义如下: 
        
// USHORT X, USHORT Y, CHAR0, CHAR1, CHAR2,… CHARN,  NULL 
        
//   其中X,Y 是该字串在标准4CIF图象的起始位置,X必须是16的倍数,Y可以在图
        
// 象高度内取值即(0-575)PAL 、(0-479)NTSC;CHARN也是USHORT型的参数,可以
        
// 是ASCII码也可以是汉字,当想要显示当前时间时,可以指定为固定的时间定义值,其值
        
// 如下: 
        
// _OSD_YEAR4   四位的年显示,如2004 
        
// _OSD_YEAR2   两位的年显示,如02 
        
// _OSD_MONTH3   英文的月显示,如 Jan  
        
// _OSD_MONTH2   两位阿拉伯数字的月显示,如07 
        
// _OSD_DAY     两位的阿拉伯数字的日显示,如31 
        
// _OSD_WEEK3   英文的星期显示,如Tue 
        
// _OSD_CWEEK1   中文的星期显示,如星期二 
        
//     _OSD_HOUR24   24小时的时钟显示,如18 
        
// _OSD_HOUR12   12小时的时钟显示,如AM09或PM09 
        
// _OSD_MINUTE   两位分钟的显示 
        
// _OSD_SECOND   两位秒的显示 
        
// 在格式字符串的最后必须以NULL(0)结尾,否则会显示错误的内容。 
        
// 字符串和时间显示可以在FORMAT1 也可以在FORMAT2,也可以混合在一起,但不得超
        
// 过一行4CIF 图象的宽度。 
        
// 例如: 
        
// 要显示位置在16,19的字符串“办公室”的格式字符串如下: 
        
//   USHORT Format[] = {16, 19, ‘办’,’公’,’室’, ‘\0’}; 
        
// 要显示位置在8, 3的时间字符串可以如下: 
        
//   USHORT Format[]={8, 3, _OSD_YEAR4, ‘年’,_OSD_MONTH2,’月’,_OSD_DAY, 
        
// ‘日’,_OSD_HOUR24,’:’, _OSD_MINUTE, ‘:’, _OSD_SECOND, ‘\0’}; 
        
// 如果只想显示其中一行,则将起始的字符串定义如下: 
        
//   USHORT FormatNoDisplay[]={0, 0, ‘\0’}; 
        
// 返回值:  成功返回0;失败返回错误号 
        
// 说 明:  OSD字符中,ASCII字符的标准分辨率为8×16,汉字的标准分辨率为16×16。 
        
// 由于在编码之前需要对原始图像进行缩小才能产生编码所需的分辨率,此时为了保证在
        
// 缩小后的编码图像上能够看清OSD字符,就需要先把OSD字符放大以后再叠加在4CIF的
        
// 原始图像上。 
        
// 如果不指定放大倍数(采用默认设置),则系统会根据该通道录像的分辨率自动设置,
        
// 这样在任何分辨率下都可以保证回放时能够看清OSD内容,但是这会导致OSD的大小和位
        
// 置在原始图像中不固定。 
        
// 为了避免上面的现象,用户可以指定OSD的大小。例如,如果应用程序想以CIF、DCIF、
        
// 2CIF、4CIF的分辨率录像,这时候可以将放大系数设为2、2,此时OSD的位置始终固定,
        
// 但在不同的编码分辨率下,OSD字符的分辨率也不同,所以需要特别注意。如果此时使用
        
// QCIF录像,则OSD字符会变得模糊不清(因为QCIF要对图像进行1/4缩小,而对OSD
        
// 字符只进行了2倍的放大)。具体配置详见下表: 
        
// 水平放大倍数  垂直放大倍数  适合的录像分辨率  说明 
        
// 1  1  4CIF  其它分辨率下会模糊 
        
// 1  2  2CIF  小于2CIF时无法分辩 
        
// 2  2  CIF、DCIF  QCIF时无法分辩 
        
// 4  4  QCIF  在其它分辨率下字符会很大 
        
// 任意系数为0  自动设置(默认值)  
        
// 其它无效值  按水平2、垂直2处理  
        
// 注意:因为字符的位置会随着不同的录像分辨率而改变,在位置改变后,某些OSD字符的
        
// 位置可能会超出图像的范围,此时这些字符将无法显示,但系统并不会返回错误。 
         #endregion
        
///   <returns></returns>
        [DllImport( " DS40xxSDK.dll " )]
        
public   static   extern   int  SetOsdDisplayMode(IntPtr hChannelHandle,  int  Brightness,  bool  Translucent,  int  parameter,  ushort [] Format1,  ushort [] Format2);

        
///   <summary>
        
///  3.7.1.1.2设置OSD显示模式(扩展)
        
///      说 明:  此函数为SetOsdDisplayMode的扩展,SetOsdDisplayModeEx函数支持最多8行OSD字符串的显示。
        
///  
        
///  int __stdcall SetOsdDisplayModeEx(HANDLE hChannelHandle,int color, BOOL Translucent,int param,int nLineCount,USHORT **Format) 
        
///   </summary>
        
///   <param name="hChannelHandle"> 通道句柄 </param>
        
///   <param name="Brightness"> OSD显示亮度。0最暗,255最亮 </param>
        
///   <param name="Translucent"> OSD图像是否做半透明处理 </param>
        
///   <param name="param"> Bit0:是否自动进行颜色翻转 Bit16-23垂直放大倍数 Bit24-31水平放大倍数 </param>
        
///   <param name="nLineCount"> OSD显示的行数,最多为8行 </param>
        
///   <param name="Format"> 多行字符显示
        
///  USHORT **Format;多行字符显示,描述字符叠加的位置和次序的格式串,  
        
///  其中每一行的第一元素X和第二元素Y 是该字串在标准4CIF图象的起始位置,X必须是
        
///  16的倍数,Y可以在图象高度内取值即(0-575)PAL 、(0-479)NTSC;可以是ASCII码
        
///  也可以是汉字,当想要显示当前时间时,可以指定为固定的时间定义值,其值如下: 
        
///  _OSD_YEAR4   四位的年显示,如2004 
        
///  _OSD_YEAR2   两位的年显示,如02 
        
///  _OSD_MONTH3   英文的月显示,如 Jan  
        
///  _OSD_MONTH2   两位阿拉伯数字的月显示,如07 
        
///  _OSD_DAY     两位的阿拉伯数字的日显示,如31 
        
///  _OSD_WEEK3   英文的星期显示,如Tue 
        
///  _OSD_CWEEK1   中文的星期显示,如星期二 
        
///  _OSD_HOUR24   24小时的时钟显示,如18 
        
///  _OSD_HOUR12   12小时的时钟显示,如AM09或PM09 
        
///  _OSD_MINUTE   两位分钟的显示 
        
///  _OSD_SECOND   两位秒的显示 
        
///  在格式字符串的每一行最后一个元素必须以NULL(0)结尾,否则会显示错误的内容。 
        
///  返回值:  成功返回0;失败返回错误号。 
        
///  说 明:  此函数为SetOsdDisplayMode的扩展,SetOsdDisplayModeEx函数支持最多8行
        
///  OSD字符串的显示。 
        
///   </param>
        
///   <returns> 成功返回0;失败返回错误号 </returns>
        [DllImport( " DS40xxSDK.dll " )]
        
public   static   extern   int  SetOsdDisplayModeEx(IntPtr hChannelHandle,  int  Brightness,  bool  Translucent,  int  param,  int  nLineCount,  char [] Format);

        
///   <summary>
        
///  3.7.1.1.3设置OSD显示
        
///      说 明:  设置OSD显示,将当前的系统时间年月日星期时分秒等信息叠加在视频之上,并可作透明处理。
        
///  
        
///  int __stdcall SetOsd(HANDLE hChannelHandle, BOOL Enable) 
        
///   </summary>
        
///   <param name="hChannelHandle"> 通道句柄 </param>
        
///   <param name="Enable"> OSD是否显示 </param>
        
///   <returns> 成功返回0;失败返回错误号 </returns>
        [DllImport( " DS40xxSDK.dll " )]
        
public   static   extern   int  SetOsd(IntPtr hChannelHandle,  bool  Enable);

        #endregion


本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/586688,如需转载请自行联系原作者

相关文章
|
1月前
|
开发框架 .NET API
RESTful API 设计与实现:C# 开发者的一分钟入门
【10月更文挑战第5天】本文从零开始,介绍了如何使用 C# 和 ASP.NET Core 设计并实现一个简单的 RESTful API。首先解释了 RESTful API 的概念及其核心原则,然后详细说明了设计 RESTful API 的关键步骤,包括资源识别、URI 设计、HTTP 方法选择、状态码使用和错误处理。最后,通过一个用户管理 API 的示例,演示了如何创建项目、定义模型、实现控制器及运行测试,帮助读者掌握 RESTful API 的开发技巧。
64 7
|
2月前
|
缓存 测试技术 API
API的封装步骤流程
API封装流程是一个系统化的过程,旨在将内部功能转化为可复用的接口供外部调用。流程包括明确需求、设计接口、选择技术和工具、编写代码、测试、文档编写及部署维护。具体步骤为确定业务功能、数据来源;设计URL、请求方式、参数及响应格式;选择开发语言、框架和数据库技术;实现数据连接、业务逻辑、错误处理;进行功能、性能测试;编写详细文档;部署并持续维护。通过这些步骤,确保API稳定可靠,提高性能。
|
3月前
|
开发框架 缓存 .NET
并发请求太多,服务器崩溃了?试试使用 ASP.NET Core Web API 操作筛选器对请求进行限流
并发请求太多,服务器崩溃了?试试使用 ASP.NET Core Web API 操作筛选器对请求进行限流
215 0
|
2月前
|
API PHP
ThinkPHP 通用的API格式封装
本文介绍了在ThinkPHP框架中如何统一封装API返回格式的方法,包括创建状态码枚举类、编写统一格式化函数以及在BaseController和Error控制器中重写`__call`方法来处理不存在的方法或控制器调用,以实现统一的错误处理和返回格式。
ThinkPHP 通用的API格式封装
|
1月前
|
JSON JavaScript 前端开发
使用 Node.js 和 Express 构建 RESTful API 服务器
【10月更文挑战第3天】使用 Node.js 和 Express 构建 RESTful API 服务器
|
1月前
|
JSON JavaScript API
(API接口系列)商品详情数据封装接口json数据格式分析
在成长的路上,我们都是同行者。这篇关于商品详情API接口的文章,希望能帮助到您。期待与您继续分享更多API接口的知识,请记得关注Anzexi58哦!
|
1月前
|
JSON JavaScript 前端开发
使用JavaScript和Node.js构建简单的RESTful API服务器
【10月更文挑战第12天】使用JavaScript和Node.js构建简单的RESTful API服务器
19 0
|
1月前
|
API C#
异步轮询 Web API 的实现与 C# 示例
异步轮询 Web API 的实现与 C# 示例
82 0
|
3月前
|
缓存 测试技术 API
从零到一:构建高效的 RESTful API 服务器
在当今的软件开发环境中,RESTful API 是实现系统间数据交互的关键组件。本文探讨了如何从头开始构建一个高效的 RESTful API 服务器,包括技术选型、架构设计、性能优化等方面的内容。我们将以 Python 的 Flask 框架为例,展示如何设计一个可扩展且高性能的 API 服务器,并提供实际代码示例来说明最佳实践。
|
3月前
|
API C# 开发框架
WPF与Web服务集成大揭秘:手把手教你调用RESTful API,客户端与服务器端优劣对比全解析!
【8月更文挑战第31天】在现代软件开发中,WPF 和 Web 服务各具特色。WPF 以其出色的界面展示能力受到欢迎,而 Web 服务则凭借跨平台和易维护性在互联网应用中占有一席之地。本文探讨了 WPF 如何通过 HttpClient 类调用 RESTful API,并展示了基于 ASP.NET Core 的 Web 服务如何实现同样的功能。通过对比分析,揭示了两者各自的优缺点:WPF 客户端直接处理数据,减轻服务器负担,但需处理网络异常;Web 服务则能利用服务器端功能如缓存和权限验证,但可能增加服务器负载。希望本文能帮助开发者根据具体需求选择合适的技术方案。
167 0
下一篇
无影云桌面