ONVIF获取265的rtsp地址,ptz控制记录
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控制记录相关推荐
- onvif获取摄像头的流媒体地址完整流程
linux设备上的Onvif 实现6:获取摄像头的流媒体地址完整流程 整体流程: Probe: 发现网络摄像头,获取webserver地址 http://192.168.15.240/onvif/de ...
- 常见网络摄像机的端口及RTSP地址
之前用opencv抓视频流搞了很久,终于找到一篇比较靠谱的文章.亲测雄迈ip摄像头有效. 海康威视 默认IP地址:192.168.1.64/DHCP 用户名admin 密码自己设 端口:"H ...
- 常见网络摄像机(摄像头)的端口及RTSP地址
海康威视 默认IP地址:192.168.1.64/DHCP 用户名admin 密码自己设 端口:"HTTP 端口"(默认为 80)."RTSP 端口"(默认为 ...
- 国内网络摄像机的端口及RTSP地址
海康威视 默认IP地址:192.168.1.64/DHCP 用户名admin 密码自己设 端口:"HTTP 端口"(默认为 80)."RTSP 端口"(默认为 ...
- rstp 小米网络摄像头_常见网络摄像机的端口及RTSP地址
海康威视 默认IP地址:192.168.1.64/DHCP 用户名admin 密码自己设 端口:"HTTP 端口"(默认为 80)."RTSP 端口"(默认为 ...
- rtsp端口号_常见网络摄像机(摄像头)的端口及RTSP地址
海康威视 默认IP地址:192.168.1.64/DHCP 用户名admin 密码自己设 端口:"HTTP 端口"(默认为 80)."RTSP 端口"(默认为 ...
- 公共rtsp_常见品牌网络摄像机的端口及RTSP地址
海康威视 默认IP地址:192.168.1.64/DHCP 用户名admin 密码自己设 端口:"HTTP 端口"(默认为 80)."RTSP 端口"(默认为 ...
- 海康、大华等IpCamera RTSP地址和格式
实时流 海康 rtsp://[username]:[password]@[ip]:[port]/[codec]/[channel]/[subtype]/av_stream 说明: username: ...
- rtsp端口号_常见网络摄像机的端口及RTSP地址
常见网络摄像机的端口及RTSP地址 海康威视 默认IP地址:192.168.1.64/DHCP 用户名admin 密码自己设 端口:"HTTP 端口"(默认为 80)." ...
最新文章
- Java编程笔试时输入问题:如何输入固定长度、不定长度的一维数组?如何输入固定长度、不定长度的二维数组?
- S8会成为三星移动的转折点吗?
- 第十九章 19 利用私有继承来实现代码重用
- centos7 mysql读写监控_Centos7 Zabbix监控mysql
- Dubbo的Provider配置
- ABPZero系列教程之拼多多卖家工具
- webServices 应该支持Get和Post调用,在web.config应该增加以下代码
- Java笔记-spring-rabbitmq中使用@RabbitListener消费(手动确认,获header数据)
- 从崩溃的选课系统,论为什么更安全的 HTTPS 协议没有被全面采用
- .xls和.xlsx 有什么区别?
- 分享几个java小程序代码
- 免费的WordPress Video Player插件
- 本科生怎样发表自己的论文
- android页面布局计算机,Android Studio制作简单计算器App
- 定积分的基本性质5 区间可加性
- 接口调用正常却返回404
- 各种OOM代码样例及解决方法
- mysql numeric
- tp5.1 db助手与db::name混合使用数据库操作失效
- 赞,全网开发者都在学的26个课程!
热门文章
- Learning Adobe Animate CC: Animation 学习Adobe Animate CC:动画 Lynda课程中文字幕
- Sensor sc2235 Porting
- 第五批可信区块链评测出炉 腾讯云、百度、蚂蚁集团等21家通过
- Good artists copy, great artists steal——Picasso
- 中鸣教育计算机二级,中鸣机器人教育套装使用指南2012.11.02.pdf
- 国内蓝牙芯片行业风险分析
- 显示器花屏故障分析与排除
- 《腾讯政务协同平台安全白皮书》发布,助力“智慧政务”夯实安全底座
- 将整型数据存入字符型数据
- PCB电路板从设计到生产的检测方法有哪些?