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

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

 2009-04-08 08:23:50 来源:WEB开发网   
核心提示: #region 3.4视频编码参数设置 // 释 义: 双编码功能(主、子通道) // 对一路视频图像进行两路视频编码,两路视频可以有不同的码流类型、不同分辨率、不 //同码率等,C# 视频监控系列(7):服务器端——封装API(下) [DS40xxSDK.dll] (中)(3),3.

#region 3.4视频编码参数设置

        //        释  义:  双编码功能(主、子通道)
        //  对一路视频图像进行两路视频编码,两路视频可以有不同的码流类型、不同分辨率、不
        //同码率等。3.0版本对双编码功能做了增强,子通道的所有参数都可以任意设置。
        //双编码中主通道和子通道唯一的区别在于:子通道占用的系统资源比主通道少,优先级
        //比主通道低。当系统忙时,会尽量保证主通道编码,并先从子通道开始丢帧。由于占用资源
        //少,因此可以利用子通道来实现多路高分辨率的非实时编码。例如:可以把DS-4000HC中
        //的每个子通道全部设置为4CIF分辨率(SetSubStreamType),而不使用主通道编码,这样就
        //可以实现全部通道的4CIF编码。在一般场景下,每路图像都可以达到15帧以上。

        /// <summary>
        /// 3.4.1主、子通道切换SetupSubChannel
        ///     说  明:  配合双编码模式使用。当设置某个通道为双编码模式时,如主通道编码CIF,子
        ///     通道编码QCIF,这时可对主/子通道分别设置某些参数。关键帧间隔、OSD、LOGO等参数
        ///     对主/子通道是一样的;在设置帧率、量化系数、变码流/定码流模式、码流大小等参数时应
        ///     调用此函数分别对主/子通道进行设置,缺省是对主通道进行设置
        ///
        /// int __stdcall SetupSubChannel(HANDLE hChannelHandle, int iSubChannel)
        /// </summary>
        /// <param name="hChannelHandle">通道句柄</param>
        /// <param name="iSubChannel">子通道号(0表示主通道,1表示主通道)</param>
        /// <returns>成功返回0;失败返回错误号 </returns>
        [DllImport("DS40xxSDK.dll")]
        public static extern int SetupSubChannel(IntPtr hChannelHandle, int iSubChannel);


        /// <summary>
        /// 3.4.2获取双编码时数据流类型GetSubChannelStreamType
        ///     说  明:  配合双编码模式使用,当设置双编码模式时,启动录像后,DSP会向上送两种
        ///     数据流,调用此函数得到主通道和子通道的数据流类型,供应用程序使用。
        ///
        /// int __stdcall GetSubChannelStreamType(void  *DataBuf, int FrameType)
        /// </summary>
        /// <param name="DataBuf">数据缓存区</param>
        /// <param name="FrameType">帧类型</param>
        /// <returns>
        ///     0 其他数据 
        ///     1 主通道数据流的文件头
        ///     2 子通道数据流的文件头
        ///     3 主通道数据流的视频帧类型
        ///     4 子通道数据流的视频帧类型
        ///     5 数据流的音频帧
        /// </returns>
        [DllImport("DS40xxSDK.dll")]
        public static extern int GetSubChannelStreamType(IntPtr DataBuf, int FrameType);

        #region 3.4.3编码流类型的设置及获取(不支持动态修改)

        /// <summary>
        /// 3.4.3.1设置主通道编码流类型SetStreamType
        ///     说  明:  设置主通道编码流类型。此函数需在启动编码前进行设置
        ///
        /// int __stdcall SetStreamType(HANDLE hChannelHandle, USHORT Type)
        /// </summary>
        /// <param name="hChannelHandle">通道句柄</param>
        /// <param name="Type">流类型</param>
        /// <returns>成功返回0;失败返回错误号</returns>
        [DllImport("DS40xxSDK.dll")]
        public static extern int SetStreamType(IntPtr hChannelHandle, ushort Type);

        /// <summary>
        /// 3.4.3.2获取主通道编码流类型GetStreamType
        ///     说  明:  获取主通道编码流类型
        ///
        /// int __stdcall GetStreamType(HANDLE hChannelHandle, USHORT *StreamType)
        /// </summary>
        /// <param name="hChannelHandle">通道句柄</param>
        /// <param name="StreamType">流类型</param>
        /// <returns>成功返回0;失败返回错误号 </returns>
        [DllImport("DS40xxSDK.dll")]
        public static extern int GetStreamType(IntPtr hChannelHandle, ref ushort StreamType);

        /// <summary>
        /// 3.4.3.3设置子通道编码流类型SetSubStreamType
        ///     说  明:  设置子通道编码流类型,此函数需在启动编码前进行设置
        ///
        /// int __stdcall SetSubStreamType(HANDLE hChannelHandle, USHORT Type)
        /// </summary>
        /// <param name="hChannelHandle">通道句柄</param>
        /// <param name="Type">流类型</param>
        /// <returns>成功返回0;失败返回错误号</returns>
        [DllImport("DS40xxSDK.dll")]
        public static extern int SetSubStreamType(IntPtr hChannelHandle, ref ushort Type);

        /// <summary>
        /// 3.4.3.4获取子通道编码流类型GetSubStreamType
        ///     说  明:  获取子通道编码流类型
        ///
        /// int __stdcall GetSubStreamType(HANDLE hChannelHandle, USHORT *StreamType)
        /// </summary>
        /// <param name="hChannelHandle">通道句柄</param>
        /// <param name="StreamType">流类型</param>
        /// <returns></returns>
        [DllImport("DS40xxSDK.dll")]
        public static extern int GetSubStreamType(IntPtr hChannelHandle, ref ushort StreamType);

        #endregion

        #region 3.4.4(支持动态修改)的编码参数设置

        /// <summary>
        /// 3.4.4.1设置编码图像质量SetDefaultQuant
        ///     说  明:  设置图像量化系数,用于调整图像质量。量化系数越小图像质量越高。系统默认量化系数值为18,18,23。
        ///     释 义: 量化系数
        ///     量化系数是强烈影响MPEG标准中编码图像质量和码率的参数,当量化系数越低,图
        ///     像质量就会越高,码率也就越高,反之,图形质量就会越低,码率也就越低
        ///
        /// int __stdcall SetDefaultQuant(HANDLE hChannelHandle, int IQuantVal,  int PQuantVal, int BQuantVal)
        /// </summary>
        /// <param name="hChannelHandle">通道句柄</param>
        /// <param name="IQuantVal">I帧量化系数,取值范围:12-30</param>
        /// <param name="PQuantVal">P帧量化系数。取值范围:12-30(目前无效)</param>
        /// <param name="BQuantVal">B帧量化系数。取值范围:12-30(目前无效)</param>
        /// <returns>成功返回0;失败返回错误号</returns>
        [DllImport("DS40xxSDK.dll")]
        public static extern int SetDefaultQuant(IntPtr hChannelHandle, int IQuantVal, int PQuantVal, int BQuantVal);

        /// <summary>
        /// 3.4.4.2设置编码帧结构、帧率SetIBPMode
        ///     说 明:  设置编码帧结构和帧率。支持动态修改
        ///     释 义: 关键帧间隔
        ///     关键帧为编码码流中采用帧内压缩的图像帧,其特点是图像清晰度好,但数据量大,通
        ///     常作为帧间编码的原始参考帧。关键帧间隔是连续的帧间编码的帧个数,因H264(MPEG4)
        ///     编码是有损压缩,关键帧的个数会影响图像质量,因此关键帧的间隔需要合理设计。
        ///
        /// int __stdcall SetIBPMode(HANDLE hChannelHandle, int KeyFrameIntervals, int BFrames, int PFrames, int FrameRate)
        /// </summary>
        /// <param name="hChannelHandle">通道句柄</param>
        /// <param name="KeyFrameIntervals">关键帧间隔。取值范围1-400,系统默认为100</param>
        /// <param name="BFrames">B帧数量,取值为0或者2,系统默认为2 </param>
        /// <param name="PFrames">P帧数量。目前暂取值无效</param>
        /// <param name="FrameRate">帧率,帧率范围1-25(PAL)、1-30(NTSC)</param>
        /// <returns>成功返回0;失败返回错误号</returns>
        [DllImport("DS40xxSDK.dll")]
        public static extern int SetIBPMode(IntPtr hChannelHandle, int KeyFrameIntervals, int BFrames, int PFrames, int FrameRate);

        #region 3.4.4.3设置编码分辨率

        /// <summary>
        /// 3.4.4.3.1设置主通道分辨率SetEncoderPictureFormat
        ///     说 明:  设置主通道编码分辨率。支持动态修改。
        ///
        /// int __stdcall SetEncoderPictureFormat(HANDLE hChannelHandle,  PictureFormat_t PictureFormat)
        /// </summary>
        /// <param name="hChannelHandle">通道句柄</param>
        /// <param name="PictureFormat">编码图像分辨率(4CIF、DCIF、2CIF、CIF、QCIF) </param>
        /// <returns>成功返回0;失败返回错误号</returns>
        [DllImport("DS40xxSDK.dll")]
        public static extern int SetEncoderPictureFormat(IntPtr hChannelHandle, PictureFormat_t PictureFormat);

        /// <summary>
        /// 3.4.4.3.2设置子通道编码分辨率SetSubEncoderPictureFormat
        ///     说 明:  设置双编码模式时子通道的编码分辨率,支持动态修改。
        ///
        /// int __stdcall SetSubEncoderPictureFormat(HANDLE hChannelHandle,  PictureFormat_t PictureFormat)
        /// </summary>
        /// <param name="hChannelHandle">子通道句柄</param>
        /// <param name="PictureFormat">子通道编码图像分辨率(4CIF、DCIF、2CIF、CIF、 QCIF) </param>
        /// <returns>成功返回0;失败返回错误号</returns>
        [DllImport("DS40xxSDK.dll")]
        public static extern int SetSubEncoderPictureFormat(IntPtr hChannelHandle, PictureFormat_t PictureFormat);

        #endregion

        #region 3.4.4.4设置码率及码流控制模式

        /// <summary>
        /// 3.4.4.4.1设置码流最大比特率SetupBitrateControl
        ///     说 明:  设置编码的最大比特率。设置为0时码流控制无效,设置为某一最大比特率时,
        ///     当编码码流超过该值时,DSP会自动调整编码参数来保证不超过最大比特率,当编码码流
        ///     低于最大比特率时,DSP不进行干涉。调整误差<10%
        ///
        /// int __stdcall SetupBitrateControl(HANDLE hChannelHandle, ULONG MaxBps)
        /// </summary>
        /// <param name="hChannelHandle">通道句柄</param>
        /// <param name="MaxBps">最大比特率。取值:10000以上</param>
        /// <returns>成功返回0;失败返回错误号</returns>
        [DllImport("DS40xxSDK.dll")]
        public static extern int SetupBitrateControl(IntPtr hChannelHandle, ulong MaxBps);

        /// <summary>
        /// 3.4.4.4.2设置码流控制方式SetBitrateControlMode
        ///     说 明:   设置编码码流控制方式。配合SetupBitrateControl使用。当设置为变码率(brVBR)
        ///     时,最大比特率将作为编码码流上限,由DSP在码流上限下自动控制码率,一般会自动回
        ///     落到最低的状态(由设定的图像质量参数和关键帧间隔决定),能最大程度地降低带宽和存
        ///     储空间,但存储容量一般难以估算;当设置为定码率(brCBR)时,以最大比特率作为编码
        ///     码率参数恒定输出码流,不会自动回落到低码流状态,存储容量可根据设定码率的大小进行估算。
        ///
        /// int __stdcall SetBitrateControlMode(HANDLE hChannelHandle, BitrateControlType_t brc)
        /// </summary>
        /// <param name="hChannelHandle">通道句柄</param>
        /// <param name="brc">码流控制方式,分为变码率(brVBR)和恒定码率 (brCBR)两种方式 </param>
        /// <returns>成功返回0;失败返回错误号</returns>
        [DllImport("DS40xxSDK.dll")]
        public static extern int SetBitrateControlMode(IntPtr hChannelHandle, BitrateControlType_t brc);


        #endregion

        /// <summary>
        /// 3.4.5强制设定I帧CaptureIFrame
        ///     说 明:  将当前编码帧强制设定为I帧模式,可从码流中提取该帧单独用于网络传送。
        ///
        /// int __stdcall CaptureIFrame(HANDLE hChannelHandle)
        /// </summary>
        /// <param name="hChannelHandle">通道句柄</param>
        /// <returns>成功返回0;失败返回错误号</returns>
        [DllImport("DS40xxSDK.dll")]
        public static extern int CaptureIFrame(IntPtr hChannelHandle);

        /// <summary>
        /// 3.4.6获取帧统计信息GetFramesStatistics
        ///     说 明:  获取帧统计信息
        ///
        /// int __stdcall GetFramesStatistics(HANDLE hChannelHandle,PFRAMES_STATISTICS framesStatistics)
        /// </summary>
        /// <param name="hChannelHandle">通道句柄</param>
        /// <param name="framesStatistics">帧统计信息</param>
        /// <returns>成功返回0;失败返回错误号</returns>
        [DllImport("DS40xxSDK.dll")]
        public static extern int GetFramesStatistics(IntPtr hChannelHandle, PFRAMES_STATISTICS framesStatistics);

        #endregion

        #endregion

上一页  1 2 3 4  下一页

Tags:视频监控 系列 服务器

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