海康威视网络摄像头SDK的二次开发,需要摄像头IP地址,与主机的IP地址在同一网段,能够ping通摄像头IP,才能登录成功。摄像头是有账户名和密码,这需要记住,在开发的时候需要用到。
在开发前可以先用IE浏览器,输入摄像头的IP地址,正常就会出现要登录摄像头的所需要账户名和密码。
在开发前需要配置好SDK的环境,环境配置在前一博客介绍过。
进入正题。
在整个流程之前首先要调用SDK初始函数。
// 初始化
bool isok = NET_DVR_Init();
if(isok == false)
{
cout << "NET_DVR_Init error;error number is " <<NET_DVR_GetLastError();
return;
}
//设置连接时间与重连时间
NET_DVR_SetConnectTime(2000, 1);
NET_DVR_SetReconnect(10000, true);
接下来就是调用登录函数,
NET_DVR_DEVICEINFO_V30 DeviceInfoTmp;
long userID = NET_DVR_Login_V30("192.168.1.64",8000,"admin","qweasdzxc123456",&DeviceInfoTmp);
if(userID<0)
{
cout << "NET_DVR_Login_V30 error;" << "error number is " << NET_DVR_GetLastError();
return;
}
cout << userID;
还有其他的注册函数,例如
详细可以查阅SDK的开发说明文档。
到实时画面预览部分,
long Realplay::play(long userID, HWND hWnd, NET_DVR_PREVIEWINFO struPlayInfo)
{
struPlayInfo={0};
struPlayInfo.hPlayWnd = hWnd;//需要 SDK 解码时句柄设为有效值,仅取流不解码时可设为空
struPlayInfo.lChannel = 1;//预览通道号
struPlayInfo.dwStreamType = 0;//码流类型:0-主码流,1-子码流,2-三码流,3-虚拟码流,以此类推
struPlayInfo.dwLinkMode = 0;//0- TCP 方式,1- UDP 方式,2- 多播方式,3- RTP 方式,4-RTP/RTSP,5-RSTP/HTTP
struPlayInfo.bBlocked = 1;//0- 非阻塞取流,1- 阻塞取流
long IRealPlayHandle = NET_DVR_RealPlay_V40(userID,&struPlayInfo,NULL,NULL);
if(IRealPlayHandle <0)
{
cout << "NET_DVR_RealPlay_V40 error;error number " <<NET_DVR_GetLastError();
NET_DVR_Logout(userID);
return 0;
}
else
return IRealPlayHandle;
}
调用此函数的方法:
HWND hWnd = (HWND)ui->label->winId();
NET_DVR_PREVIEWINFO struPlayInfo;
long IRealPlayHandle = Realplay::play(userID,hWnd,struPlayInfo);
基本上,摄像头的画面就会在label上显示。
代码示例:http://download.csdn.net/download/lvjianqing007/10262317