Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 4 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
qt-onvif-client
===============
forked from jimxl/qt-onvif-client
=================================

qt实现的onvif的客户端
Qt/ONVIF Client compatible with Qt5

## 使用

具体的使用可以先参考 test里面的测试用例,详细的文档有待将来的补充.
Full support ONVIF specification v2

32 changes: 20 additions & 12 deletions lib/client.cpp
Original file line number Diff line number Diff line change
@@ -1,31 +1,39 @@
#include "client.h"
#include <QHttp>
#include <QEventLoop>
#include <QUrl>
#include <QDebug>
#include <QMessageBox>

using namespace ONVIF;

Client::Client(const QString &url) {
mUrl = url;
//reply->ignoreSslErrors();
}

QString Client::sendData(const QString &data) {
// qDebug() << "send to url => " << mUrl << " | data => " << data;
QHttp http;
http.ignoreSslErrors();
// qDebug() << "send to url => " << mUrl << " | data => " << data;

QUrl url(mUrl);
http.setHost(url.host());
http.post(url.path(), data.toUtf8());
waitForFinish(http);
if(http.error() != QHttp::NoError) {
QNetworkRequest requete(url);
requete.setHeader( QNetworkRequest::ContentTypeHeader, QVariant( QString("text/xml;charset=utf-8")));
requete.setHeader(QNetworkRequest::ContentLengthHeader, QVariant( qulonglong(data.size()) ));
requete.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QVariant( int(QNetworkRequest::AlwaysNetwork) ));
//requete.setHeader(QNetworkRequest::ContentTypeHeader,QVariant("application/x-www-form-urlencoded"));
QNetworkAccessManager *manager = new QNetworkAccessManager;
reply = manager->post(requete, data.toUtf8());
reply->ignoreSslErrors();
waitForFinished(reply);
if(reply->error() != QNetworkReply::NoError) {
qDebug() << reply->error();
return "";
}
return QString(http.readAll());
return QString(reply->readAll());
}

void Client::waitForFinish(const QHttp &http) {
void Client::waitForFinished(const QNetworkReply* reply) {
QEventLoop loop;
connect(&http, SIGNAL(done(bool)), &loop, SLOT(quit()));
loop.exec();
connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
loop.exec();
}

7 changes: 5 additions & 2 deletions lib/client.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,21 @@
#define ONVIF_CLIENT_H

#include <QObject>
#include <QHttp>
#include <QtNetwork>

namespace ONVIF {
class Client : public QObject {
Q_OBJECT
public:
explicit Client(const QString &url);
QNetworkReply *reply;
QString sendData(const QString &data);

private:
void waitForFinish(const QHttp &http);
void waitForFinished(const QNetworkReply* reply);
QString mUrl;
};
}

#endif // ONVIF_CLIENT_H

2 changes: 1 addition & 1 deletion lib/device_management/networkinterfaces.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#include "networkinterfaces.h"
#include "lib/message.h"
#include "libONVIF/message.h"

using namespace ONVIF;

Expand Down
2 changes: 1 addition & 1 deletion lib/device_management/systemdateandtime.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#include "systemdateandtime.h"
#include "lib/message.h"
#include "libONVIF/message.h"
using namespace ONVIF;

SystemDateAndTime::SystemDateAndTime(QObject *parent) : QObject(parent) {
Expand Down
1 change: 1 addition & 0 deletions lib/device_management/systemdateandtime.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
#define ONVIF_SYSTEMDATEANDTIME_H

#include <QDateTime>
#include <QObject>
#include <QDomElement>
namespace ONVIF {
class SystemDateAndTime : public QObject {
Expand Down
2 changes: 1 addition & 1 deletion lib/device_management/systemfactorydefault.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#include "systemfactorydefault.h"
#include "lib/message.h"
#include "libONVIF/message.h"
using namespace ONVIF;

SystemFactoryDefault::SystemFactoryDefault(QObject *parent) : QObject(parent) {
Expand Down
2 changes: 1 addition & 1 deletion lib/device_management/systemreboot.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#include "systemreboot.h"
#include "lib/message.h"
#include "libONVIF/message.h"
using namespace ONVIF;

SystemReboot::SystemReboot(QObject *parent) : QObject(parent) {
Expand Down
42 changes: 23 additions & 19 deletions lib/devicemanagement.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,35 +20,35 @@ QHash<QString, QString> DeviceManagement::namespaces(const QString &key) {
names.insert("xenc", "http://www.w3.org/2001/04/xmlenc#");
names.insert("ds", "http://www.w3.org/2000/09/xmldsig#");
names.insert("wsse", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd");
names.insert("wsa5", "http://www.w3.org/2005/08/addressing");
names.insert("xmime", "http://tempuri.org/xmime.xsd");
names.insert("xop", "http://www.w3.org/2004/08/xop/include");
names.insert("wsbf2", "http://docs.oasis-open.org/wsrf/bf-2");
names.insert("wsa", "http://schemas.xmlsoap.org/ws/2004/08/addressing");
names.insert("wsa5", "http://www.w3.org/2005/08/addressing");
names.insert("tt", "http://www.onvif.org/ver10/schema");
names.insert("wsbf", "http://docs.oasis-open.org/wsrf/bf-2");
names.insert("wstop", "http://docs.oasis-open.org/wsn/t-1");
names.insert("d", "http://schemas.xmlsoap.org/ws/2005/04/discovery");
names.insert("wsr", "http://docs.oasis-open.org/wsrf/r-2");
names.insert("wsr2", "http://docs.oasis-open.org/wsrf/r-2");
names.insert("daae", "http://www.onvif.org/ver20/analytics/wsdl/AnalyticsEngineBinding");
names.insert("dare", "http://www.onvif.org/ver20/analytics/wsdl/RuleEngineBinding");
names.insert("tan", "http://www.onvif.org/ver20/analytics/wsdl");
names.insert("decpp", "http://www.onvif.org/ver10/events/wsdl/CreatePullPointBinding");
names.insert("dee", "http://www.onvif.org/ver10/events/wsdl/EventBinding");
names.insert("denc", "http://www.onvif.org/ver10/events/wsdl/NotificationConsumerBinding");
names.insert("denf", "http://www.onvif.org/ver10/events/wsdl/NotificationProducerBinding");
names.insert("depp", "http://www.onvif.org/ver10/events/wsdl/PullPointBinding");
names.insert("depps", "http://www.onvif.org/ver10/events/wsdl/PullPointSubscriptionBinding");
names.insert("tev", "http://www.onvif.org/ver10/events/wsdl");
names.insert("depsm", "http://www.onvif.org/ver10/events/wsdl/PausableSubscriptionManagerBinding");
names.insert("wsnt", "http://docs.oasis-open.org/wsn/b-2");
names.insert("desm", "http://www.onvif.org/ver10/events/wsdl/SubscriptionManagerBinding");
names.insert("dndl", "http://www.onvif.org/ver10/network/wsdl/DiscoveryLookupBinding");
names.insert("dnrd", "http://www.onvif.org/ver10/network/wsdl/RemoteDiscoveryBinding");
names.insert("d", "http://schemas.xmlsoap.org/ws/2005/04/discovery");
names.insert("dn", "http://www.onvif.org/ver10/network/wsdl");
names.insert("tad", "http://www.onvif.org/ver10/analyticsdevice/wsdl");
names.insert("tanae", "http://www.onvif.org/ver20/analytics/wsdl/AnalyticsEngineBinding");
names.insert("tanre", "http://www.onvif.org/ver20/analytics/wsdl/RuleEngineBinding");
names.insert("tan", "http://www.onvif.org/ver20/analytics/wsdl");
names.insert("tae", "http://www.onvif.org/ver10/actionengine/wsdl");
names.insert("tds", "http://www.onvif.org/ver10/device/wsdl");
names.insert("tetcp", "http://www.onvif.org/ver10/events/wsdl/CreatePullPointBinding");
names.insert("tete", "http://www.onvif.org/ver10/events/wsdl/EventBinding");
names.insert("tetnc", "http://www.onvif.org/ver10/events/wsdl/NotificationConsumerBinding");
names.insert("tetnp", "http://www.onvif.org/ver10/events/wsdl/NotificationProducerBinding");
names.insert("tetpp", "http://www.onvif.org/ver10/events/wsdl/PullPointBinding");
names.insert("tetpps", "http://www.onvif.org/ver10/events/wsdl/PullPointSubscriptionBinding");
names.insert("tev", "http://www.onvif.org/ver10/events/wsdl");
names.insert("tetps", "http://www.onvif.org/ver10/events/wsdl/PausableSubscriptionManagerBinding");
names.insert("wsnt", "http://docs.oasis-open.org/wsn/b-2");
names.insert("tetsm", "http://www.onvif.org/ver10/events/wsdl/SubscriptionManagerBinding");
names.insert("timg", "http://www.onvif.org/ver20/imaging/wsdl");
names.insert("timg10", "http://www.onvif.org/ver10/imaging/wsdl");
names.insert("tls", "http://www.onvif.org/ver10/display/wsdl");
names.insert("tmd", "http://www.onvif.org/ver10/deviceIO/wsdl");
names.insert("tptz", "http://www.onvif.org/ver20/ptz/wsdl");
Expand All @@ -57,9 +57,13 @@ QHash<QString, QString> DeviceManagement::namespaces(const QString &key) {
names.insert("trt", "http://www.onvif.org/ver10/media/wsdl");
names.insert("trv", "http://www.onvif.org/ver10/receiver/wsdl");
names.insert("tse", "http://www.onvif.org/ver10/search/wsdl");
names.insert("tns1", "http://www.onvif.org/ver10/schema");
names.insert("tns1", "http://www.onvif.org/ver10/topics");
names.insert("tnsn", "http://www.eventextension.com/2011/event/topics");
names.insert("tnsavg", "http://www.avigilon.com/onvif/ver10/topics");
names.insert("ter", "http://www.onvif.org/ver10/error" );
names.insert("xmime5", "http://www.w3.org/2005/05/xmlmime");
names.insert("hikwsd", "http://www.onvifext.com/onvif/ext/ver10/wsdl");
names.insert("hikxsd", "http://www.onvifext.com/onvif/ext/ver10/schema");

return names;
}
Expand Down
6 changes: 3 additions & 3 deletions lib/devicesearcher.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -75,8 +75,8 @@ void DeviceSearcher::readPendingDatagrams() {
namespaces.insert("dnrd", "http://www.onvif.org/ver10/network/wsdl/RemoteDiscoveryBinding");
namespaces.insert("dn", "http://www.onvif.org/ver10/network/wsdl");
namespaces.insert("tad", "http://www.onvif.org/ver10/analyticsdevice/wsdl");
namespaces.insert("tanae", "http://www.onvif.org/ver20/analytics/wsdl/AnalyticsEngineBinding");
namespaces.insert("tanre", "http://www.onvif.org/ver20/analytics/wsdl/RuleEngineBinding");
namespaces.insert("tanae", "http://www.onvif.org/ver10/analytics/wsdl/AnalyticsEngineBinding");
namespaces.insert("tanre", "http://www.onvif.org/ver10/analytics/wsdl/RuleEngineBinding");
namespaces.insert("tan", "http://www.onvif.org/ver20/analytics/wsdl");
namespaces.insert("tds", "http://www.onvif.org/ver10/device/wsdl");
namespaces.insert("tetcp", "http://www.onvif.org/ver10/events/wsdl/CreatePullPointBinding");
Expand All @@ -90,7 +90,7 @@ void DeviceSearcher::readPendingDatagrams() {
namespaces.insert("wsnt", "http://docs.oasis-open.org/wsn/b-2");
namespaces.insert("tetsm", "http://www.onvif.org/ver10/events/wsdl/SubscriptionManagerBinding");
namespaces.insert("timg", "http://www.onvif.org/ver20/imaging/wsdl");
namespaces.insert("timg10", "http://www.onvif.org/ver10/imaging/wsdl");
namespaces.insert("timg10", "http://www.onvif.org/ver20/imaging/wsdl");
namespaces.insert("tls", "http://www.onvif.org/ver10/display/wsdl");
namespaces.insert("tmd", "http://www.onvif.org/ver10/deviceIO/wsdl");
namespaces.insert("tptz", "http://www.onvif.org/ver20/ptz/wsdl");
Expand Down
67 changes: 67 additions & 0 deletions lib/media_management/videoencoderconfiguration.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
#include "videoencoderconfiguration.h"
#include "libONVIF/message.h"
#include <QDebug>

using namespace ONVIF;

Expand All @@ -11,3 +13,68 @@ VideoEncoderConfiguration::~VideoEncoderConfiguration()
{

}

QDomElement VideoEncoderConfiguration::toxml()
{
QDomElement SetVideoEncoderConfiguration = newElement("trt:SetVideoEncoderConfiguration");
QDomElement Configuration = newElement("trt:Configuration");
Configuration.setAttribute("token", this->token());
QDomElement Name = newElement("tt:Name", this->name());
// QDomElement UseCount = newElement("tt:UseCount", QString:: number(this->useCount()));
// QDomElement Encoding = newElement("tt:Encoding", this->encoding());
QDomElement Resolution = newElement("tt:Resolution");
QDomElement Width = newElement("tt:Width", QString:: number(this->width()));
QDomElement Height = newElement("tt:Height", QString:: number(this->height()));
// QDomElement Quality = newElement("tt:Quality", QString:: number(this->quality()));
// QDomElement RateControl = newElement("tt:RateControl");
// QDomElement FrameRateLimit = newElement("tt:FrameRateLimit", QString:: number(this->frameRateLimit()));
// QDomElement EncodingInterval = newElement("tt:EncodingInterval", QString:: number(this->encodingInterval()));
// QDomElement BitrateLimit = newElement("tt:BitrateLimit", QString:: number(this->bitrateLimit()));
//QDomElement H264 = newElement("tt:H264");
//QDomElement GovLength = newElement("tt:GovLength", QString:: number(this->govLength()));
//QDomElement H264Profile = newElement("tt:H264Profile", this->h264Profile());
// QDomElement Multicast = newElement("tt:Multicast");
// QDomElement Address = newElement("tt:Address");
// QDomElement Type = newElement("tt:Type", this->type());
// QDomElement IPv4Address = newElement("tt:IPv4Address", this->ipv4Address());
// QDomElement IPv6Address = newElement("tt:IPv6Address", this->ipv6Address());
// QDomElement Port = newElement("tt:Port", QString:: number(this->port()));
// QDomElement TTL = newElement("tt:TTL", QString:: number(this->ttl()));
// QDomElement AutoStart = newElement("tt:AutoStart", QString:: number(this->autoStart()));
// QDomElement SessionTimeout = newElement("tt:SessionTimeout", this->sessionTimeout());
// QDomElement ForcePersistence = newElement("trt:ForcePersistence ", "true");

SetVideoEncoderConfiguration.appendChild(Configuration);

Configuration.appendChild(Name);
// Configuration.appendChild(UseCount);
// Configuration.appendChild(Encoding);
Configuration.appendChild(Resolution);
Resolution.appendChild(Width);
Resolution.appendChild(Height);

// Configuration.appendChild(Quality);
// Configuration.appendChild(RateControl);
// RateControl.appendChild(FrameRateLimit);
// RateControl.appendChild(EncodingInterval);
// RateControl.appendChild(BitrateLimit);

//Configuration.appendChild(H264);
//H264.appendChild(GovLength);
//H264.appendChild(H264Profile);

// Configuration.appendChild(Multicast);
// Multicast.appendChild(Address);
// Address.appendChild(Type);
// Address.appendChild(IPv4Address);
// Address.appendChild(IPv6Address);

// Multicast.appendChild(Port);
// Multicast.appendChild(TTL);
// Multicast.appendChild(AutoStart);

// Configuration.appendChild(SessionTimeout);
// SetVideoEncoderConfiguration.appendChild(ForcePersistence);

return SetVideoEncoderConfiguration;
}
8 changes: 8 additions & 0 deletions lib/media_management/videoencoderconfiguration.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#ifndef VIDEOENCODERCONFIGURATION_H
#define VIDEOENCODERCONFIGURATION_H
#include <QObject>
#include <QDomElement>

namespace ONVIF {
class VideoEncoderConfiguration : public QObject
Expand Down Expand Up @@ -28,6 +29,7 @@ namespace ONVIF {
public:
explicit VideoEncoderConfiguration(QObject *parent = NULL);
virtual ~VideoEncoderConfiguration();
QDomElement toxml();

QString token() const
{
Expand Down Expand Up @@ -220,6 +222,11 @@ namespace ONVIF {
m_sessionTimeout = arg;
}

void setResult(bool arg)
{
m_result = arg;
}

private:
QString m_token;
QString m_name;
Expand All @@ -239,6 +246,7 @@ namespace ONVIF {
int m_port;
int m_ttl;
bool m_autoStart;
bool m_result;
QString m_sessionTimeout;
};
}
Expand Down
Loading