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,如需转载请自行联系原作者

相关文章
|
17天前
|
缓存 前端开发 API
API接口封装系列
API(Application Programming Interface)接口封装是将系统内部的功能封装成可复用的程序接口并向外部提供,以便其他系统调用和使用这些功能,通过这种方式实现系统之间的通信和协作。下面将介绍API接口封装的一些关键步骤和注意事项。
|
3月前
|
JavaScript API
【vue实战项目】通用管理系统:api封装、404页
【vue实战项目】通用管理系统:api封装、404页
37 3
|
3月前
|
API C++
socket编程之常用api介绍与socket、select、poll、epoll高并发服务器模型代码实现(1)
前言   本文旨在学习socket网络编程这一块的内容,epoll是重中之重,后续文章写reactor模型是建立在epoll之上的。
34 0
|
3月前
|
监控 安全 Linux
socket编程之常用api介绍与socket、select、poll、epoll高并发服务器模型代码实现(3)
高并发服务器模型-poll poll介绍   poll跟select类似, 监控多路IO, 但poll不能跨平台。其实poll就是把select三个文件描述符集合变成一个集合了。
36 0
|
1月前
|
前端开发 API 数据处理
uni-app 封装api请求
uni-app 封装api请求
15 0
|
6月前
|
存储 网络协议 Java
UDP,TCP特点对比,DatagramPacket,SocketAddress的使用 ,UDP的API,如何编写一个简单的回显服务器及客户端,详细解释(本文内容较难,建议多次阅读,自己敲一敲)
UDP,TCP特点对比,DatagramPacket,SocketAddress的使用 ,UDP的API,如何编写一个简单的回显服务器及客户端,详细解释(本文内容较难,建议多次阅读,自己敲一敲)
|
2月前
|
缓存 监控 测试技术
ERP系统对接方案与API接口封装系列(高并发)
企业资源规划(ERP)系统是现代企业管理的核心,它集成了企业内部的各个部门和业务流程。为了实现ERP系统与其他外部系统或应用程序之间的数据交换和协作,需要对接方案。API(应用程序编程接口)是实现系统对接的常用方法之一。
|
3月前
|
前端开发 JavaScript 小程序
【uniapp】十分钟带你封装uniapp的api请求
【uniapp】十分钟带你封装uniapp的api请求
128 0
|
3月前
|
Ubuntu 应用服务中间件 API
将网易云API通过宝塔布署到云服务器
将网易云API通过宝塔布署到云服务器

热门文章

最新文章