设备网络SDK开发使用手册

NET_DVR_SetExceptionCallBack_V30

注册接收异常、重连等消息的窗口句柄或回调函数。

Windows下该接口定义如下:

BOOL NET_DVR_SetExceptionCallBack_V30(
  UINT                   nMessage,
  HWND                   hWnd,
  fExceptionCallBack     cbExceptionCallBack,
  void                   *pUser
);

Linux下该接口定义如下:

BOOL NET_DVR_SetExceptionCallBack_V30(
  UINT                   reserved1,
  void                   *reserved2,
  fExceptionCallBack     cbExceptionCallBack,
  void                   *pUser
);

Parameters

reserved1
[in] 消息,Linux下该参数保留
hWnd
[in] 接收异常信息消息的窗口句柄,Linux下该参数保留
cbExceptionCallBack
[in] 接收异常消息的回调函数,回调当前异常的相关信息
pUser
[in] 用户数据

Callback Function

typedef void(CALLBACK *fExceptionCallBack)(
  DWORD    dwType,
  LONG     lUserID,
  LONG     lHandle,
  void     *pUser
);

Callback Function Parameters

dwType
[out] 异常或重连等消息的类型,见下文的异常消息宏定义表:
lUserID
[out] 登录ID
lHandle
[out] 出现异常的相应类型的句柄
pUser
[out] 用户数据

Return Values

TRUE表示成功,FALSE表示失败。接口返回失败请调用NET_DVR_GetLastError获取错误码,通过错误码判断出错原因。

Remarks

Windows下该函数的hWnd和cbExceptionCallBack不能同时为NULL,Linux下cbExceptionCallBack不能设置为NULL,否则将接收不到异常消息。

异常消息宏定义见下表:
宏定义 宏定义值 含义
EXCEPTION_EXCHANGE 0x8000 用户交互时异常(注册心跳超时,心跳间隔为2分钟)
EXCEPTION_AUDIOEXCHANGE 0x8001 语音对讲异常
EXCEPTION_ALARM 0x8002 报警异常
EXCEPTION_PREVIEW 0x8003 网络预览异常
EXCEPTION_SERIAL 0x8004 透明通道异常
EXCEPTION_RECONNECT 0x8005 预览时重连
EXCEPTION_ALARMRECONNECT 0x8006 报警时重连
EXCEPTION_SERIALRECONNECT 0x8007 透明通道重连
SERIAL_RECONNECTSUCCESS 0x8008 透明通道重连成功
EXCEPTION_PLAYBACK 0x8010 回放异常
EXCEPTION_DISKFMT 0x8011 硬盘格式化
EXCEPTION_PASSIVEDECODE 0x8012 被动解码异常
EXCEPTION_EMAILTEST 0x8013 邮件测试异常
EXCEPTION_BACKUP 0x8014 备份异常
PREVIEW_RECONNECTSUCCESS 0x8015 预览时重连成功
ALARM_RECONNECTSUCCESS 0x8016 报警时重连成功
RESUME_EXCHANGE 0x8017 用户交互恢复
NETWORK_FLOWTEST_EXCEPTION 0x8018 网络流量检测异常
EXCEPTION_PICPREVIEWRECONNECT 0x8019 图片预览重连
PICPREVIEW_RECONNECTSUCCESS 0x8020 图片预览重连成功
EXCEPTION_PICPREVIEW 0x8021 图片预览异常
EXCEPTION_MAX_ALARM_INFO 0x8022 报警信息缓存已达上限
EXCEPTION_LOST_ALARM 0x8023 报警丢失
EXCEPTION_PASSIVETRANSRECONNECT 0x8024 被动转码重连
PASSIVETRANS_RECONNECTSUCCESS 0x8025 被动转码重连成功
EXCEPTION_PASSIVETRANS 0x8026 被动转码异常
EXCEPTION_RELOGIN 0x8040 用户重登陆
RELOGIN_SUCCESS 0x8041 用户重登陆成功
EXCEPTION_PASSIVEDECODE_RECONNNECT 0x8042 被动解码重连
EXCEPTION_CLUSTER_CS_ARMFAILED 0x8043 集群报警异常
EXCEPTION_RELOGIN_FAILED 0x8044 重登陆失败,停止重登陆
EXCEPTION_PREVIEW_RECONNECT_CLOSED 0x8045 关闭预览重连功能
EXCEPTION_ALARM_RECONNECT_CLOSED 0x8046 关闭报警重连功能
EXCEPTION_SERIAL_RECONNECT_CLOSED 0x8047 关闭透明通道重连功能
EXCEPTION_PIC_RECONNECT_CLOSED 0x8048 关闭回显重连功能
EXCEPTION_PASSIVE_DECODE_RECONNECT_CLOSED 0x8049 关闭被动解码重连功能
EXCEPTION_PASSIVE_TRANS_RECONNECT_CLOSED 0x804a 关闭被动转码重连功能

如果此结构是以回调方式反馈异常消息,那么应用程序中的异常回调函数实现如下,该函数中的参数dwType表示异常消息类型(见上表);lHandle表示发生异常的相应类型的句柄。

//注册接收异常消息的回调函数
NET_DVR_SetExceptionCallBack_V30(WM_NULL, NULL, g_ExceptionCallBack, NULL);

//接收异常消息的回调函数的外部实现
    void CALLBACK g_ExceptionCallBack(DWORD dwType, LONG lUserID, LONG lHandle, void *pUser)
   {
	char tempbuf[256];
	ZeroMemory(tempbuf,256);
	switch(dwType) 
	{
	case EXCEPTION_AUDIOEXCHANGE:		//语音对讲时网络异常
	  sprintf(tempbuf,"语音对讲时网络异常!!!");
		TRACE("%s",tempbuf);
		//TODO: 关闭语音对讲
		break;
	case EXCEPTION_ALARM:			//报警上传时网络异常
		sprintf(tempbuf,"报警上传时网络异常!!!");
		TRACE("%s",tempbuf);
		//TODO: 关闭报警上传
		break;
	case EXCEPTION_PREVIEW:			//网络预览时异常
		sprintf(tempbuf,"网络预览时网络异常!!!");
		TRACE("%s",tempbuf);	
		//TODO: 关闭网络预览
		break;
	case EXCEPTION_SERIAL:			//透明通道传输时异常
		sprintf(tempbuf,"透明通道传输时网络异常!!!");
		TRACE("%s",tempbuf);
		//TODO: 关闭透明通道
		break;
	case EXCEPTION_RECONNECT:			//预览时重连
		break;
	default:
		break;
	}
   };