110,536
社区成员
发帖
与我相关
我的任务
分享
/**********************************vc++**********************************************/
typedef struct VIDEO_INFO
{
int nVideoWidth;/**< 像素宽度 */
int nVideoHeight;/**< 像素高度 */
int nVideoFPS;/**< 每秒多少帧 */
unsigned char data[58];/**< 解码信息头 */
DWORD dataSize;/**< 解码信息头长度 */
struct timeval presentationTime;/**< 解码信息头时间戳 */
}VIDEO_INFO;
/** @brief 报警信息结构体 */
typedef struct MSG_INFO
{
char ip[16];/**< 报警设备IP */
long object_id;/**< 对象ID */
long rule_name;/**< 参考枚举 Rule_name */
long rule_id;/**< 规则ID */
double rel_center_x;
double rel_center_y;
double rel_dimension_x;
double rel_dimension_y;
double rel_velocity_x;
double rel_velocity_y;
long preset_id;
double direction;
double time_in_rule;
double range;
}MSG_INFO;
typedef void (CALLBACK *MSGCallBack)(LONG lCommand,LONG nID,int nCh, char *pAlarmInfo, DWORD dwBufLen, void* Context);//报警回调函数
/**
* @brief 视频流回调函数
* @param nStreamID 视频流的索引ID,AIIVS_OpenStream返回的
* @param nID 设备索引ID,AIIVS_Connect返回的
* @param nCh 设备的通道号
* @param pBuffer 视频流帧数据
* @param dwBufSize 帧数据长度
* @param presentationTime 此帧时间戳
* @param RealDataCallBackContext AIIVS_OpenStream时候 RealDataCallBackContext传进的值
* @return 无返回值
*/
typedef void (CALLBACK *fRealDataCallBack) (LONG nStreamID,LONG nID, int nCh, const unsigned char *pBuffer, DWORD dwBufSize,struct timeval presentationTime, void* RealDataCallBackContext);//视频流回调
AIIVS_API void __stdcall AIIVS_Init();//初始化SDK
AIIVS_API LONG __stdcall AIIVS_Connect(char * sIp, int nPort , char * sName , char * sPwd ,MSGCallBack pMsgCallBack = NULL, void * Context = NULL); //连接IVS设备
AIIVS_API int __stdcall AIIVS_OpenStream(LONG nID , int nCh,fRealDataCallBack pRealDataCallBack = NULL,void *RealDataCallBackContext = NULL);//开启视频流,返回通道流ID
AIIVS_API int __stdcall AIIVS_GetHeadStream(LONG nID , int nCh,VIDEO_INFO *pVideoInfo);//获取视频流头部
IVSPLAY_API BOOL _stdcall IVS_PLAY_Init();//初始化
IVSPLAY_API LONG _stdcall IVS_PLAY_OpenStream(HWND hWnd,VIDEO_INFO *pVideo_info,bool bRealdecode = true);//打开流播放
/*********************************C#*******************************************/
public const string aiIvs = "AIIVS.dll";
public delegate void MSGCallBack(long lCommand,long nID,int nCh, ref MSG_INFO pAlarmInfo,uint dwBufLen,ref int Context);
public delegate void fRealDataCallBack(long nStreamID, long nID, int nCh, byte[] pBuffer, uint dwBufSize, timeval presentationTime,ref int RealDataCallBackContext);
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct VIDEO_INFO
{
public int nVideoWidth;//视频像素宽度
public int nVideoHeight;//视频像素高度
public int nVideoFPS;//视频每秒播放帧数
public byte[] data;//解码头
public int dataSize;//解码头长度
public timeval presentationTime;//解码头时间戳
}
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct MSG_INFO
{
public string ip;/**报警设备IP */
public long object_id;/**对象ID */
public long rule_name;/**参考枚举 Rule_name */
public long rule_id;/**规则ID */
public double rel_center_x;
public double rel_center_y;
public double rel_dimension_x;
public double rel_dimension_y;
public double rel_velocity_x;
public double rel_velocity_y;
public long preset_id;
public double direction;
public double time_in_rule;
public double range;
}
public struct timeval
{
public long tv_sec;
public long tv_usec;
}
[DllImport(aiIvs]
public static extern void AIIVS_Init();
[DllImport(aiIvs]
public static extern long AIIVS_Connect(string sIp, int nPort , string sName , string sPwd ,MSGCallBack pMsgCallBack, ref int Context);
[DllImport(aiIvs, EntryPoint = "_AIIVS_OpenStream@16")]
public static extern int AIIVS_OpenStream(ref long nID ,ref int nCh,ref fRealDataCallBack pRealDataCallBack, ref int RealDataCallBackContext);//开启视频流,返回通道流ID
public const string ivsPlay = "IVSPlay.dll";
[DllImport(ivsPlay]
public static extern bool IVS_PLAY_Init();
[DllImport(ivsPlay]
public static extern long IVS_PLAY_OpenStream(IntPtr hWnd,ref VIDEO_INFO pVideo_info, bool bRealdecode);
public partial class frmVido : Form
{
public frmVido()
{
InitializeComponent();
}
public int n_lUserID = -1;
public int RealDataCallBackContext = -1;
public IvsAPI.MSGCallBack MsgBack;
public IvsAPI.fRealDataCallBack FrdcBack;
private void frmVido_Load(object sender, EventArgs e)
{
IvsAPI.AIIVS_Init();
VIDEO_INFO video = new VIDEO_INFO();
MsgBack = new IvsAPI.MSGCallBack(msgCallBack);
FrdcBack = new IvsAPI.fRealDataCallBack(frcBack);
int ibi = 0;
long ll = IvsAPI.AIIVS_Connect("192.168.1.15", 80, "admin", "admin",MsgBack, ref n_lUserID);
int ii = IvsAPI.AIIVS_OpenStream(ref ll, ref ibi,ref FrdcBack, ref RealDataCallBackContext);
int it = IvsAPI.AIIVS_GetHeadStream(ll, 1, ref video);
bool bolt = PlayAPI.IVS_PLAY_Init();
long lon = PlayAPI.IVS_PLAY_OpenStream(pictureBox1.Handle, ref video, true);
}
private void ListenAlarmThreadProc()
{
}
private void msgCallBack(long lCommand, long nID, int nCh, ref MSG_INFO pAlarmInfo, uint dwBufLen, ref int Context)
{
MessageBox.Show("成功");
}
private void frcBack(long nStreamID, long nID, int nCh, byte[] pBuffer, uint dwBufSize, timeval presentationTime,ref int RealDataCallBackContext)
{
bool bol1 = PlayAPI.IVS_PLAY_InputData(nStreamID, pBuffer, dwBufSize);
}
}
BOOL NET_DVR_SetDVRMessageCallBack_V30(
MSGCallBack fMessageCallBack,
void *pUser
);
BOOL NET_DVR_SetDVRMessageCallBack_V30(
in MSGCallBack fMessageCallBack,
in IntPtr pUser
);
Callback Function
typedef void(CALLBACK *MSGCallBack)(
LONG lCommand,
NET_DVR_ALARMER *pAlarmer,
char *pAlarmInfo,
DWORD dwBufLen,
void *pUser
);
delegate void MSGCallBack(
Int64 lCommand,
ref NET_DVR_ALARMER pAlarmer,
string pAlarmInfo,
Int32 dwBufLen,
IntPtr pUser
);
public class User
{
....你定义
}
public class NET_DVR_ALARMER
{
....你定义
}
public delegate MSGCallBackDelegate(long lCommand,ref NET_DVR_ALARMER pAlarmer,StringBuilder pAlarmInfo,uint dwBufferLen,ref User puser);
在声明一个这样签名的方法
public MSGCallBackMethod(long lCommand,ref NET_DVR_ALARMER pAlarmer,StringBuilder pAlarmInfo,uint dwBufferLen,ref User puser)
{
......
}
定义一个成员字段:MSGCallBackDelegate MSGCallBack;
调用
MSGCallBack = new MSGCallBack(MSGCallBackMethod);
调用时候用这个MSGCallBack
标注起来。