ubuntu16.04下运行海康威视网络摄像头sdk consoleDemo(坑)

常见的海康威视sdk开发blog以windows居多,在Clion的ubuntu下感觉丧失了组织,更惨的是Clion也不熟悉。新手入门,一边采坑一边写踩坑爬坑过程,如果弃坑了就说明我没爬出来。

环境:ubuntu16.04+CLion+海康威视设备网络SDK_V5.3.5.2(for Linux64)

一、查看sdk包

ubuntu16.04下运行海康威视网络摄像头sdk consoleDemo(坑)_第1张图片

主要关注consoleDemo(C++Demo文件夹),lib(库文件),打开开发文档看看原装写了点什么,有一个.chm文件,想要打开的话可以考虑安装一个KchmViewer。安装命令:sudo apt-get install kchmviewer。据说装上之后可能会出乱码之类的,但是开这个SDK使用手册我截至目前并没遇到什么问题(不是立flag啊please),这个文件的内容还是值得安装一个viewer的。

二、查看consoleDemo

当然先看readme。大致意思是需要吧sdk里的lib(就是上面截图里的)复制到/consoleDemo/Linux64/lib,然后在/consoleDemo/Linux64/proj里打开terminal输入make。

复制完之后打开proj,发现makefile都写好了,按照指点make一下,发现lib里面多了个bin文件,如图:

ubuntu16.04下运行海康威视网络摄像头sdk consoleDemo(坑)_第2张图片

终端输入./sdkTest,运行一下。果然跑不通。

ubuntu16.04下运行海康威视网络摄像头sdk consoleDemo(坑)_第3张图片

 

(这个第三行login dev后面的ip地址肯定跟贴这张图不一样因为我改过了cpp文件,不过单纯这样跑不通,反正以后都得改的我就不改回原来的再截图了,示意一下)

跑不通的原因有两个:一是没改ip地址,二是没改登录信息。

首先把网络摄像头的网线接进机箱......

改ip地址的意思是,如果摄像头信息使用网线接入PC机,要在PC上调用摄像头的话,需要将摄像头的ip地址进行修改,ubuntu下修改摄像头ip地址blog可见于:https://mp.csdn.net/postedit/82498744

改登录信息是,点开/consoleDemo/src,先打开consolemain.cpp,main函数中有登录信息,在:

LONG lUserID = NET_DVR_Login_V30("", 8000, "admin", "12345", &struDeviceInfo);这一行里,需要将ip地址改为摄像头的ip地址,用户名和密码改为自己的用户名和密码。

ip:在windows系统内打开海康威视官网https://www1.hikvision.com/cn/index.html(因为客户端没有linux版本所以..),服务支持-下载-工具软件-网络视频监控iVMS-4200,下载安装登录再点点(写起来好麻烦不写了)就能看见摄像头ip地址。

用户名密码:网上消息说海康威视有默认的用户名和密码,admin,12345,我不知道是不是这样因为我用的用户名和密码是别人告诉的so如果需要的话可以试一下或者查查资料。

把src文件夹中需要提供登录信息的地方把原来的登录信息全部修改,同时完成PC机ip地址修改之后再运行sdkTest,至少能登录成功了,见下图。

ubuntu16.04下运行海康威视网络摄像头sdk consoleDemo(坑)_第4张图片

但是这时候除了选4能截个图以外别的都用不了。

三、CLion修改demo

因为我用不到所有的demo,主要是getstream这个功能,所以只把这一部分导入Clion了,顺带删了main函数里多余的部分。导入完了目录是这样。

ubuntu16.04下运行海康威视网络摄像头sdk consoleDemo(坑)_第5张图片

main函数(consolemain.cpp):

#ifndef __APPLE__


#include 
#include 
#include "GetStream.h"
#include "public.h"

using namespace std;

int main()
{
    NET_DVR_Init();
    Demo_SDK_Version();
    NET_DVR_SetLogToFile(3,("./sdkLog"));
    char cUserChoose = 'r';
    
    //Login device
    NET_DVR_DEVICEINFO_V30 struDeviceInfo = {0};
    //LONG lUserID = NET_DVR_Login_V30("192.168.1.7", 8000, "admin", "12345", &struDeviceInfo);
	LONG lUserID = NET_DVR_Login_V30("192.168.1.7", 8000, "admin", "12345", &struDeviceInfo);
    if (lUserID < 0)
    {
        printf("pyd---Login error, %d\n", NET_DVR_GetLastError());
        printf("Press any key to quit...\n");
        cin>>cUserChoose;

        NET_DVR_Cleanup();
        return HPR_ERROR;
    }

    Demo_GetStream_V30(lUserID);
    NET_DVR_Logout_V30(lUserID);
    NET_DVR_Cleanup();
    return 0;
}

#endif

这里可能要提醒不是UTF-8编码,reload成GBK就行。

完成这一步直接run会有两类报错,一类是*char什么的,另一类是undefined reference to

如果有第一类是因为这个代码比较古老PC上的g++版本比较高,对g++降级就可以了。我是从5.4降到了4.9,参见bloghttps://blog.csdn.net/shuifu1988/article/details/76096108

第二个问题是Clion添加第三方库文件的问题,需要修改cmakelists.txt,我选了(因为只会)一种愚蠢的修改方法:

cmake_minimum_required(VERSION 3.12)
project(hik)

set(CMAKE_CXX_STANDARD 14)


link_directories(“Desktop/hik/lib”)
link_libraries(AudioRender)
link_libraries(HCCore)
link_libraries(hcnetsdk)
link_libraries(hpr)
link_libraries(PlayCtrl)
link_libraries(SuperRender)
link_libraries(analyzedata)
link_libraries(HCAlarm)
link_libraries(HCCoreDevCfg)
link_libraries(HCDisplay)
link_libraries(HCGeneralCfgMgr)
link_libraries(HCIndustry)
link_libraries(HCPlayBack)
link_libraries(HCPreview)
link_libraries(HCVoiceTalk)
link_libraries(iconv2)
link_libraries(StreamTransClient)
link_libraries(SystemTransform)
link_libraries(iconv2)

add_executable(hik
        consoleMain.cpp
        GetStream.cpp
        GetStream.h
        HCNetSDK.h
        public.h)

All what i did is添加了一堆link_libraties(括号里是上面截图的lib里所有的so文件,即海康威视给的lib里的所有文件,去掉开头的三个字母lib得到的文件名)。修改cmakelists真的有坑,教程可以参考https://blog.csdn.net/u012654882/article/details/80209805

TO BE CONTINUE

你可能感兴趣的:(ubuntu16.04下运行海康威视网络摄像头sdk consoleDemo(坑))