QT Quick QML 添加海康威视SDK云台控制模块
文章目录
- 1. 配置
- 海康威视 SDK 下载
- SDK文件移植
- 工程文件添加
- 2. 函数调用
- 流程
- 接口
- 参考代码
- 3. 代码
- 后端核心代码
- 前端核心代码
GitHub 源码: QmlLearningPro ,选择子工程 HkwsDemo.pro (暂未上传)
QML 其它文章请点击这里: QT QUICK QML 学习笔记
● 运行效果:
有延时是因为未对视频进行处理
1. 配置
海康威视 SDK 下载
https://www.hikvision.com/cn/support/Downloads/
SDK文件移植
将 SDK 中的所有库文件(.lib、.dll)与头文件(*.h)复制当前工程目录下,形式不限。
工程文件添加
在 HkwsDemo.pro 工程文件中分别加入以下部分
#添加所有lib静态库
LIBS += $$PWD/lib/*.lib
#添加所有头文件
INCLUDEPATH+=$$PWD/include
#生成的二进制文件生成到bin目录与.dll 文件放一起,
#可执行文件(.exe)先查找所在的目录的 .dll 文件
DESTDIR = $$PWD/bin
注意 MSVC 用的也是32 位的,可以添加
ANDROID_EXTRA_LIBS += xxxxxx
2. 函数调用
流程
接口
参考代码
…
3. 代码
后端核心代码
与参考代码类似,按照上述程序流程图来即可:
登录:
bool QObjectQml::initSDK()
{
bool isok = NET_DVR_Init();
if(isok == false)
{
qDebug()<< "NET_DVR_Init error;error number is " <<NET_DVR_GetLastError();
return isok;
}
//设置连接时间与重连时间
NET_DVR_SetConnectTime(2000, 1);
NET_DVR_SetReconnect(10000, true);
return isok;
}
void QObjectQml::OnClickedLogin()
{
initSDK();
NET_DVR_DEVICEINFO_V30 DeviceInfoTmp;
QString AddressID="192.168.xxx.xx";
QString NameID="admin";
QString passwordID="xxxxxx";//"hk123456";
userID=NET_DVR_Login_V30(AddressID.toUtf8().data(),8000,NameID.toUtf8().data(),passwordID.toUtf8().data(),&DeviceInfoTmp);
if(userID<0)
{
qDebug() << "NET_DVR_Login_V30 error;" << "error number is " << NET_DVR_GetLastError();
return;
}else{
qDebug()<<"Login Success,userID:" ;
}
qDebug()<<"Login Success,userID:" << userID<<endl;
}
注销:
void QObjectQml::OnClickedLogout()
{
if(userID!=-1)
{
if(NET_DVR_Logout(userID)==false)
{
qDebug() << "NET_DVR_Logout error;" << "error number is " << NET_DVR_GetLastError();
return;
}
userID=-1;
qDebug() <<"Logout Success!"<<endl;
}
}
方向控制:
//上:按下
void QObjectQml::on_btn_u_pressed()
{
qDebug()<<"on_btn_u_pressed";
int camCh=1;
int camSpeed=3;
NET_DVR_PTZControlWithSpeed_Other(userID,(LONG)camCh,TILT_UP,0,camSpeed);
}
//上:松手
void QObjectQml::on_btn_u_released()
{
qDebug()<<"on_btn_u_released";
int camCh=1;
int camSpeed=3;
NET_DVR_PTZControlWithSpeed_Other(userID,(LONG)camCh,TILT_UP,1,camSpeed);
}
...
大小控制:
//下:按下
void QObjectQml::on_btn_min_pressed()
{
int camCh=1;
int camSpeed=3;
NET_DVR_PTZControlWithSpeed_Other(userID,(LONG)camCh,ZOOM_OUT,0,camSpeed);
}
//下:松手
void QObjectQml::on_btn_min_released()
{
int camCh=1;
int camSpeed=3;
NET_DVR_PTZControlWithSpeed_Other(userID,(LONG)camCh,ZOOM_IN,ZOOM_OUT,camSpeed);
}
...
前端核心代码
视频播放:
简易的视频播放代码,还是需要另外调用SDK,或者使用FFmpeg等方案
QObjectQml {
id: myObject
deviceId: "12345"
Component.onCompleted: console.log(deviceId)
}
MediaPlayer {
id: player
autoPlay: true
source: "rtsp://admin:123456789@192.168.85.60:8554" // "rtsp://admin:njzh123456789@192.168.144.64:554/h264/ch1/main/av_stream"
}
登录:
Button{
x:600
y:10
width: 80
height: 30
text: qsTr("登录")
onPressed: myObject.OnClickedLogin()
}
控制:
Button{
x:10
y:10
width: 80
height: 30
text: qsTr("上")
onPressed: myObject.on_btn_u_pressed()
onReleased: myObject.on_btn_u_released()
}
具体细节看代码
GitHub 源码: QmlLearningPro ,选择子工程 HkwsDemo.pro
QML 其它文章请点击这里: QT QUICK QML 学习笔记