初墨墨 2023-07-07 15:13 采纳率: 11.1%
浏览 75
已结题

qt中的onvif协议的服务端

目前在做onvif协议的相关项目,形成了一个源码,但是发现并没有可见光与红外的Token的区分方法。抱拳!

img

这是存在的cpp文件以及头文件 详细的源码可私信我,jiu吧!

查看网上的方法大多都是onvif协议的客户端,但是目前我在做的是与onvif Deceive Tool 连接的服务端,希望有能带带,抱拳!

  • 写回答

2条回答 默认 最新

  • Bert_2022 2023-07-07 17:57
    关注

    在Qt中编写ONVIF协议的服务端可以使用第三方库,例如gSOAP或QtSoap。这些库提供了用于处理SOAP消息和实现ONVIF协议的功能。

    以下是一个简单的示例,演示了如何使用gSOAP库在Qt中实现ONVIF协议的服务端:

    首先,确保你已经将gSOAP库集成到Qt项目中。你可以从gSOAP官方网站(https://www.genivia.com/)下载最新版本的库。

    创建一个新的Qt控制台应用程序项目。

    在项目的.pro文件中添加gSOAP库的包含路径和链接库:

    
    ```c++
    
    INCLUDEPATH += /path/to/gsoap/include
    LIBS += -L/path/to/gsoap/lib -lgsoap
    
    
    
    在项目中创建一个新的类,作为ONVIF服务端的实现。例如,可以创建一个名为"ONVIFServer"的类。
    
    在ONVIFServer类的头文件中添加必要的头文件,包括gSOAP库的头文件和一些标准头文件:
    #include "soapH.h"
    #include "soapStub.h"
    #include <QDebug>
    
    在ONVIFServer类中定义处理ONVIF协议请求的回调函数。这些函数将由gSOAP库在收到请求时自动调用
    
    int ONVIFServer::getUserList(struct soap* soap, _trt__GetUserList* trt__GetUserList, _trt__GetUserListResponse* trt__GetUserListResponse)
    {
        // 在这里实现处理GetUserList请求的逻辑
        // 可以访问输入参数trt__GetUserList,并根据需要填充trt__GetUserListResponse
    
        // 示例:打印请求信息
        qDebug() << "Received GetUserList request";
    
        // 示例:返回一个空的User列表
        trt__GetUserListResponse->__sizeUser = 0;
        trt__GetUserListResponse->User = nullptr;
    
        // 返回SOAP_OK表示成功处理请求
        return SOAP_OK;
    }
    
    
    
    
    在ONVIFServer类中添加一个启动服务的函数。该函数将创建一个gSOAP的soap对象,并为每个ONVIF协议的请求注册回调函数。
    
    ```c++
    void ONVIFServer::start()
    {
        struct soap soap;
        soap_init(&soap);
    
        // 注册回调函数
        soap_register_trt__GetUserList(&soap, getUserList);
    
        // 设置监听端口和地址
        const char* endpoint = "http://localhost:8080";
        if (soap_bind(&soap, nullptr, 8080, 100) == SOAP_OK)
        {
            qDebug() << "ONVIF Server started on" << endpoint;
    
            // 处理请求
            while (true)
            {
                soap_accept(&soap);
                soap_serve(&soap);
                soap_end(&soap);
            }
        }
        else
        {
            qDebug() << "Failed to start ONVIF Server";
        }
    
        soap_done(&soap);
        soap_free(&soap);
    }
    
    
    

    在主函数中创建ONVIFServer对象并调用start函数启动服务。

    int main(int argc, char* argv[])
    {
        QCoreApplication a(argc, argv);
    
        ONVIFServer server;
        server.start();
    
        return a.exec();
    }
    
    
    

    这只是一个简单的示例,演示了如何使用gSOAP库在Qt中实现ONVIF协议的服务端。你可以根据实际需求进一步扩展和实现其他ONVIF的请求和功能。

    请注意,ONVIF协议是一种复杂的网络协议,涉及到很多不同的功能和消息。因此,在实际项目中,你可能需要仔细研究ONVIF协议的规范,并根据需要实现更多的回调函数和处理逻辑。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月14日
  • 创建了问题 7月7日

悬赏问题

  • ¥25 LT码在高斯信道下的误码率仿真
  • ¥45 渲染完成之后将物体的材质贴图改变,自动化进行这个操作
  • ¥15 yolov5目标检测并显示目标出现的时间或视频帧
  • ¥15 电视版的优酷可以设置电影连续播放吗?
  • ¥50 复现论文;matlab代码编写
  • ¥30 echarts 3d地图怎么实现一进来页面散点数据和卡片一起轮播
  • ¥15 数字图像的降噪滤波增强
  • ¥15 心碎了,为啥我的神经网络训练的时候第二个批次反向传播会报错呀,第一个批次都没有问题
  • ¥15 MSR2680-XS路由器频繁卡顿问题
  • ¥15 VB6可以成功读取的文件,用C#读不了