第一次使用海康威视的网络摄像头并进行二次开发,海康威视网络摄像头的二次开发的资料已经比较详细,网上关于这方面的介绍也不少。此处基于我的需求做了一些工作,特此记录。
目标:
1、实时预览
2、抓图
3、录制视频
4、监听告警信号
摄像头型号如下:
准备工作:
官网下载对应的版本的SDK:https://www.hikvision.com/cn/download_61.html
在下载的文件中有对应的开发指南、库文件、头文件、Demo示例等
代码分析:
//消息异常回调函数
void CALLBACK g_ExceptionCallBack(DWORD dwType, LONG lUserID, LONG lHandle, void *pUser)
{
//qDebug("g_ExceptionCallBack: lUserID = %d, dwType = 0x%x\r\n",lUserID, dwType);
switch(dwType)
{
case EXCEPTION_RECONNECT: //预览时重连
break;
case PREVIEW_RECONNECTSUCCESS:
case EXCEPTION_RELOGIN:
case RESUME_EXCHANGE:
break;
default:
break;
}
}
LONG lPort = -1; //全局的播放库port号
void CALLBACK g_RealDataCallBack_V30(LONG lRealHandle, DWORD dwDataType, BYTE *pBuffer,DWORD dwBufSize, DWORD dwUser)
{
switch (dwDataType)
{
case NET_DVR_SYSHEAD: //系统头
if (lPort >= 0)
{
break; //该通道取流之前已经获取到句柄,后续接口不需要再调用
}
if (!PlayM4_GetPort(&lPort)) //获取播放库未使用的通道号
{
break;
}
//m_iPort = lPort; //第一次回调的是系统头,将获取的播放库port号赋值给全局port,下次回调数据时即使用此port号播放
if (dwBufSize > 0)
{
if (!PlayM4_SetS