WEB开发网
开发学院软件开发C语言 C# 视频监控系列(7):服务器端——封装API(下) ... 阅读

C# 视频监控系列(7):服务器端——封装API(下) [DS40xxSDK.dll] (中)

 2009-04-08 08:23:50 来源:WEB开发网   
核心提示: #region 3.5数据捕获 #region 3.5.1抓图(获取单帧图像数据) #region 3.5.1.1抓取BMP格式图像 /// <summary> /// 3.5.1.1.1获取原始yuv422格式数据GetOriginalImage /// 说 明: 获得原始

#region 3.5数据捕获

        #region 3.5.1抓图(获取单帧图像数据)

        #region 3.5.1.1抓取BMP格式图像

        /// <summary>
        /// 3.5.1.1.1获取原始yuv422格式数据GetOriginalImage
        ///     说 明:  获得原始yuv422格式图像,DS4000HC原始图像是4CIF图像格式(包括QCIF编码),
        ///     DS-4000HS原始图像为CIF图像格式,DS400xH卡的原始图象是CIF图象格式。
        ///
        /// int __stdcall GetOriginalImage(HANDLE hChannelHandle, UCHAR *ImageBuf,  ULONG *Size)
        /// </summary>
        /// <param name="hChannelHandle">通道句柄</param>
        /// <param name="ImageBuf">原始yuv422格式图像指针</param>
        /// <param name="Size">原始yuv422格式图像尺寸,函数调用前是ImageBuf的大小,调用后是实际图像所占用的字节数 </param>
        /// <returns>成功返回0,失败返回错误号</returns>
        [DllImport("DS40xxSDK.dll")]
        public static extern int GetOriginalImage(IntPtr hChannelHandle, byte[] ImageBuf, out int Size);

        /// <summary>
        /// 3.5.1.1.2图像格式转换YUVtoBMP SaveYUVToBmpFile
        ///     说 明:  用户程序可调用此函数来生成24位的bmp文件,如果是DS4000HC卡抓图则
        ///     Width 为704,Height 为576PAL/480NTSC,如果是DS400xH卡抓图则Width可能为352
        ///     或176,Height为288、240、144或120,要根据缓冲区的大小来判断。
        ///
        /// int __stdcall SaveYUVToBmpFile(char *FileName, unsigned char *yuv, int Width, int Height)
        /// </summary>
        /// <param name="FileName">文件名</param>
        /// <param name="yuv">yuv422格式图像指针</param>
        /// <param name="Width">图像宽度</param>
        /// <param name="Height">图像高度</param>
        /// <returns></returns>
        [DllImport("DS40xxSDK.dll")]
        public static extern int SaveYUVToBmpFile(string FileName, byte[] yuv, int Width, int Height);

        /// <summary>
        /// 3.5.1.2抓取JPEG格式图像GetJpegImage
        ///     说 明:  抓取JPEG格式图像
        ///
        /// int __stdcall GetJpegImage(HANDLE hChannelHandle,UCHAR *ImageBuf, ULONG *Size,UINT nQuality)
        /// </summary>
        /// <param name="hChannelHandle">通道句柄</param>
        /// <param name="ImageBuf">JPEG图像指针</param>
        /// <param name="Size">JPEG图像尺寸,函数调用前是ImageBuf的大小,调用后是实际图像所占用的字节数 </param>
        /// <param name="nQuality">JPEG图像质量,取值范围1-100,取值100时质量最好</param>
        /// <returns></returns>
        [DllImport("DS40xxSDK.dll")]
        public static extern int GetJpegImage(IntPtr hChannelHandle, byte[] ImageBuf, out int Size, uint nQuality);

        #endregion

        #region 3.5.2原始图像数据流捕获(获取YUV420格式数据流)

        /// <summary>
        /// 3.5.2.1注册原始图像数据流回调函数RegisterImageStreamCallback
        ///     说 明:  注册获取原始图像数据流函数,用户可以获取实时的YUV420格式的预览数据
        ///
        /// int __stdcall RegisterImageStreamCallback (IMAGE_STREAM_CALLBACK ImageStreamCallback,void *context)
        /// </summary>
        /// <param name="ImageStreamCallback">原始图像数据流回调函数 </param>
        /// <param name="context">设备上下文</param>
        /// <returns>成功返回0;失败返回错误号</returns>
        [DllImport("DS40xxSDK.dll")]
        public static extern int RegisterImageStreamCallback(IMAGE_STREAM_CALLBACK ImageStreamCallback, IntPtr context);

        /// <summary>
        /// 3.5.2.2开启及停止原始数据流捕获SetImageStream
        ///     说明:    开启或停止原始图像数据流捕获,此函数依赖主机的处理速度。DS-4000HS只能捕获不大于CIF格式的数据流
        ///
        /// 函 数:  int __stdcall SetImageStream(HANDLE hChannel,BOOL bStart,UINT fps, UINT width,UINT height,unsigned char *imageBuffer)
        /// </summary>
        /// <param name="hChannel">通道句柄</param>
        /// <param name="bStart">是否启动捕获</param>
        /// <param name="fps">帧率</param>
        /// <param name="width">图像宽度,必须是4CIF宽度的1/8,1/4,1/2或原始大小704</param>
        /// <param name="height">图象高度,必须是4CIF高度的1/8,1/4,1/2或原始大小576PAL/480NTSC</param>
        /// <param name="imageBuffer">数据存储缓存</param>
        /// <returns>成功返回0;失败返回错误号</returns>
        [DllImport("DS40xxSDK.dll")]
        public static extern int SetImageStream(IntPtr hChannel, bool bStart, uint fps, uint width, uint height, char[] imageBuffer);

        #endregion

        #region 3.5.3编码数据流捕获(获取编码后H.264格式数据流)即录像

        //注意:注册直接回调或者消息回调后,需要启动编码数据流捕获函数才能进行数据回调。三
        //种数据回调方式,只需选取其中一种使用即可。对于HC系列板卡(包括HC、HC+、HCS、
        //HS),推荐使用第一种读取方式。对于H系列板卡,只能使用后两种读取方式。

        #region 3.5.3.1编码数据流捕获方式设置

        /// <summary>
        /// 3.5.3.1.1.1注册编码图像数据流直接读取回调函数
        ///     说 明:  DS4000HC系列板卡新增的一种数据流读取方式,当启动数据捕获后,  
        ///     StreamDirectReadCallback会提供数据流的地址、长度、帧类型等,供用户程序直接处理。
        ///
        /// 函 数:  int __stdcall RegisterStreamDirectReadCallback (STREAM_DIRECT_READ_CALLBACK StreamDirectReadCallback,void *Context)
        /// </summary>
        /// <param name="StreamDirectReadCallback">编码数据流直接读取回调函数</param>
        /// <param name="context">设备上下文</param>
        /// <returns>成功返回0;失败返回错误号</returns>

        [DllImport("DS40xxSDK.dll")]
        public static extern int RegisterStreamDirectReadCallback(STREAM_DIRECT_READ_CALLBACK StreamDirectReadCallback, IntPtr context);

        #endregion

        #region 3.5.3.1.2方式二、消息读取方式

        /// <summary>
        /// 3.5.3.1.2.1设置消息读取伐值,此函数只对H卡有效
        ///     说 明:  设置消息读取的伐值,可以将缓冲区的数据在OnDataReady中一次性取走
        ///
        /// int __stdcall SetupNotifyThreshold(HANDLE hChannelHandle,  int iFramesThreshold)
        /// </summary>
        /// <param name="hChannelHandle">通道句柄</param>
        /// <param name="iFramesThreshold">读取消息伐值,范围1-10</param>
        /// <returns>成功返回0;失败返回错误号</returns>
        [DllImport("DS40xxSDK.dll")]
        public static extern int SetupNotifyThreshold(IntPtr hChannelHandle, int iFramesThreshold);

        /// <summary>
        /// 3.5.3.1.2.2注册消息读取码流函数
        ///     说 明:  当数据准备好时,SDK会向hWnd窗口发送MessageId消息,目标窗口收到
        ///     Message后调用ReadStreamData读取一帧数据。如果HC卡与H卡混插,可以先调用
        ///     RegisterStreamDirectReadCallback函数来注册HC卡取码流回调函数,再调用
        ///     RegisterMessageNotifyHandle函数来注册H卡取码流消息函数。
        ///     HC系列板卡建议使用方式一进行数据捕获。
        ///
        /// int __stdcall RegisterMessageNotifyHandle(HWND hWnd, UINT MessageId)
        /// </summary>
        /// <param name="hWnd">通道句柄</param>
        /// <param name="MessageId">自定义消息</param>
        /// <returns>成功返回0;失败返回错误号 </returns>
        [DllImport("DS40xxSDK.dll")]
        public static extern int RegisterMessageNotifyHandle(IntPtr hWnd, uint MessageId);

        #endregion

        #region 3.5.3.1.3方式三、另一种直接读取方式

        /// <summary>
        /// 3.5.3.1.3.1注册直接读取码流回调函数
        ///     说 明:  另一种数据流读取方式
        ///
        /// int __stdcall RegisterStreamReadCallback (STREAM_READ_CALLBACK StreamReadCallback, void *Context)
        /// </summary>
        /// <param name="StreamReadCallback">直接读取码流回调函数</param>
        /// <param name="Context">设备上下文</param>
        /// <returns>成功返回0;失败返回错误号</returns>
        [DllImport("DS40xxSDK.dll")]
        public static extern int RegisterStreamReadCallback(STREAM_READ_CALLBACK StreamReadCallback, IntPtr Context);

        #endregion

        /// <summary>
        /// 3.5.3.2读取码流函数
        ///     说 明:  读指定长度的数据流,适用于方式二及方式三。当调用StartVideoCapture 或
        ///     StartMotionDetection后,SDK线程会向已注册的用户窗口消息处理函数发送指定的消息,
        ///     并提供消息来源的通道号。当用户程序收到该消息时,可调用本函数来读取数据,Length 在
        ///     作为输入时必须提供缓冲的大小,ReadStreamData会判断缓冲是否足够,如果缓冲足够大
        ///     则返回值为当前的读取的帧长度,否则返回错误。
        ///         在HC卡中,如果已经先调用了RegisterStreamDirectReadCallback()函数,则不需调用
        ///     ReadStreamData来读取数据,因为音视频数据会在RegisterStreamDirectReadCallback所注册
        ///     的回调函数中直接返回。
        ///
        /// int __stdcall ReadStreamData(HANDLE hChannelHandle, void *DataBuf,  DWORD *Length, int *FrameType)
        /// </summary>
        /// <param name="hChannelHandle">通道句柄</param>
        /// <param name="DataBuf">自定义的数据缓存区</param>
        /// <param name="Length">输入:缓存区的大小;输出:一帧数据的大小</param>
        /// <param name="FrameType">帧类型</param>
        /// <returns>成功返回0;失败返回错误号</returns>
        [DllImport("DS40xxSDK.dll")]
        public static extern int ReadStreamData(IntPtr hChannelHandle, byte[] DataBuf, out ulong Length, out int FrameType);

上一页  1 2 3 4 

Tags:视频监控 系列 服务器

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接