初墨墨 2023-08-07 18:20 采纳率: 11.1%
浏览 12
已结题

关于Onvif协议的相关问题

目前在做Onvif协议的相关项目,做的是服务器端,与odt可以连接的一个中间插件。
现在基本框架已经实现,可以接收到odt发送的数据,目前的问题是:
我需要对这些数据进行处理,然后通过tcp通讯发送给伺服板,但是其中要区分出可见光与红外的token,已知是在MediaServiceExt中的GetProfile函数中获取token,但是现在我这个获取到的token值无法发送给其他源文件,因此无法解析,抱拳各位大lao相jiu

int MediaServiceExt::GetProfile(_mediaws__GetProfile *mediaws__GetProfile, _mediaws__GetProfileResponse &mediaws__GetProfileResponse) {
{
    qDebug() << "Media Service GetProfile in NVT\n";

    if(mediaws__GetProfile->ProfileToken.compare("profile1") == 0){
                tt__Profile * ttProfile = new tt__Profile();
                ttProfile->fixed = 0;
                ttProfile->token = "vis";
                ttProfile->Name = "Profile1";
                //VideoSource
                ttProfile->VideoSourceConfiguration = new tt__VideoSourceConfiguration();
                ttProfile->VideoSourceConfiguration->token = "video_source_config";
                ttProfile->VideoSourceConfiguration->Name = "video_source_config";
                ttProfile->VideoSourceConfiguration->UseCount = 1;
                //ttProfile->VideoSourceConfiguration->SourceToken = "video_source";
                ttProfile->VideoSourceConfiguration->Bounds = new tt__IntRectangle();
                ttProfile->VideoSourceConfiguration->Bounds->height = 720;
                ttProfile->VideoSourceConfiguration->Bounds->width =1280;
                ttProfile->VideoSourceConfiguration->Bounds->y =1;
                ttProfile->VideoSourceConfiguration->Bounds->x =1;
                //VideoEncoder
                ttProfile->VideoEncoderConfiguration = new tt__VideoEncoderConfiguration();
                ttProfile->VideoEncoderConfiguration->token = "video_encoder_config";
                ttProfile->VideoEncoderConfiguration->Name = "video_encoder_config";
                ttProfile->VideoEncoderConfiguration->UseCount = 1;
                ttProfile->VideoEncoderConfiguration->Encoding = tt__VideoEncoding__H264;
                ttProfile->VideoEncoderConfiguration->Resolution = new tt__VideoResolution;
                ttProfile->VideoEncoderConfiguration->Resolution->Width = 1280;
                ttProfile->VideoEncoderConfiguration->Resolution->Height = 720;
                ttProfile->VideoEncoderConfiguration->Quality = 7;
                ttProfile->VideoEncoderConfiguration->RateControl = new tt__VideoRateControl;
                ttProfile->VideoEncoderConfiguration->RateControl->FrameRateLimit = 30;
                ttProfile->VideoEncoderConfiguration->RateControl->EncodingInterval = 0;
                ttProfile->VideoEncoderConfiguration->RateControl->BitrateLimit = 2048;
                ttProfile->VideoEncoderConfiguration->H264 = new tt__H264Configuration;
                ttProfile->VideoEncoderConfiguration->H264->GovLength = 30;
                ttProfile->VideoEncoderConfiguration->H264->H264Profile = tt__H264Profile__Baseline;
                ttProfile->VideoEncoderConfiguration->Multicast = new tt__MulticastConfiguration;
                ttProfile->VideoEncoderConfiguration->Multicast->Address = new tt__IPAddress;
                ttProfile->VideoEncoderConfiguration->Multicast->Address->Type = tt__IPType__IPv4;
                ttProfile->VideoEncoderConfiguration->Multicast->Address->IPv4Address = new std::string;
                ttProfile->VideoEncoderConfiguration->Multicast->Address->IPv4Address->assign("0.0.0.0");
                ttProfile->VideoEncoderConfiguration->Multicast->Port = 0;
                ttProfile->VideoEncoderConfiguration->Multicast->TTL = 3;
                ttProfile->VideoEncoderConfiguration->Multicast->AutoStart = false;
                ttProfile->VideoEncoderConfiguration->SessionTimeout = 1000;
                //PTZ
                ttProfile->PTZConfiguration = new tt__PTZConfiguration;
                ttProfile->PTZConfiguration->Name = "PTZConfig_Channel1";
                ttProfile->PTZConfiguration->UseCount = 2;
                //ttProfile->PTZConfiguration->NodeToken = "000";
                ttProfile->PTZConfiguration->DefaultAbsolutePantTiltPositionSpace = new std::string;
                ttProfile->PTZConfiguration->DefaultAbsolutePantTiltPositionSpace->assign("http://www.onvif.org/ver10/tptz/PanTiltSpaces/PositionGenericSpace");
                ttProfile->PTZConfiguration->DefaultAbsoluteZoomPositionSpace = new std::string;
                ttProfile->PTZConfiguration->DefaultAbsoluteZoomPositionSpace->assign("http://www.onvif.org/ver10/tptz/ZoomSpaces/PositionGenericSpace");
                ttProfile->PTZConfiguration->DefaultRelativePanTiltTranslationSpace = new std::string;
                ttProfile->PTZConfiguration->DefaultRelativePanTiltTranslationSpace->assign("http://www.onvif.org/ver10/tptz/PanTiltSpaces/TranslationGenericSpace");
                ttProfile->PTZConfiguration->DefaultRelativeZoomTranslationSpace = new std::string;
                ttProfile->PTZConfiguration->DefaultRelativeZoomTranslationSpace->assign("http://www.onvif.org/ver10/tptz/ZoomSpaces/TranslationGenericSpace");
                ttProfile->PTZConfiguration->DefaultContinuousPanTiltVelocitySpace = new std::string;
                ttProfile->PTZConfiguration->DefaultContinuousPanTiltVelocitySpace->assign("http://www.onvif.org/ver10/tptz/PanTiltSpaces/VelocityGenericSpace");
                ttProfile->PTZConfiguration->DefaultContinuousZoomVelocitySpace = new std::string;
                ttProfile->PTZConfiguration->DefaultContinuousZoomVelocitySpace->assign("http://www.onvif.org/ver10/tptz/ZoomSpaces/VelocityGenericSpace");
                ttProfile->PTZConfiguration->DefaultPTZSpeed = new tt__PTZSpeed;
                ttProfile->PTZConfiguration->DefaultPTZSpeed->PanTilt = new tt__Vector2D;
                ttProfile->PTZConfiguration->DefaultPTZSpeed->PanTilt->space = new std::string;
                ttProfile->PTZConfiguration->DefaultPTZSpeed->PanTilt->space->assign("http://www.onvif.org/ver10/tptz/PanTiltSpaces/GenericSpeedSpace");
                ttProfile->PTZConfiguration->DefaultPTZSpeed->PanTilt->x = 0.8;
                ttProfile->PTZConfiguration->DefaultPTZSpeed->PanTilt->y = 0.8;
                ttProfile->PTZConfiguration->DefaultPTZSpeed->Zoom = new tt__Vector1D;
                ttProfile->PTZConfiguration->DefaultPTZSpeed->Zoom->space = new std::string;
                ttProfile->PTZConfiguration->DefaultPTZSpeed->Zoom->space->assign("http://www.onvif.org/ver10/tptz/ZoomSpaces/ZoomGenericSpeedSpace");
             //   LONG64 tout = 1000;
             //   ttProfile->PTZConfiguration->DefaultPTZTimeout = &tout;
                ttProfile->PTZConfiguration->PanTiltLimits = new tt__PanTiltLimits;
                ttProfile->PTZConfiguration->PanTiltLimits->Range = new tt__Space2DDescription;
                ttProfile->PTZConfiguration->PanTiltLimits->Range->URI = "http://www.onvif.org/ver10/tptz/PanTiltSpaces/PositionGenericSpace";
                ttProfile->PTZConfiguration->PanTiltLimits->Range->XRange = new tt__FloatRange;
                ttProfile->PTZConfiguration->PanTiltLimits->Range->XRange->Min = -1.000000;
                ttProfile->PTZConfiguration->PanTiltLimits->Range->XRange->Max = 1.000000;
                ttProfile->PTZConfiguration->PanTiltLimits->Range->YRange = new tt__FloatRange;
                ttProfile->PTZConfiguration->PanTiltLimits->Range->YRange->Min = -1.000000;
                ttProfile->PTZConfiguration->PanTiltLimits->Range->YRange->Max = 1.000000;
                ttProfile->PTZConfiguration->ZoomLimits = new tt__ZoomLimits;
                ttProfile->PTZConfiguration->ZoomLimits->Range = new tt__Space1DDescription;
                ttProfile->PTZConfiguration->ZoomLimits->Range->URI = "http://www.onvif.org/ver10/tptz/ZoomSpaces/PositionGenericSpace";
                ttProfile->PTZConfiguration->ZoomLimits->Range->XRange = new tt__FloatRange;
                ttProfile->PTZConfiguration->ZoomLimits->Range->XRange->Min = 0.000000;
                ttProfile->PTZConfiguration->ZoomLimits->Range->XRange->Max = 1.000000;
                mediaws__GetProfileResponse.Profile = ttProfile;
                onvif1->processProfile(ttProfile->token);
    }else if(mediaws__GetProfile->ProfileToken.compare("profile2") == 0){
        tt__Profile * ttProfile2 = new tt__Profile();
        ttProfile2->fixed = 0;
        ttProfile2->token = "inf";
        ttProfile2->Name = "Profile2";
        //Video source conf
        ttProfile2->VideoSourceConfiguration = new tt__VideoSourceConfiguration();
        ttProfile2->VideoSourceConfiguration->token = "video_source_config2";
        ttProfile2->VideoSourceConfiguration->Name = "video_source_config2";
        ttProfile2->VideoSourceConfiguration->UseCount = 1;
        //ttProfile2->VideoSourceConfiguration->SourceToken = "video_source2";
        ttProfile2->VideoSourceConfiguration->Bounds = new tt__IntRectangle();
        ttProfile2->VideoSourceConfiguration->Bounds->height = 720;
        ttProfile2->VideoSourceConfiguration->Bounds->width =1280;
        ttProfile2->VideoSourceConfiguration->Bounds->y =1;
        ttProfile2->VideoSourceConfiguration->Bounds->x =1;
        //Video encoder conf
        ttProfile2->VideoEncoderConfiguration = new tt__VideoEncoderConfiguration();
        ttProfile2->VideoEncoderConfiguration->token = "video_encoder_config2";
        ttProfile2->VideoEncoderConfiguration->Name = "video_encoder_config2";
        ttProfile2->VideoEncoderConfiguration->UseCount = 1;
        ttProfile2->VideoEncoderConfiguration->Encoding = tt__VideoEncoding__H264;
        ttProfile2->VideoEncoderConfiguration->Resolution = new tt__VideoResolution;
        ttProfile2->VideoEncoderConfiguration->Resolution->Width = 1280;
        ttProfile2->VideoEncoderConfiguration->Resolution->Height = 720;
        ttProfile2->VideoEncoderConfiguration->Quality = 7;
        ttProfile2->VideoEncoderConfiguration->RateControl = new tt__VideoRateControl;
        ttProfile2->VideoEncoderConfiguration->RateControl->FrameRateLimit = 30;
        ttProfile2->VideoEncoderConfiguration->RateControl->EncodingInterval = 0;
        ttProfile2->VideoEncoderConfiguration->RateControl->BitrateLimit = 2048;
        ttProfile2->VideoEncoderConfiguration->H264 = new tt__H264Configuration;
        ttProfile2->VideoEncoderConfiguration->H264->GovLength = 30;
        ttProfile2->VideoEncoderConfiguration->H264->H264Profile = tt__H264Profile__Baseline;
        ttProfile2->VideoEncoderConfiguration->Multicast = new tt__MulticastConfiguration;
        ttProfile2->VideoEncoderConfiguration->Multicast->Address = new tt__IPAddress;
        ttProfile2->VideoEncoderConfiguration->Multicast->Address->Type = tt__IPType__IPv4;
        ttProfile2->VideoEncoderConfiguration->Multicast->Address->IPv4Address = new std::string;
        ttProfile2->VideoEncoderConfiguration->Multicast->Address->IPv4Address->assign("0.0.0.0");
        ttProfile2->VideoEncoderConfiguration->Multicast->Port = 0;
        ttProfile2->VideoEncoderConfiguration->Multicast->TTL = 3;
        ttProfile2->VideoEncoderConfiguration->Multicast->AutoStart = false;
        ttProfile2->VideoEncoderConfiguration->SessionTimeout = 1000;
        //PTZ
        ttProfile2->PTZConfiguration = new tt__PTZConfiguration;
        ttProfile2->PTZConfiguration->Name = "PTZConfig_Channel1";
        ttProfile2->PTZConfiguration->UseCount = 2;
        //ttProfile->PTZConfiguration->NodeToken = "000";
        ttProfile2->PTZConfiguration->DefaultAbsolutePantTiltPositionSpace = new std::string;
        ttProfile2->PTZConfiguration->DefaultAbsolutePantTiltPositionSpace->assign("http://www.onvif.org/ver10/tptz/PanTiltSpaces/PositionGenericSpace");
        ttProfile2->PTZConfiguration->DefaultAbsoluteZoomPositionSpace = new std::string;
        ttProfile2->PTZConfiguration->DefaultAbsoluteZoomPositionSpace->assign("http://www.onvif.org/ver10/tptz/ZoomSpaces/PositionGenericSpace");
        ttProfile2->PTZConfiguration->DefaultRelativePanTiltTranslationSpace = new std::string;
        ttProfile2->PTZConfiguration->DefaultRelativePanTiltTranslationSpace->assign("http://www.onvif.org/ver10/tptz/PanTiltSpaces/TranslationGenericSpace");
        ttProfile2->PTZConfiguration->DefaultRelativeZoomTranslationSpace = new std::string;
        ttProfile2->PTZConfiguration->DefaultRelativeZoomTranslationSpace->assign("http://www.onvif.org/ver10/tptz/ZoomSpaces/TranslationGenericSpace");
        ttProfile2->PTZConfiguration->DefaultContinuousPanTiltVelocitySpace = new std::string;
        ttProfile2->PTZConfiguration->DefaultContinuousPanTiltVelocitySpace->assign("http://www.onvif.org/ver10/tptz/PanTiltSpaces/VelocityGenericSpace");
        ttProfile2->PTZConfiguration->DefaultContinuousZoomVelocitySpace = new std::string;
        ttProfile2->PTZConfiguration->DefaultContinuousZoomVelocitySpace->assign("http://www.onvif.org/ver10/tptz/ZoomSpaces/VelocityGenericSpace");
        ttProfile2->PTZConfiguration->DefaultPTZSpeed = new tt__PTZSpeed;
        ttProfile2->PTZConfiguration->DefaultPTZSpeed->PanTilt = new tt__Vector2D;
        ttProfile2->PTZConfiguration->DefaultPTZSpeed->PanTilt->space = new std::string;
        ttProfile2->PTZConfiguration->DefaultPTZSpeed->PanTilt->space->assign("http://www.onvif.org/ver10/tptz/PanTiltSpaces/GenericSpeedSpace");
        ttProfile2->PTZConfiguration->DefaultPTZSpeed->PanTilt->x = 0.8;
        ttProfile2->PTZConfiguration->DefaultPTZSpeed->PanTilt->y = 0.8;
        ttProfile2->PTZConfiguration->DefaultPTZSpeed->Zoom = new tt__Vector1D;
        ttProfile2->PTZConfiguration->DefaultPTZSpeed->Zoom->space = new std::string;
        ttProfile2->PTZConfiguration->DefaultPTZSpeed->Zoom->space->assign("http://www.onvif.org/ver10/tptz/ZoomSpaces/ZoomGenericSpeedSpace");
     //   LONG64 tout = 1000;
     //   ttProfile2->PTZConfiguration->DefaultPTZTimeout = &tout;
        ttProfile2->PTZConfiguration->PanTiltLimits = new tt__PanTiltLimits;
        ttProfile2->PTZConfiguration->PanTiltLimits->Range = new tt__Space2DDescription;
        ttProfile2->PTZConfiguration->PanTiltLimits->Range->URI = "http://www.onvif.org/ver10/tptz/PanTiltSpaces/PositionGenericSpace";
        ttProfile2->PTZConfiguration->PanTiltLimits->Range->XRange = new tt__FloatRange;
        ttProfile2->PTZConfiguration->PanTiltLimits->Range->XRange->Min = -1.000000;
        ttProfile2->PTZConfiguration->PanTiltLimits->Range->XRange->Max = 1.000000;
        ttProfile2->PTZConfiguration->PanTiltLimits->Range->YRange = new tt__FloatRange;
        ttProfile2->PTZConfiguration->PanTiltLimits->Range->YRange->Min = -1.000000;
        ttProfile2->PTZConfiguration->PanTiltLimits->Range->YRange->Max = 1.000000;
        ttProfile2->PTZConfiguration->ZoomLimits = new tt__ZoomLimits;
        ttProfile2->PTZConfiguration->ZoomLimits->Range = new tt__Space1DDescription;
        ttProfile2->PTZConfiguration->ZoomLimits->Range->URI = "http://www.onvif.org/ver10/tptz/ZoomSpaces/PositionGenericSpace";
        ttProfile2->PTZConfiguration->ZoomLimits->Range->XRange = new tt__FloatRange;
        ttProfile2->PTZConfiguration->ZoomLimits->Range->XRange->Min = 0.000000;
        ttProfile2->PTZConfiguration->ZoomLimits->Range->XRange->Max = 1.000000;
        mediaws__GetProfileResponse.Profile = ttProfile2;
        onvif1->processProfile(ttProfile2->token);
    }
    return SOAP_OK;
}

其中onvif1->processProfile(ttProfile->token);是传递给其他源文件进行解析使用的token值,但是在测试中debug是发不出的,求赐教

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-08-07 20:12
    关注

    【以下回答由 GPT 生成】

    这个问题主要是关于如何在Onvif协议中获取可见光与红外的token值,并将该值发送给其他源文件进行解析的问题。

    首先,根据提供的代码,token值是在GetProfile函数中获取的。你可以通过修改GetProfile函数的参数,将token值作为返回值返回给其他源文件。

    下面是修改后的代码示例:

    QString MediaServiceExt::GetProfile(_mediaws__GetProfile *mediaws__GetProfile, _mediaws__GetProfileResponse &mediaws__GetProfileResponse) {
        qDebug() << "Media Service GetProfile in NVT\n";
    
        QString tokenValue;
    
        if (mediaws__GetProfile->ProfileToken.compare("profile1") == 0) {
            tt__Profile *ttProfile = new tt__Profile();
            ttProfile->fixed = 0;
            ttProfile->token = "vis";
            ttProfile->Name = "Profile1";
            // VideoSource
            ttProfile->VideoSourceConfiguration = new tt__VideoSourceConfiguration();
            ttProfile->VideoSourceConfiguration->token = "video_source_config";
            ttProfile->VideoSourceConfiguration->Name = "video_source_config";
            ttProfile->VideoSourceConfiguration->UseCount = 1;
            //ttProfile->VideoSourceConfiguration->SourceToken = "video_source";
            ttProfile->VideoSourceConfiguration->Bounds = new tt__IntRectangle();
            ttProfile->VideoSourceConfiguration->Bounds->height = 720;
            ttProfile->VideoSourceConfiguration->Bounds->width = 1280;
            ttProfile->VideoSourceConfiguration->Bounds->y = 1;
            ttProfile->VideoSourceConfiguration->Bounds->x = 1;
            // VideoEncoder
            ttProfile->VideoEncoderConfiguration = new tt__VideoEncoderConfiguration();
            ttProfile->VideoEncoderConfiguration->token = "video_encoder_config";
            ttProfile->VideoEncoderConfiguration->Name = "video_encoder_config";
            ttProfile->VideoEncoderConfiguration->UseCount = 1;
            ttProfile->VideoEncoderConfiguration->Encoding = tt__VideoEncoding__H264;
            ttProfile->VideoEncoderConfiguration->Resolution = new tt__VideoResolution();
            ttProfile->VideoEncoderConfiguration->Resolution->Width = 1280;
            ttProfile->VideoEncoderConfiguration->Resolution->Height = 720;
            ttProfile->VideoEncoderConfiguration->Quality = 7;
            ttProfile->VideoEncoderConfiguration->RateControl = new tt__VideoRateControl();
            ttProfile->VideoEncoderConfiguration->RateControl->FrameRateLimit = 30;
            ttProfile->VideoEncoderConfiguration->RateControl->EncodingInterval = 0;
            ttProfile->VideoEncoderConfiguration->RateControl->Bit
    
            tokenValue = ttProfile->token;
        }
    
        return tokenValue;
    }
    

    修改后的代码将tokenValue作为函数的返回值返回给其他源文件。

    相关源文件可以通过调用GetProfile函数获取token值并进行处理,如:

    QString token = mediaServiceExtObj->GetProfile(mediaws__GetProfile, mediaws__GetProfileResponse);
    
    // 使用token值进行处理或发送给其他源文件
    

    请注意,相关源文件中需要包含MediaServiceExt的头文件,并且需要实例化MediaServiceExt对象进行调用。

    希望这些信息可以帮助你解决问题。如果还有其他问题,请随时提问。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

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

悬赏问题

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