linux设备上的Onvif 实现10:获取支持通道的RTSP地址
来源:互联网 发布:奥鹏教育教师网络培训 编辑:程序博客网 时间:2024/04/29 10:16
1 背景
前文已经判断出了支持的通道,对于主通道子通道都支持的摄像头,优先选择主通道获取流媒体地址。实际应用中只要取得一个通道的RTSP即可。
2 GetStreamUri
获取流媒体地址的函数是GetStreamUri,我的版本中是:
SOAP_FMAC5 int SOAP_FMAC6 soap_call___ns8__GetStreamUri(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct _ns8__GetStreamUri *ns8__GetStreamUri, struct _ns8__GetStreamUriResponse *ns8__GetStreamUriResponse)
请求指针中必须填写profile的ProfileToken字段,就是要指明哪一个通道的流媒体地址。
我的代码实例是:
BOOL MyGetStreamUri(struct soap *soap, int index)
{
BOOL bret=FALSE;
int result = 0;
int i=-1;
DEVICENODE * deviceode = DLFindbyIndex(index);
if(!deviceode)
{
printf("--Error: DLFindbyIndex(%d) return NULL! \n", index);
return FALSE;
}
if(deviceode->mediauri==NULL || strlen(deviceode->mediauri)==0)
{
printf("--Error: deviceode->mediauri is NULL! \n");
return FALSE;
}
for(i=0;i<2;i++)
{
struct ns3__Transport Transport;
Transport.Protocol = ns3__TransportProtocol__UDP;
Transport.Tunnel=NULL;
struct ns3__StreamSetup StreamSetup;
StreamSetup.Stream = ns3__StreamType__RTP_Unicast;
StreamSetup.Transport= &Transport;
StreamSetup.__size = 0;
StreamSetup.__any=NULL;
StreamSetup.__anyAttribute=NULL;
struct _ns8__GetStreamUri getStreamUriReq;
struct _ns8__GetStreamUriResponse getStreamUriResponse;
getStreamUriReq.StreamSetup = &StreamSetup;
getStreamUriReq.ProfileToken = deviceode->profile[i].token;
result = soap_call___ns8__GetStreamUri(soap, deviceode->mediauri, NULL, &getStreamUriReq, &getStreamUriResponse);
if(result==-1)
{
printf("soap error: %d, %s, %s\n", soap->error, *soap_faultcode(soap), *soap_faultstring(soap));
result = soap->error;
bret = FALSE;
}
else
{
printf(" GetStreamUri(%s) OK! \n", getStreamUriReq.ProfileToken);
//printf(" MediaUri->Uri=%s \n", getStreamUriResponse.MediaUri->Uri);
memset(deviceode->profile[i].rtsp, 0, sizeof(MAXSTRLEN));
strncpy(deviceode->profile[i].rtsp, getStreamUriResponse.MediaUri->Uri, MAXSTRLEN);
bret = TRUE;
}
}
soap_end(soap);
return bret;
}
3 完整的请求、应答报文:略
- linux设备上的Onvif 实现10:获取支持通道的RTSP地址
- linux设备上的Onvif 实现13: 获取子通道的配置数据范围
- linux设备上的Onvif 实现15: 连接RTSP获取视频流流程图
- linux设备上的Onvif 实现6:获取摄像头的流媒体地址完整流程
- Linux设备上的Onvif实现17:实现RTSP摘要认证
- linux设备上的Onvif 实现14: 修改子通道的配置数据
- Linux设备上的Onvif实现16:实现Onvif鉴权
- linux设备上的Onvif 实现2:ONVIF框架基础知识
- linux设备上的Onvif 实现9:检查是否支持该设备
- linux设备上的Onvif 实现7:编写设备能力获取程序
- linux设备上的Onvif 实现12: 获取媒体配置数据
- linux设备上的Onvif 实现8:编写媒体信息获取程序
- linux设备上的Onvif 实现3:gsoap框架基础知识
- linux设备上的Onvif 实现1: 研究计划
- linux设备上的Onvif 实现1: 研究计划
- 使用Onvif协议进行设备RTSP地址获取
- Linux设备上的Onvif实现18: ONVIF视频监视功能开发问题总结
- linux设备上的Onvif 实现1:onvif规范 中文介绍
- linux设备上的Onvif 实现11: 修改媒体配置数据的流程
- 【LeetCode】Maximum Depth of Binary Tree (二叉树最大深度)
- WPF 转义字符
- C++学习 基本概念
- HBase在Linux下和windows下面的安装和配置
- linux设备上的Onvif 实现10:获取支持通道的RTSP地址
- RichEdit嵌入自开发OLE控件技术要点(ATL)
- MySQL最常用的二种存储引擎MyISAM和InnoDB的介绍
- [jQuery]鼠标移动到table上将对应行加亮
- Xcode 中设置部分文件ARC支持
- quartz中的corn表达式(转)
- 设置jmx远程监控
- linux设备上的Onvif 实现9:检查是否支持该设备
- Hibernate:组合模式解决树的映射