海康摄像机库函数连接及显示视频

好记性不如乱笔头,记下来总是好的。。。
回复
BG6RSH
帖子: 132
注册时间: 周日 6月 23, 2019 12:00 pm

海康摄像机库函数连接及显示视频

帖子 BG6RSH »

连接需要摄像机的:IP地址、端口号、用户名、登录密码。
开发包下载:
HCNetSDK.zip
海康摄像机开发包
(39.58 MiB) 下载 4 次
  1. void MainWindow::on_btn_dvr_connect_clicked()
  2. {
  3.     if(!dvr_connected) {
  4.         // 1.初始化海康监控SDK
  5.         bool isok = NET_DVR_Init();
  6.         if(isok) {
  7.             qDebug() << "SDK初始化成功!";
  8.             loger("1.海康SDK初始化成功!连接摄像头:" + ui->edit_dvr_host->text() + ":" + ui->edit_dvr_post->text());
  9.             //设置连接时间与重连时间
  10.             // NET_DVR_SetConnectTime(3000, 3);
  11.             // NET_DVR_SetReconnect(30000, true);
  12.             // 2.设置连接相机的信息,用户注册设备
  13.             NET_DVR_USER_LOGIN_INFO struLoginInfo; //包含相机参数的结构体
  14.             NET_DVR_DEVICEINFO_V40 struDeviceInfoV40; //登录后的相机信息
  15.  
  16.             struLoginInfo.bUseAsynLogin = 0; //同步登录方式
  17.             strcpy_s(struLoginInfo.sDeviceAddress, ui->edit_dvr_host->text().toLatin1()); //设备IP地址
  18.             struLoginInfo.wPort = ui->edit_dvr_post->text().toInt(); //设备服务端口
  19.             strcpy_s(struLoginInfo.sUserName, ui->edit_dvr_user->text().toLatin1()); //设备登录用户名
  20.             strcpy_s(struLoginInfo.sPassword, ui->edit_dvr_password->text().toLatin1()); //设备登录密码
  21.  
  22.             lUserID = NET_DVR_Login_V40(&struLoginInfo, &struDeviceInfoV40); //设备登录
  23.  
  24.             if(lUserID < 0) {
  25.                 qDebug() << "登录失败: " << NET_DVR_GetLastError();
  26.                 loger("  ...摄像头连接失败,错误代码:" + QString::number(NET_DVR_GetLastError()));
  27.                 NET_DVR_Cleanup();//释放 SDK 资源
  28.                 return;
  29.             }
  30.             else {
  31.                 qDebug() << "登录成功 ";
  32.                 loger("  ...摄像头连接成功!");
  33.                 // HWND hWnd = (HWND)ui->graphicsView->winId(); //获取窗口句柄
  34.                 HWND hWnd = (HWND)ui->graphicsView->winId(); //获取窗口句柄
  35.                 NET_DVR_PREVIEWINFO struPlayInfo;
  36.                 struPlayInfo.hPlayWnd = hWnd; //需要 SDK 解码时句柄设为有效值,仅取流不解码时可设为空
  37.                 struPlayInfo.lChannel = 1; //预览通道号
  38.                 struPlayInfo.dwStreamType = 0; //0-主码流,1-子码流,2-码流 3,3-码流 4,以此类推
  39.                 struPlayInfo.dwLinkMode = 0; //0- TCP 方式,1- UDP 方式,2- 多播方式,3- RTP 方式,4-RTP/RTSP,5-RSTP/HTTP
  40.                 struPlayInfo.bBlocked = 1; //0- 非阻塞取流,1- 阻塞取流
  41.                 lRealPlayHandle = NET_DVR_RealPlay_V40(lUserID, &struPlayInfo, nullptr, nullptr);
  42.  
  43.                 if(lRealPlayHandle < 0) {
  44.                     qDebug() << "预览失败: " << NET_DVR_GetLastError();
  45.                     loger("  ....图像预览失败,错误代码:" + QString::number(NET_DVR_GetLastError()));
  46.                     NET_DVR_Logout(lUserID);
  47.                     NET_DVR_Cleanup();
  48.                     return;
  49.                 }
  50.                 ui->btn_dvr_connect->setText("关闭摄像头");
  51.                 dvr_connected = true;
  52.             }
  53.         }
  54.         else {
  55.             qDebug() << "SDK初始化失败: " << NET_DVR_GetLastError();
  56.             loger(">海康SDK初始化失败,错误代码:" + QString::number(NET_DVR_GetLastError()));
  57.         }
  58.     }
  59.     else {
  60.         //关闭预览
  61.         NET_DVR_StopRealPlay(lRealPlayHandle);
  62.         //注销用户
  63.         NET_DVR_Logout(lUserID);
  64.         NET_DVR_Cleanup();
  65.         loger(">断开与摄像头连接。");
  66.         ui->btn_dvr_connect->setText("连接摄像头");
  67.         dvr_connected = false;
  68.     }
  69. }
回复