1、获取url、ptz或imaging的一般流程

《1》、注意

  GetCapabilities是向下兼容的接口只能获取到设备支持的最基本功能。GetServices接口能获取到设备支持的所有功能,H265格式的RTSP地址的获取必须通过该接口获得。
原文:

《2》、onvif test工具的对比


2、获取profiles

  以获取H265的为例,需要onvif开发框架支持265,该环境搭建看参考6.1

void GetProfileUsedMedia2()
{char media_addr2[] = "http://172.16.41.64/onvif/Media2"; //GetServices得到的地址struct SOAP_ENV__Header header;  struct soap* soap = ONVIF_Initsoap(&header, NULL, NULL, 5);struct _tr2__GetProfiles tr2__GetProfiles;struct _tr2__GetProfilesResponse tr2__GetProfilesResponse;tr2__GetProfiles.__sizeType = 1;tr2__GetProfiles.Token = NULL;char* type[1] = {"VideoEncoder"};tr2__GetProfiles.Type = type;ONVIF_SetAuthInfo(soap,user_name,passwd);  //鉴权soap_call___tr2__GetProfiles(soap, media_addr2, NULL, &tr2__GetProfiles, &tr2__GetProfilesResponse); if(soap->error){cout << "soap_call___tr2__GetProfiles main soap error:"<< soap->error << *soap_faultcode(soap) <<*soap_faultstring(soap) << endl;}else{if(tr2__GetProfilesResponse.Profiles == NULL){ret = -2;}else{//循环输出文件信息for(int i = 0;i < tr2__GetProfilesResponse.__sizeProfiles;i++,tr2__GetProfilesResponse.Profiles++){if(strstr(tr2__GetProfilesResponse.Profiles->Name,"test"))continue;string video_type =  tr2__GetProfilesResponse.Profiles->Configurations->VideoEncoder->Encoding;transform(video_type.begin(), video_type.end(), video_type.begin(), ::tolower);cout << "===== 265 profile name " << tr2__GetProfilesResponse.Profiles->Name << " token " << tr2__GetProfilesResponse.Profiles->token <<  " video type " << video_type << endl;}}}ONVIF_soap_delete(soap);
}

3、获取rtsp地址

  以获取H265的为例,需要onvif开发框架支持265,该环境搭建看参考6.1, 同时也需要对应的IPC设备支持H265获取RTSP,大概是2018年年底之后的IPC固件才支持,如果IPC不支持是获取不到media2的

   char media_addr2[] = "http://172.16.41.64/onvif/Media2"; //GetServices得到的地址char taken[] = "Profile_1";   //get_profiles获取struct SOAP_ENV__Header header;struct soap* soap = ONVIF_Initsoap(&header, NULL, NULL, 5);struct _tr2__GetStreamUri tr2__GetStreamUri;struct _tr2__GetStreamUriResponse tr2__GetStreamUriResponse;tr2__GetStreamUri.Protocol = (char *)soap_malloc(soap, 128*sizeof(char));if (NULL == tr2__GetStreamUri.Protocol){printf("soap_malloc is error\n");ret = -1;}tr2__GetStreamUri.ProfileToken = (char *)soap_malloc(soap, 128*sizeof(char ));if (NULL == tr2__GetStreamUri.ProfileToken){printf("soap_malloc is error\n");ret = -1;}strcpy(tr2__GetStreamUri.Protocol, "tcp");strcpy(tr2__GetStreamUri.ProfileToken, taken);ONVIF_SetAuthInfo(soap,user_name,passwd);  //鉴权soap_call___tr2__GetStreamUri(soap, media_addr2, NULL, &tr2__GetStreamUri, &tr2__GetStreamUriResponse);if(soap->error){cout << "soap_call___tr2__GetStreamUri main soap error:"<< soap->error << *soap_faultcode(soap) <<*soap_faultstring(soap) << endl;}else{cout << "media2 MediaUri->Uri=" <<  tr2__GetStreamUriResponse.Uri << endl;}ONVIF_soap_delete(soap);

4、PTZ持续移动

void ptzContinueMove(int cmd , int speed)
{if(ptzurl.empty()){printf("ptzContinueMove ptzurl is empty \n");return;}struct SOAP_ENV__Header header;struct soap* soap = ONVIF_Initsoap(&header, NULL, NULL, 5);const int RECV_MAX_TIME = 2;soap->recv_timeout = RECV_MAX_TIME;soap->send_timeout = RECV_MAX_TIME;soap->connect_timeout = RECV_MAX_TIME;int speed_x=0;int speed_y=0;int speed_z=0;struct _tptz__ContinuousMove                continuousMove;struct _tptz__ContinuousMoveResponse        continuousMoveresponse;LONG64 timeout = 2;continuousMove.Timeout = &timeout;char ProfileToken[32] = {0};strncpy(ProfileToken, "MainProfileToken", sizeof(ProfileToken));continuousMove.ProfileToken = ProfileToken;struct tt__PTZSpeed* velocity = (struct tt__PTZSpeed*)soap_malloc(soap, sizeof(struct tt__PTZSpeed));continuousMove.Velocity = velocity;struct tt__Vector2D* panTilt = (struct tt__Vector2D*)soap_malloc(soap, sizeof(struct tt__Vector2D));continuousMove.Velocity->PanTilt = panTilt;continuousMove.Velocity->PanTilt->space = NULL;if(cmd >= PTZ_CMD_ZOOM_NEAR){struct tt__Vector1D* zoom = (struct tt__Vector1D*)soap_malloc(soap, sizeof(struct tt__Vector1D));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;continuousMove.Velocity->Zoom->space = NULL;}switch (cmd){case PTZ_CMD_LEFT:continuousMove.Velocity->PanTilt->x = -((float)speed / 100);break;case PTZ_CMD_RIGHT:continuousMove.Velocity->PanTilt->x = (float)speed / 100;//continuousMove.Velocity->PanTilt->y = 0;break;case PTZ_CMD_UP://continuousMove.Velocity->PanTilt->x = 0;continuousMove.Velocity->PanTilt->y = (float)speed / 100;break;case PTZ_CMD_DOWN://continuousMove.Velocity->PanTilt->x = 0;continuousMove.Velocity->PanTilt->y = -((float)speed / 100);break;// 缩小case PTZ_CMD_ZOOM_NEAR:continuousMove.Velocity->Zoom->x = -((float)speed / 100);break;// 放大case PTZ_CMD_ZOOM_FAR:continuousMove.Velocity->Zoom->x = (float)speed / 100;break;default:break;}char soap_endpoint[64] = {0};sprintf(soap_endpoint, "%s", ptzurl.c_str());printf("ptz_url: %s \n", soap_endpoint);ONVIF_SetAuthInfo(soap, user_name, passwd);  //鉴权if(soap_call___tptz__ContinuousMove(soap, soap_endpoint, NULL, &continuousMove, &continuousMoveresponse) == SOAP_OK){printf("======SetPTZcontinuous_move is success!!!=======\n");}else{printf("======SetPTZcontinuous_move is faile!!!=======\n");printf("soap_call___tptz__ContinuousMove soap error: %d, %s, %s\n", soap->error, *soap_faultcode(soap), *soap_faultstring(soap));}ONVIF_soap_delete(soap);}

5、完整demo

6、参考

《1》、Linux下onvi支持h264、h265环境的的搭建:gsoap的安装及生产.c .h文件
《2》、Linux下onvif客户端获取h265 IPC摄像头的RTSP地址
《3》、ONVIF Core Specification

ONVIF获取265的rtsp地址,ptz控制记录相关推荐

  1. onvif获取摄像头的流媒体地址完整流程

    linux设备上的Onvif 实现6:获取摄像头的流媒体地址完整流程 整体流程: Probe: 发现网络摄像头,获取webserver地址 http://192.168.15.240/onvif/de ...

  2. 常见网络摄像机的端口及RTSP地址

    之前用opencv抓视频流搞了很久,终于找到一篇比较靠谱的文章.亲测雄迈ip摄像头有效. 海康威视 默认IP地址:192.168.1.64/DHCP 用户名admin 密码自己设 端口:"H ...

  3. 常见网络摄像机(摄像头)的端口及RTSP地址

    海康威视 默认IP地址:192.168.1.64/DHCP 用户名admin 密码自己设 端口:"HTTP 端口"(默认为 80)."RTSP 端口"(默认为 ...

  4. 国内网络摄像机的端口及RTSP地址

    海康威视 默认IP地址:192.168.1.64/DHCP 用户名admin 密码自己设 端口:"HTTP 端口"(默认为 80)."RTSP 端口"(默认为 ...

  5. rstp 小米网络摄像头_常见网络摄像机的端口及RTSP地址

    海康威视 默认IP地址:192.168.1.64/DHCP 用户名admin 密码自己设 端口:"HTTP 端口"(默认为 80)."RTSP 端口"(默认为 ...

  6. rtsp端口号_常见网络摄像机(摄像头)的端口及RTSP地址

    海康威视 默认IP地址:192.168.1.64/DHCP 用户名admin 密码自己设 端口:"HTTP 端口"(默认为 80)."RTSP 端口"(默认为 ...

  7. 公共rtsp_常见品牌网络摄像机的端口及RTSP地址

    海康威视 默认IP地址:192.168.1.64/DHCP 用户名admin 密码自己设 端口:"HTTP 端口"(默认为 80)."RTSP 端口"(默认为 ...

  8. 海康、大华等IpCamera RTSP地址和格式

    实时流 海康 rtsp://[username]:[password]@[ip]:[port]/[codec]/[channel]/[subtype]/av_stream 说明: username: ...

  9. rtsp端口号_常见网络摄像机的端口及RTSP地址

    常见网络摄像机的端口及RTSP地址 海康威视 默认IP地址:192.168.1.64/DHCP 用户名admin 密码自己设 端口:"HTTP 端口"(默认为 80)." ...

最新文章

  1. Java编程笔试时输入问题:如何输入固定长度、不定长度的一维数组?如何输入固定长度、不定长度的二维数组?
  2. S8会成为三星移动的转折点吗?
  3. 第十九章 19 利用私有继承来实现代码重用
  4. centos7 mysql读写监控_Centos7 Zabbix监控mysql
  5. Dubbo的Provider配置
  6. ABPZero系列教程之拼多多卖家工具
  7. webServices 应该支持Get和Post调用,在web.config应该增加以下代码
  8. Java笔记-spring-rabbitmq中使用@RabbitListener消费(手动确认,获header数据)
  9. 从崩溃的选课系统,论为什么更安全的 HTTPS 协议没有被全面采用
  10. .xls和.xlsx 有什么区别?
  11. 分享几个java小程序代码
  12. 免费的WordPress Video Player插件
  13. 本科生怎样发表自己的论文
  14. android页面布局计算机,Android Studio制作简单计算器App
  15. 定积分的基本性质5 区间可加性
  16. 接口调用正常却返回404
  17. 各种OOM代码样例及解决方法
  18. mysql numeric
  19. tp5.1 db助手与db::name混合使用数据库操作失效
  20. 赞,全网开发者都在学的26个课程!

热门文章

  1. Learning Adobe Animate CC: Animation 学习Adobe Animate CC:动画 Lynda课程中文字幕
  2. Sensor sc2235 Porting
  3. 第五批可信区块链评测出炉 腾讯云、百度、蚂蚁集团等21家通过
  4. Good artists copy, great artists steal——Picasso
  5. 中鸣教育计算机二级,中鸣机器人教育套装使用指南2012.11.02.pdf
  6. 国内蓝牙芯片行业风险分析
  7. 显示器花屏故障分析与排除
  8. 《腾讯政务协同平台安全白皮书》发布,助力“智慧政务”夯实安全底座
  9. 将整型数据存入字符型数据
  10. PCB电路板从设计到生产的检测方法有哪些?