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

 /// <summary>
    
/// 解码回调函数
    
/// 
    
/// typedef void (*DECODER_VIDEO_CAPTURE_CALLBACK)(UINT nChannelNumber, void *DataBuf,UINT width,UINT height,UINT nFrameNum,UINT nFrameTime, SYSTEMTIME *pFrameAbsoluteTime,void *context) 
    
/// </summary>
    
/// <param name="nChannelNumber">解码通道句柄</param>
    
/// <param name="DataBuf">缓冲区地址</param>
    
/// <param name="width">图像宽度</param>
    
/// <param name="height">图像高度</param>
    
/// <param name="nFrameNum">捕获的当前帧的序号</param>
    
/// <param name="nFrameTime">捕获的当前帧的相对时间,单位:毫秒</param>
    
/// <param name="pFrameAbsoluteTime">捕获的当前帧的绝对时间</param>
    
/// <param name="context">设备上下文</param>
    public delegate void DECODER_VIDEO_CAPTURE_CALLBACK(uint nChannelNumber, IntPtr DataBuf, uint width, uint height, uint nFrameNum, uint nFrameTime, SYSTEMTIME pFrameAbsoluteTime, IntPtr context);

    
/// <summary>
    
/// 创建索引完成回调函数
    
/// 
    
/// typedef void (*FILE_REF_DONE_CALLBACK)(UINT nChannel,UINT nSize)
    
/// </summary>
    
/// <param name="nChannel">通道号</param>
    
/// <param name="nSize">索引大小(暂时无效,以后可以增加索引导出、导入功能) </param>
    public delegate void FILE_REF_DONE_CALLBACK(uint nChannel, uint nSize);

    
#endregion



    
/// <summary>
    
/// DS40xxSDK.dll
    
/// </summary>
    public class HikVisionSDK
    {
        
/// <summary>
        
/// 状态
        
/// </summary>
        public static readonly List<string> state = new List<string>(new string[]{
            
"""正在打开""音频信号丢失""视频信号丢失""有物体移动"//0-4 
            "自动分割录像""开始录像""停止录像""启动声音监听""停止声音监听"//5-9 
            "启动视频预览""停止视频预览""启动录像""停止录像""启动视频报警"//10-14 
            "关闭视频报警""启动音频报警""停止音频报警""启动移动侦测""停止移动侦测"//15-19 
            "启动视频遮挡""关闭视频遮挡""开始屏幕输出""停止屏幕输出""启动视频LOGO"//20-24 
            "停止视频LOGO""开始视频OSD""停止视频OSD""切换为黑白视频""切换为彩色视频"//25-29 
            "切换为黑屏显示""切换为白屏显示""视频色彩复位""启动全屏显示""采集卡已经加载"//30-34 
            "采集卡已经卸截""视频服务启动成功""视频服务已停止""静音""音量恢复"//35-39 
            "云台控制命令发送""系统出现未知错误""录像文件大小""配置端口号成功""连接服务端成功"//40-44 
            "正在连接""开始接收图象""异常退出""接收完毕,退出""无法联系服务端"//45-49 
            "服务端拒绝访问""无效""停止客户端连接""图像抓取成功""初始化服务端网络连接成功"//50-54 
            "视频服务启动失败""退出全屏预览""""""" //55-59 
        });

        
//可以用新版函数替代功能或者无效的API 
        
//GetTotalChannels:可用GetEncodeChannelCount替代 
        
//GetTotalDSPs:可用GetDspCount 替代 
        
//SetupDateTime:4.0版本起无效 
        
//HW_GetChannelNum:无效,请使用GetBoardDetail 
        
//HW_GetDeviceSerialNo:无效,请使用GetBoardDetail 
        
//HW_SetVideoOutStandard:无效,请使用SetDisplayStandard或SetDefaultVideoStandard 
        
//HW_SetDspDeadlockMsg:无效 
        
//HW_ResetDsp:无效 
        
//HW_SetDisplayPara:DISPLAY_PARA结构中bToVideoOut无效,MD卡模拟视频输出功能
        
//已经整合到视频矩阵之中。 

        
#region 流类型宏定义

        
/// <summary>
        
/// 视频流 
        
/// #define STREAM_TYPE_VIDEO 
        
/// </summary>
        private const int STREAM_TYPE_VIDEO = 1;
        
/// <summary>
        
/// 音频流 
        
/// #define STREAM_TYPE_AUDIO   
        
/// </summary>
        private const int STREAM_TYPE_AUDIO = 2;
        
/// <summary>
        
/// 音视频复合流 
        
/// #define STREAM_TYPE_AVSYNC 
        
/// </summary>
        private const int STREAM_TYPE_AVSYNC = 3;

        
#endregion

        
#region 1.板卡初始化及卸载

        
/// <summary>
        
/// 1.1初始化DSP InitDSPs
        
///     说  明: 初始化系统中每一块板卡,应在应用软件程序启动时完成。如果返回值为0则表
        
///     明初始化失败,可能没有找到相应的DSP软件模块。
        
/// 
        
/// int __stdcall InitDSPs()
        
/// </summary>
        
/// <returns>系统内可用的编码通道个数。 </returns>
        [DllImport("DS40xxSDK.dll")]
        
public static extern int InitDSPs();


        
/// <summary>
        
/// 1.2卸载DSP DeInitDSPs
        
///     说  明:  关闭每一块板卡上的功能,应在应用软件程序退出时调用。 
        
/// 
        
/// int __stdcall DeInitDSPs()
        
/// </summary>
        
/// <returns>0</returns>
        [DllImport("DS40xxSDK.dll")]
        
public static extern int DeInitDSPs();

        
#endregion

        
#region 2.板卡信息获取

        
/// <summary>
        
/// 2.1获取系统中板卡的张数GetBoardCount 
        
///     说  明:  获取系统中所有板卡的张数,包含编码卡和解码卡。
        
/// 
        
/// unsigned int __stdcall GetBoardCount() 
        
/// </summary>
        
/// <returns>系统中板卡的总张数。</returns>
        [DllImport("DS40xxSDK.dll")]
        
public static extern uint GetBoardCount();

        
/// <summary>
        
/// 2.2获取系统中DSP的个数GetDspCount 
        
///     说  明:  获取系统中所有板卡的DSP的个数。 
        
///     
        
/// unsigned int __stdcall GetDspCount()
        
/// </summary>
        
/// <returns>系统中DSP的总个数</returns>
        [DllImport("DS40xxSDK.dll")]
        
public static extern uint GetDspCount();

        
/// <summary>
        
/// GetTotalDSPs:可用GetDspCount 替代
        
/// 获得实际可用DSP
        
/// </summary>
        
/// <returns></returns>
        [DllImport("DS40xxSDK.dll")]
        
public static extern int GetTotalDSPs();

        
/// <summary>
        
/// 2.3获取系统中编码通道的个数GetEncodeChannelCount
        
///     说  明:  获取系统中所有编码卡的编码通道总个数,包含H系列和HC系列编码卡。
        
/// 
        
/// unsigned int __stdcall GetEncodeChannelCount()
        
/// </summary>
        
/// <returns>系统中编码通道的个数</returns>
        [DllImport("DS40xxSDK.dll")]
        
public static extern uint GetEncodeChannelCount();

        
/// <summary>
        
/// 2.4获取系统中解码通道的个数GetDecodeChannelCount 
        
///     说  明:  获取系统中MD卡的解码通道个数 
        
/// 
        
/// unsigned int __stdcall GetDecodeChannelCount() 
        
/// </summary>
        
/// <returns></returns>
        [DllImport("DS40xxSDK.dll")]
        
public static extern uint GetDecodeChannelCount();

        
/// <summary>
        
/// 2.5获取系统中解码显示通道的个数GetDisplayChannelCount
        
///     说  明:  获取系统中MD卡显示通道的个数,即模拟视频输出通道的个数
        
/// 
        
/// unsigned int __stdcall GetDisplayChannelCount()
        
/// </summary>
        
/// <returns>系统中显示通道的个数</returns>
        [DllImport("DS40xxSDK.dll")]
        
public static extern uint GetDisplayChannelCount();

        
/// <summary>
        
/// 2.6获取板卡详细信息GetBoardDetail 
        
///     说  明:  获取某张板卡的详细信息 
        
/// 
        
/// int __stdcall GetBoardDetail(UINT boardNum,DS_BOARD_DETAIL *pBoardDetail)
        
/// </summary>
        
/// <param name="boardNum">板卡索引</param>
        
/// <param name="pBoardDetail">板卡信息</param>
        
/// <returns>成功返回0;失败返回错误号</returns>
        [DllImport("DS40xxSDK.dll")]
        
public static extern int GetBoardDetail(uint boardNum, ref DS_BOARD_DETAIL pBoardDetail);

        
/// <summary>
        
/// 2.7获取DSP详细信息GetDspDetail
        
///     说  明:  获取某个DSP的详细信息 
        
/// 
        
/// int __stdcall GetDspDetail(UINT dspNum,DSP_DETAIL *pDspDetail)
        
/// </summary>
        
/// <param name="dspNum">DSP索引</param>
        
/// <param name="pDspDetail">DSP信息</param>
        
/// <returns>成功返回0;失败返回错误号</returns>
        [DllImport("DS40xxSDK.dll")]
        
public static extern int GetDspDetail(uint dspNum, ref DSP_DETAIL pDspDetail);

        
/// <summary>
        
/// 2.8获取板卡型号及序列号信息GetBoardInfo
        
///     说  明:  获取板卡的型号及序列号信息
        
/// 
        
/// int __stdcall GetBoardInfo(HANDLE hChannelHandle, ULONG *BoardType,  UCHAR *SerialNo)
        
/// </summary>
        
/// <param name="hChannelHandle">通道句柄</param>
        
/// <param name="BoardType">板卡型号</param>
        
/// <param name="SerialNo">
        
/// 板卡ID号, 内容为板卡序列号的ASCII的数值,次序为SerialNo[0] 对应最高位,
        
/// SerialNo[11]对应最低位。比如卡号为“40000002345”的值对应为 4,0,0,0,0,1,0,0,2,3,4,5 的整形数组。
        
/// </param>
        
/// <returns>成功为0;失败返回错误号 </returns>
        [DllImport("DS40xxSDK.dll")]
        
public static extern int GetBoardInfo(IntPtr hChannelHandle, ulong BoardType, byte[] SerialNo);


        
/// <summary>
        
/// 2.9获取板卡特殊功能信息GetCapability
        
///     说  明:  获取板卡特殊功能信息
        
/// 
        
/// int __stdcall GetCapability(HANDLE hChannelHandle,  CHANNEL_CAPABILITY *Capability) 
        
/// </summary>
        
/// <param name="hChannelHandle">通道句柄</param>
        
/// <param name="Capability">特殊功能 </param>
        
/// <returns>成功返回0;失败返回错误号</returns>
        [DllImport("DS40xxSDK.dll")]
        
public static extern int GetCapability(IntPtr hChannelHandle, CHANNEL_CAPABILITY Capability);


        
/// <summary>
        
/// 2.10获取板卡SDK信息GetSDKVersion
        
///     说  明:  获取当前所使用的DSP、Driver、SDK版本号
        
/// 
        
/// int __stdcall GetSDKVersion(PVERSION_INFO VersionInfo) 
        
/// </summary>
        
/// <param name="VersionInfo">版本信息</param>
        
/// <returns>成功返回0;失败返回错误号。</returns>
        [DllImport("DS40xxSDK.dll")]
        
public static extern int GetSDKVersion(ref PVERSION_INFO VersionInfo);

        
/// <summary>
        
/// 2.11获取板卡SDK及DSP错误报告GetLastErrorNum*,此函数只对H卡有效
        
///     说  明:  获取SDK及DSP错误报告。此函数只对H卡有效,用于HC卡上返回0且无效
        
/// 
        
/// int __stdcall GetLastErrorNum(HANDLE hChannelHandle, ULONG *DspError,  ULONG *SdkError) 
        
/// </summary>
        
/// <param name="hChannelHandle">通道句柄</param>
        
/// <param name="DspError">DSP错误</param>
        
/// <param name="SdkError">SDK错误</param>
        
/// <returns>DSP错误信息、SDK错误信息</returns>
        [DllImport("DS40xxSDK.dll")]
        
public static extern int GetLastErrorNum(IntPtr hChannelHandle, ref int DspError, ref int SdkError);

        
#endregion

        
#region 3.编码卡API

        
#region 3.1通道打开及关闭

        
/// <summary>
        
/// 3.1.1打开通道ChannelOpen
        
///     说  明:  打开通道,获取编码通道的操作句柄,与通道相关的操作需使用相对应的句柄。 
        
/// 
        
/// HANDLE __stdcall ChannelOpen(int ChannelNum) 
        
/// </summary>
        
/// <param name="ChannelNum">通道号(从0开始)</param>
        
/// <returns>成功返回有效句柄(值可能为0);失败返回0xFFFFFFFF。</returns>
        [DllImport("DS40xxSDK.dll")]
        
public static extern IntPtr ChannelOpen(int ChannelNum);

        
/// <summary>
        
/// 3.1.2关闭通道ChannelClose
        
///     说  明:  关闭通道,释放相关资源 
        
/// 
        
/// int __stdcall ChannelClose(HANDLE hChannelHandle) 
        
/// </summary>
        
/// <param name="hChannelHandle">通道句柄</param>
        
/// <returns>成功返回0;失败返回错误号</returns>
        [DllImport("DS40xxSDK.dll")]
        
public static extern int ChannelClose(IntPtr hChannelHandle);

        
#endregion

        
#region 3.2视频预览

        
#region 3.2.1 Overlay预览模式
        
//        释  义:  overlay预览模式 
        
//Overlay通常被称为重叠页面或者是覆盖层,是一种需要特定的硬件支持的页面,通常
        
//被用于显示实时视频于主页面之上,而不需要Blit操作到主页面或用任何方法改变主页面的
        
//内容。使用该方式进行预览可以提高预览的画质和降低CPU利用率。

你可能感兴趣的:(C#,职场,服务器端,休闲,视频监控)