海康威士硬盘录像机C#开发接口 PlayCtrl.dll播放控件

using System;
using System.Runtime.InteropServices;
using System.Drawing;
namespace HikPlayer
{
#region struct
public struct FRAME_INFO
{
/// <summary>
/// 画面宽,单位像素。如果是音频数据则为0
///
/
// long nWidth;
/// </summary>
public int nWidth;
/// <summary>
/// 画面高。如果是音频数据则为0
///
/// long nHeight;
/// </summary>
public int nHeight;
/// <summary>
/// 时标信息,单位毫秒。
/
//
/// long nStamp;
/// </summary>
public int nStamp;
/// <summary>
/// 数据类型,T_AUDIO16,T_RGB32, T_YV12
///
/// long nType;
/// </summary>
public int nType;
/// <summary>
/
// 编码时产生的图像帧率。
///
/// long nFrameRate;
/// </summary>
public int nFrameRate;
}
/// <summary>
/// typedef struct{
///    long nFilePos;  //文件位置;
///    long nFrameNum;  //帧序号;
///    long nFrameTime;  //帧时标(ms);
/
// }FRAME_POS,*PFRAME_POS; 
/// </summary>
public struct PFRAME_POS
{
/// <summary>
/// 出错的文件位置
///
/// long nFilePos;
/// </summary>
public int nFilePos;
/// <summary>
/
// 出错后正常的帧号
///
/// long nFrameNum;
/// </summary>
public int nFrameNum;
/// <summary>
/// 出错后正常的时间(相对此文件开始时间)
///
/// long nFrameTime;
/// </summary>
public int nFrameTime;
/
// <summary>
/// 出错时的帧号
///
/// long nErrorFrameNum;
/// </summary>
public int nErrorFrameNum;
/// <summary>
/// 出错的绝对时间(设备录象文件有用)
///
/// SYSTEMTIME *pErrorTime;
/// </summary>
public DateTime pErrorTime;
/// <summary>
/// 出错时丢失的帧数
///
/// long nErrorLostFrameNum;
/// </summary>
public int nErrorLostFrameNum;
/// <summary>
///  出错时错误的数据大小
///
/// long nErrorFrameSize;
/
// </summary>
public int nErrorFrameSize;
}
public struct FRAME_TYPE
{
/// <summary>
/// 数据帧首地址
///
/// char *pDataBuf;
/// </summary>
public byte[] pDataBuf;
/
// <summary>
/// 数据帧的大小
腹壁反射/// long nSize;
/// </summary>
public int nSize;
/// <summary>
/// 数据帧的个数
///
/// long nFrameNum; 
/// </summar
y>
public int nFrameNum;
/// <summary>
/// 是否音频帧
///
/// BOOL bIsAudio; 
/// </summary>
public bool bIsAudio;
/// <summary>
/// 保留
///
/// long nReserved;
/
// </summary>
public int nReserved;
}
#endregion
#region delegate
/// <summary>
/// void (CALLBACK* DecCBFun)(long nPort,char * pBuf,long nSize,FRAME_INFO * pFrameInfo, long nReserved1,long nReserved2)
///
/// 注意:关于回调函数。因为vb不支持多线程,所以当回调函数是VB声明的函数时,在vc的线程中调用
/// vb的函数,会有问题。详见:Microsoft Knowledge Base Article - Q198607 “PRB: Access Violation
in VB
/// Run-Time Using AddressOf ”。
/// </summary>
/// <param name="nPort">播放器通道号</param>
/// <param name="pBuf">解码后的音视频数据</param>
/// <param name="nSize">解码后的音视频数据pBuf的长度</param>
/// <param name="pFrameInfo">图像和声音信息</param>
/// <param name="nReserved1">保留参数</param>
/// <param name="nReserved2">保留参数</param>
public delegate void DecCBFun(int nPort, IntPtr pBuf, int nSize, ref FRAME_INFO pFrameInfo, int nReserved1, int nReserved2);
/// <summary>
/// void (CALLBACK* DisplayCBFun)(long nPort,char * pBuf,long nSize,long nWidth,long nHeight,long nStamp,long nType,long nReceaved));
/// </summary>
/// <param name="nPort">通道号</param>
/// <param name="pBuf">返回图像数据</param>
/// <param name="nSize">返回图像数据大小</param>
/// <param name="nWidth">画面宽,单位像素</param>
/// <param name="nHeight">画面高</param>
/// <param name="nStamp">时标信息,单位毫秒</param>
/// <param name="nType">数据类型, T_YV12,T_RGB32,T_UYVY</param>
/// <param name="nReceaved">保留</param>
public delegate void DisplayCBFun(int nPort, IntPtr pBuf, int nSize, int nWidth, int nHeight, int nStamp, int nType, int nReceaved);
/// <summary>
/// void CALLBACK SourceBufCallBack(long nPort,DWORD nBufSize, DWORD dwUser,void*pContext)
/// </summary>
/// <param name="nPort">播放器通道号</param>
/// <param name="nBufSize">缓冲区中剩余数据</param>
/// <param name="dwUser">用户数据</param>
/// <param name="pContext">保留数据</param>
public delegate void SourceBufCallBack(int nPort, ushort nBufSize, ushort dwUser, IntPtr pContext);
/// <summary>
/// void FileRefDone(DWORD nPort,DWORD nUser)
/// </summary>
/// <param name="nPort">播放器通道号</param>
/// <param name="nUser">用户数据</param>
public delegate void FileRefDone(int nPort, ushort nUser);
/// <summary>
/// void CALLBACK DrawFun(long nPort,HDC hDc,LONG nUser);
/// </summary>
/// <para
m name="nPort">通道号</param>
/// <param name="hDc">hDc OffScreen表面设备上下文,你可以像操作显示窗口客户区DC那样操作它。</param>
/// <param name="nUser">用户数据,就是上面输入的用户数据</param>
public delegate void DrawFun(int nPort, IntPtr hDc, int nUser);
/// <summary>
/// void __stdcall Verify(long nPort, FRAME_POS * pFilePos, DWORD bIsVideo, DWORD nUser)
/// </summary>
/// <param name="nPort">通道号</param>
/// <param name="pFilePos">文件位置</param>
/// <param name="bIsVideo">是否视频数据,1视频,0音频</param>
/// <param name="nUser">用户数据</param>
public delegate void Verify(int nPort, ref PFRAME_POS pFilePos, ushort bIsVideo, ushort nUser);
语音学
/// <summary>
/
// void __stdcall  Audio(long nPort, char * pAudioBuf, long nSize, long nStamp, long nType, long nUser)
/// </summary>
/// <param name="nPort">通道号</param>
/// <param name="pAudioBuf">wave格式音频数据</param>
/// <param name="nSize">音频数据长度</param>
/// <param name="nStamp"> 时标(ms) </param>
/// <param name="nType">音频类型T_AUDIO16, 采样率16khz,单声道,每个采样点16位表示 </param>
/// <param name="nUser">用户自定义数据</param>
public delegate void Audio(int nPort, string pAudioBuf, int nSize, int nStamp, int nType, int nUser);
/// <summary>
/// void (CALLBACK *funEncChange)(long nPort,long nUser)
/// </summary>
/// <param name="nPort">通道号</param>
/// <param name="nUser">用户自定义数据</param>
public delegate void EncChange(int nPort, int nUser);
/// <summary>
/// void(CALLBACK *funGetOrignalFrame)(long nPort,FRAME_TYPE *frameType, long nUser)
/// </summary>
/// <param name="nPort">通道号</param>
/// <param name="frameType">有关数据帧的信息</param>
/// <param name="nUser"></param>
public delegate void GetOrignalFrame(int nPort, ref FRAME_TYPE frameType, int nUser);
#endregion
/// <summary>
/// 播放器
/// </summary>
public sealed class HikPlayer
{
#region Const Member Variables
#region Source buffer
//#define SOURCE_BUF_MAX   
public static readonly uint SOURCE_BUF_MAX = 1024 * 100000;
/
/#define SOURCE_BUF_MIN    1024*50
public static readonly uint SOURCE_BUF_MIN = 1024 * 50;
#endregion
#region frame type
/// <summary>
/// 音频数据;采样率16khz,单声道,每个采样点16位表示。
/// </summary>
public static readonly int T_AUDIO16 = 101;
public static readonly int T_AUDIO8 = 100;
/// <summary>
/// 视频数据,uyvy格式。“U0-Y0-V0-Y1-U2-Y2-V2-Y3….”,第一个像素位于图像左上角。
/
// </summary>
public static readonly int T_UYVY = 1;
/// <summary>
/// 视频数据,yv12格式。排列顺序“Y0-Y1-……”,“V0-V1….”,“U0-U1-…..”。
/// </summary>
public static readonly int T_YV12 = 3;
/// <summary>
/// 视频数据。每个像素4个字节,排列方式与位图相似,“B-G-R-0 ……”,第一个像素位于图像左下角。
/// </summary>
public static readonly int T_RGB32 = 7;
#endregion
#region Stream type
/// <summary>
/// 实时模式,适合播放网络实时数据,解码器会立刻解码。
/// </summary>
public static readonly int STREAME_REALTIME = 0;
/// <summary>
/// 文件模式,适合用户把文件数据用流方式输入。注意:当Hik_PlayM4_InputData()返回FALSE时,用户要等一下重新输入。
/// </summary>
public static readonly int STREAME_FILE = 1;
#endregion
#region Error code
/// <summary>
/// 没有错误
/// </summary>
public static readonly int HIK_PLAYM4_NOERROR = 0;    //no error
最小螺杆的加工/// <summary>
/// 输入参数非法
/// </summary>
public static readonly int HIK_PLAYM4_PARA_OVER = 1;    //input parameter is invalid;
/// <summary>
/// 调用顺序不对
/// </summary>
public static readonly int HIK_PLAYM4_ORDER_ERROR = 2;    //The order of the function to be called is error.
/// <summary>
/// 多媒体时钟设置失败
/// </summary>
public static readonly int HIK_PLAYM4_TIMER_ERROR = 3;    //Create multimedia clock failed;
/// <summary>
/// 视频解码失败
/// </summary>
public static readonly int HIK_PLAYM4_DEC_VIDEO_ERROR = 4;    //Decode video data failed.
/// <summary>
荡气回肠唐宋篇/// 音频解码失败
/// </summary>
public static readonly int HIK_PLAYM4_DEC_AUDIO_ERROR = 5;    //Decode audio data failed.
/// <summary>
/// 分配内存失败
/// </summary>
public static readonly int HIK_PLAYM4_ALLOC_MEMORY_ERROR = 6;    //Allocate memory failed.
/// <summary>
/// 文件操作失败
/// </summary>
public static readonly int HIK_PLAYM4_OPEN_FILE_ERROR = 7;    //Open the file failed.
/// <summary>
/
// 创建线程事件等失败
/// </summary>
public static readonly int HIK_PLAYM4_CREATE_OBJ_ERROR = 8;    //Create thread or event failed
/// <summary>
/// 创建directDraw失败
/// </summary>
public static readonly int HIK_PLAYM4_CREATE_DDRAW_ERROR = 9;    //Create DirectDraw object failed.
/// <summary>
/// 创建后端缓存失败
/// </summary>
public static readonly int HIK_PLAYM4_CREATE_OFFSCREEN_ERROR = 10;    //failed when crea
ting off-screen surface.
/// <summary>
/// 缓冲区满,输入流失败
/// </summary>
public static readonly int HIK_PLAYM4_BUF_OVER = 11;    //buffer is overflow
/// <summary>
/// 创建音频设备失败
巴蜀文化
/// </summary>
public static readonly int HIK_PLAYM4_CREATE_SOUND_ERROR = 12;    //failed when creating audio device.   
/// <summary>
/// 设置音量失败
/// </summary>
public static readonly int HIK_PLAYM4_SET_VOLUME_ERROR = 13;    //Set volume failed
/// <summary>
/// 只能在播放文件时才能使用此接口
/// </summary>
public static readonly int HIK_PLAYM4_SUPPORT_FILE_ONLY = 14;    //The function only support play file.
/// <summary>
/// 只能在播放流时才能使用此接口
/// </summary>
public static readonly int HIK_PLAYM4_SUPPORT_STREAM_ONLY = 15;    //The function only support play stream.
/// <summary>
/// 系统不支持,解码器只能工作在Pentium 3以上
/// </summary>
public static readonly int HIK_PLAYM4_SYS_NOT_SUPPORT = 16;//System not support.
/// <summary>
/// 没有文件头
/// </summary>
public static readonly int HIK_PLAYM4_FILEHEADER_UNKNOWN = 17;    //No file header.
/// <summary>
/// 解码器和编码器版本不对应
/// </summary>
public static readonly int HIK_PLAYM4_VERSION_INCORRECT = 18;    //The version of decoder and encoder is not adapted. 
/// <summary>
/// 初始化解码器失败
/// </summary>
public static readonly int HIK_PALYM4_INIT_DECODER_ERROR = 19;    //Initialize decoder failed.
/// <summary>
/// 文件太短或码流无法识别
/// </summary>
public static readonly int HIK_PLAYM4_CHECK_FILE_ERROR = 20;    //The file data is unknown.
/// <summary>
/// 初始化多媒体时钟失败
/// </summary>
public static readonly int HIK_PLAYM4_INIT_TIMER_ERROR = 21;    //Initialize multimedia clock failed.
/// <summary>
/// 位拷贝失败
/// </summary>
public static readonly int HIK_PLAYM4_BLT_ERROR = 22;    //Blt failed.
/// <summary>
/// 显示overlay失败
穆勒五法/// </summary>
public static readonly int HIK_PLAYM4_UPDATE_ERROR = 23;    //Update failed.
public static readonly int HIK_PLAYM4_OPEN_FILE_ERROR_MULTI = 24;  //openfile error, streamtype is multi
public static readonly int HIK_PLAYM4_OPEN_FILE_ERROR_VIDEO = 25; //openfile error, streamtype is video
public static readonly int HIK_PLAYM4_JPEG_COMPRESS_ERROR = 26;  //JPEG compress error
public static readonly int HIK_PLAYM4_EXTRACT_NOT_SUPPORT = 27;    //Don't support the version of this file.
public static readonly i

本文发布于:2024-09-22 10:01:02,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/145964.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据   失败   文件   音频   用户   图像   视频   解码器
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议