基于Qt的海康威视网络摄像头SDK的二次开发——摄像头登录和预览

海康威视网络摄像头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

展开阅读全文

没有更多推荐了,返回首页