首页 > 其他分享 >初学小结使用Onvif协议进行PTZ控制

初学小结使用Onvif协议进行PTZ控制

时间:2023-09-15 11:06:38浏览次数:39  
标签:__ continuousMove struct int tt PTZ 小结 soap Onvif

近期由于项目原因接触到了Onvif协议,使用Onvif协议进行PTZ控制。

具体的Onvif协议是什么,PTZ是什么我就不介绍了,主要实现功能的步骤简单的介绍下(主要介绍ContinuousMove功能):

1、通过设备服务地址(形如http://xx/onvif/device_service),调用GetCapabilities函数接口,获取到Media的URL;

2、通过Media的URL,调用GetProfiles函数接口,获取到ProfileToken;

3、对_tptz__ContinuousMove结构体进行填充,具体填充内容在以下代码中可见;

4、调用soap_call___tptz__ContinuousMove函数接口实现摄像头转动功能;


由于涉及到公司的通信协议,我所给的代码是测试版的,数值是定的,不过功能可以实现(有不足之处希望各位可以指出,一起学习一起进步):


int main(int argc, char** argv)
{
    struct soap soap;
	soap_init(&soap);
    char * ip;
	int retval = 0; 
	int result;
	char Mediaddr[256]="";
	char profile[256]="";
	int speed_x=100;
	int speed_y=0;
	int speed_z=0;
	struct _tds__GetCapabilities            	req;
    struct _tds__GetCapabilitiesResponse    	rep;
	struct _trt__GetProfiles 			getProfiles;
	struct _trt__GetProfilesResponse		response;
	struct _tptz__ContinuousMove 	 		continuousMove;
	struct _tptz__ContinuousMoveResponse 		continuousMoveresponse;
	struct _tptz__Stop 				stop;
	struct _tptz__StopResponse 			stopresponse;
	req.Category = (enum tt__CapabilityCategory *)soap_malloc(&soap, sizeof(int));
	req.__sizeCategory = 1;
	*(req.Category) = (enum tt__CapabilityCategory)0;
    
    char endpoint[255];
	memset(endpoint, '\0', 255);
   	if (argc > 1)
    {
    	ip = argv[1];
    }
    else
    {
    	ip = "10.27.13.6:80"; 
    }
    sprintf(endpoint, "http://%s/onvif/device_service", ip);
	soap_call___tds__GetCapabilities(&soap, endpoint, NULL, &req, &rep);
	if (soap.error)  
    {  
        printf("[%s][%d]--->>> soap error: %d, %s, %s\n", __func__, __LINE__, soap.error, *soap_faultcode(&soap), *soap_faultstring(&soap));  
        retval = soap.error;  	 
    } 
	else
	{
		printf("XAddr====%s\n",rep.Capabilities->Device->XAddr);
		printf("XAddr====%s\n",rep.Capabilities->Media->XAddr);
		strcpy(Mediaddr,rep.Capabilities->Media->XAddr);
		printf("\n");
	}	
	result = soap_call___trt__GetProfiles(&soap, Mediaddr, NULL, &getProfiles, &response);
	if(result == SOAP_OK)
	{
		strcpy(profile,response.Profiles[0].token);
		printf("profile====%s\n",profile);
	}
		
	continuousMove.ProfileToken =profile;
	struct tt__PTZSpeed* velocity = soap_new_tt__PTZSpeed(&soap, -1);
	continuousMove.Velocity = velocity;
	struct tt__Vector2D* panTilt = soap_new_tt__Vector2D(&soap, -1);
	continuousMove.Velocity->PanTilt = panTilt;
	continuousMove.Velocity->PanTilt->space = "http://www.onvif.org/ver10/tptz/PanTiltSpaces/VelocityGenericSpace";
	struct tt__Vector1D* zoom = soap_new_tt__Vector1D(&soap, -1);
	continuousMove.Velocity->Zoom = zoom;
	continuousMove.Velocity->PanTilt->x = (float)speed_x/ 100;
	continuousMove.Velocity->PanTilt->y = (float) speed_y/ 100;
	continuousMove.Velocity->Zoom->x = (float)speed_z / 100;
	if(soap_call___tptz__ContinuousMove(&soap,endpoint,NULL,&continuousMove,&continuousMoveresponse) == SOAP_OK)
	{
		printf("======SetPTZcontinuous_move is success!!!=======\n");
	}

    soap_destroy(&soap); // clean up class instances
    soap_end(&soap); // clean up everything and close socket, // userid and passwd were deallocated
    soap_done(&soap); // close master socket and detach context

    return 0;
}

初学小结使用Onvif协议进行PTZ控制_通信协议

标签:__,continuousMove,struct,int,tt,PTZ,小结,soap,Onvif
From: https://blog.51cto.com/u_16264248/7479168

相关文章

  • RTSP/Onvif视频服务器EasyNVR视频监控管理平台HLS流播放中断的原因及其解决办法
    EasyNVR是TSINGSEE青犀视频基于RTSP/Onvif协议推出的视频能力平台,既有硬件设备,又有软件平台,是比较灵活的一项流媒体产品。它可实现设备接入、实时直播、录像、检索与回放、存储、视频分发等视频能力服务,可覆盖全终端平台(pc、手机、平板等终端),在智慧工厂、智慧工地、智慧社区、智慧......
  • 浅析RTSP/Onvif视频服务器EasyNVR视频融合平台的方案实现及其应用场景
    EasyNVR是基于RTSP/Onvif协议接入的视频平台,具备视频直播监控、录像、检索与回看、存储、国标级联等视频能力,可支持将接入的视频流进行全平台、全终端的分发,包括RTSP、RTMP、HTTP-FLV、WS-FLV、HLS、WebRTC等。视频融合平台是一种综合性的软硬件解决方案,旨在集成和管理多源视频......
  • Android基础入门教程——8.1.1 Android中的13种Drawable小结 Part 1
    本节引言:从本节开始我们来学习Android中绘图与动画中的一些基础知识,为我们进阶部分的自定义 打下基础!而第一节我们来扣下Android中的Drawable!Android中给我们提供了多达13种的 Drawable,本节我们就来一个个撸一遍!Drawable资源使用注意事项Drawable分为两种: 一种是我们普通的图片......
  • VC++ 知识小结(续)
    1)当文档被修改时,如何在标题上加上标志'*'?重载CDocument类的虚函数virtualSetModifiedFlag:voidCTest2Doc::SetModifiedFlag(BOOLbModified){CStringstrTitle=GetTitle();CStringstrDirtyFlag="*";//notespacebeforethe'*'......
  • RTSP/Onvif安防视频云平台EasyNVR视频监控汇聚平台显示视频流却无法播放,是什么原因?
    EasyNVR是基于RTSP/Onvif协议的视频平台,拥有视频监控直播、录像、云存储、检索与回看、国标级联等视频能力,可支持将接入的视频流进行全平台、全终端的分发,分发的视频流包括RTSP、RTMP、HTTP-FLV、WS-FLV、HLS、WebRTC等格式。 有用户反馈,在EasyNVR平台播放时,有视频流但却一直......
  • RTSP流媒体服务器EasyNVR安防视频云服务平台如何手动配置Onvif探测功能?
    安防监控系统EasyNVR视频云存储平台可实现设备接入、实时直播、录像、检索与回放、视频云存储、视频分发等视频能力服务,可覆盖全终端平台(pc、手机、平板等终端),在智慧工厂、智慧工地、智慧社区、智慧校园等场景中有大量落地应用。 有用户反馈遇到EasyNVR平台探测不到Onvif设备......
  • 视频监控平台EasyCVR通过Onvif无法探测对应设备如何处理
    从研发初期开始,EasyCVR安防协议视频综合管理系统就被设计为一个“全能型”平台,支持各种私有协议接入,并且还提供了onvif探测功能。使用Onvif协议的优势在于,终端用户和集成商可以使用不同制造商的技术和解决方案。该协议的支持大大拓展了EasyCVR的适用范围,使其更具广泛性。在局域网内......
  • ps aux 命令使用小结
    psaux命令是一个常用的Linux/Unix系统命令,它用于查看正在运行的进程信息。下面是该命令使用的参数介绍、命令响应结果参数介绍以及一些使用实例的总结:命令使用参数介绍:a:显示所有用户的进程,包括其他用户的进程。u:以用户为基础显示详细信息,包括用户名、进程ID、CPU利用率、内存......
  • linux tcpdump 使用小结(二)
    转载请注明出处:TCPDump是一个功能强大的网络抓包工具,它能够在命令行界面捕获、分析和解析网络数据包。下面是TCPDump命令的使用总结,包括使用语法、常用参数说明等:使用语法:tcpdump[options][expression]参数说明:-i<interface>:指定要监听的网络接口。-n:禁用主机名解析,只......
  • 数论中一个有趣的小结论
    对于任意奇质数\(p\),对于任意整数\(k<p-1\),有$p|\sum_{i=1}{p-1}ik$证明:取\(p\)的原根\(g\),由简化剩余系的性质知:在\(\modp\)意义下,有\[\{g,2g,\cdots,(p-1)g\}=\{1,2,\cdots,p-1\}\]于是\[\sum_{i=1}^{p-1}i^k\equiv\sum_{i=1}^{p-1}(gi)^k\equiv......