深圳新瑞彩网络科技有限公司

WindowsSdk: register_event系列接口

1. int _stdcall register_camera_event(int camera, CAMERA_EVENT event, unsigned int message, HWND hwnd, long * wnd_data, DWORD thread_id, long * thread_data, EVENT_CALLBACK_FUNC callback);
2. int _stdcall register_client_event(void* client, CLIENT_EVENT event, unsigned int message, HWND hwnd, long * wnd_data, DWORD thread_id, long * thread_data, EVENT_CALLBACK_FUNC callback);
3. int _stdcall register_global_event(GLOBAL_EVENT event, unsigned int message, HWND hwnd, DWORD thread_id, EVENT_CALLBACK_FUNC callback);
camera:[in],camera 句柄,由 new_camera 函数返回
client:[in],client上下文,由 new_client 函数返回
event:[in],用户感兴趣的事件,详见相应EVENT 类型描述
message:[in],当事件发生时,rc_ipcam 库向客户程序通知的消息
hwnd:[in],当事件发生时,rc_ipcam 库向客户程序通知的窗口句柄
wnd_data:[in],和 hwnd 参数相对应的自定义数据指针
thread_id:[in],当事件发生时,rc_ipcam 库向客户程序通知的线程 id
thread_data:[in],和 thread_id 参数相对应的自定义数据指针
callback:[in],当事件发生时,rc_ipcam 库向客户程序通知的回调函数,详见EVENT_CALLBACK_FUNC 类型描述
>= 0:代表操作成功,返回值为相应的事件的句柄
< 0:代表操作成功失败,返回值为相应错误代码,参考错误常量定义。
注册对某 camera 感兴趣的事件。
    用户在成功注册一个 camera 后,可以注册对此 camera 感兴趣的事件,
这样当该 camera 发生了用户感兴趣的事件时,会通过之前用户设定的方式来通知用户。
     rc_ipcam 库通知用户的方式有三种:向用户指定的窗口发送消息、向用户指定的线程发送消息、
回调用户指定的回调函数。用户可同时设置其中的一种或多种,
hwnd、thread_id、callback 三个参数分别对应三种方式,当为 NULL 时,表示不使用该方式,否则代表使用。
    如果用户使用窗口消息或线程消息方式,当用户感兴趣的事件发生后,
rc_ipcam 会向指定的窗口或线程发送用户指定的消息。消息号由 message 参数指定,
同时随同消息发送的还有附带的两个标准的消息参数,消息参数的含义根据事件的不同而有所不同,
详见下面的描述。另外用户设置的 message 参数最好 > WM_USER,以免和系统消息冲突。
    如果用户使用回调函数方式,当用户感兴趣的事件发生后,rc_ipcam 会调用用户指定的回调函数。
回调函数中的 message 参数等同于本函数的 message 参数,同时回调函数中的两个消息参数 
wParam、lParam 的含义根据事件的不同而有所不同,详见下面的描述。另外关于回调函数的实现,需要注意两点:
1.rc_ipcam 调用回调函数的上下文是和客户调用本函数的上下文是不同的,是出于不同线程的,因此要用户在回调函数的实现中要确保线程安全。
2.回调函数的实现中不要有任何会阻塞的处理,否则会阻塞 rc_ipcam 库的内部线程,从而会影响整个 rc_ipcam 库的效率。

CAMERA_STATUS_CHANGED

参数说明
wParam发生事件的 client的上下文
lParamCAMERA_STATUS_CHANGED_PARAM * 类型的指针,含义请参考 CAMERA_STATUS_CHANGED_PARAM 类型描述。由 rc_ipcam 库分配,由用户负责用 free_memory 释放。

VIDEO_STATUS_CHANGED

参数说明
wParam发生事件的 client的上下文
lParamPLAY_STATUS_CHANGED_PARAM * 类型的指针,含义请参考 PLAY _STATUS_CHANGED_PARAM 类型描述。由 rc_ipcam 库分配,由用户负责用 free_memory 释放。

AUDIO_STATUS_CHANGED

参数说明
wParam发生事件的 client的上下文
lParamPLAY_STATUS_CHANGED_PARAM * 类型的指针,含义请参考 PLAY _STATUS_CHANGED_PARAM 类型描述。由 rc_ipcam 库分配,由用户负责用 free_memory 释放。

SPEAK_STATUS_CHANGED

参数说明
wParam发生事件的 client的上下文
lParamPLAY_STATUS_CHANGED_PARAM * 类型的指针,含义请参考 PLAY _STATUS_CHANGED_PARAM 类型描述。由 rc_ipcam 库分配,由用户负责用 free_memory 释放。

VIDEO_DATA

参数说明
wParam发生事件的 client的上下文
lParamVIDEO_FRAME * 类型的指针,含义请参考 VIDEO_FRAME 类型描述。由 rc_ipcam 库分配,由用户负责用 free_video 释放。

AUDIO_DATA

参数说明
wParam发生事件的 client的上下文
lParamAUDIO_CHUNK * 类型的指针,含义请参考 AUDIO_CHUNK 类型描述。由 rc_ipcam 库分配,由用户负责用 free_audio 释放。

CLIENT_VIDEO_STATISTIC

参数说明
wParam发生事件的 client 的句柄
lParamint类型, 表示该client相应的video窗口,每秒显示多少帧视频.

MONITORED_STATUS_CHANGED

参数说明
wParam发生事件的 camera 的句柄
lParamchar * 类型的指针,代表具体改变的 camera 状态。用户可通过 parse_status 函数来取得状态名称和取值。由 rc_ipcam 库分配,由用户负责用 free_memory 释放。

CAMERA_STATISTIC

参数说明
wParam发生事件的 camera 的句柄
lParamCAMERA_STATISTICS * 类型的指针,包含camera音视频统计状态。含义请参考 CAMERA_STATISTICS 类型描述。由 rc_ipcam 库分配,由用户负责用 free_memory 释放。

CAMERAS_SEARCH

参数说明
wParamSEARCH_RESULT类型,表示事件的子类型
lParamCAMERA_SEARCH_INFO * 类型的指针,含义请参考 CAMERA_SEARCH_INFO 类型描述。由 rc_ipcam 库分配,由用户负责用 free_memory 释放。

DISK_SPACK_WARNING

参数说明
wParamchar类型, 表示相应磁盘分驱的大写ASCII码值
lParamInt类型, 表示该分驱剩下多少未使用空间,单位MB。

RECORD_COMPLETE

参数说明
wParamchar * 类型的指针, 表示该录像对应的CAMERA ID。由 rc_ipcam 库分配,由用户负责用 free_memory 释放。
lParamchar * 类型的指针, 表示该录像对应的文件路径。由 rc_ipcam 库分配,由用户负责用 free_memory 释放。
如果用户使用窗口消息或线程消息方式,当 VIDEO_DATA 事件发生时,rc_ipcam 会将收到的视频数据通过消息发送到用户程序中。因为视频解码和显示可能会占用大量的 cpu 资源,可能会导致用户处理视频数据的速度落后于 rc_ipcam 的发送速度,从而导致视频播放的实时性和内存开销的不断增长。因此针对窗口消息或线程消息方式下的 VIDEO_DATA 事件,我们在本函数中定义了两个指针类型的参数:wnd_data 和 thread_data。用户应定义相应的 long 类型的变量,并在开始播放图像之前将之初始化为 0,如果用户设置的 wnd_data 和 thread_data 不等于 NULL,那么 rc_ipcam 在每发送一个 VIDEO_DATA 事件相应的消息后,会使用 InterlockedIncrement 函数将之增加1,而用户接收到对应消息后,则应使用 InterlockedDecrement 函数将之减1,这样用户可获知当前消息队列中还未处理的 VIDEO_DATA 事件相应的消息数目,从而采用相应的措施,比如接收后不做解码显示处理,来维持系统的开销在一个平稳状态。如果用户设置的 wnd_data 和 thread_data 等于 NULL,则 rc_ipcam 库不会做上面的相应工作。
来源地址:http://wiki.reecam.cn/WindowsSdk/InterfaceRegisterEvent
本页面最后修订于:2013-04-11 15:42