linux设备上的Onvif 实现13: 获取子通道的配置数据范围
2013-09-30 17:01
471 查看
1 背景
想要修改配置数据,必须知道摄像头支持的数据范围,这样才能设置成正确的数据。
2 函数原型
SOAP_FMAC5 int SOAP_FMAC6 soap_call___ns8__GetVideoEncoderConfigurationOptions(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct _ns8__GetVideoEncoderConfigurationOptions *ns8__GetVideoEncoderConfigurationOptions, struct _ns8__GetVideoEncoderConfigurationOptionsResponse
*ns8__GetVideoEncoderConfigurationOptionsResponse)
该函数需要指定通道代号、该通道的功能种类(例如本例中的编码器代号)
getOptionsReq.ConfigurationToken
getOptionsReq.ProfileToken
3 我的代码实例:
/* 读取子通道的配置数据范围.
一般2通道,第1是主通道,第2是子通道。 */
struct _ns8__GetVideoEncoderConfigurationOptions getOptionsReq;
struct _ns8__GetVideoEncoderConfigurationOptionsResponse getOptionsResponse;
if(count>1)
channel=1;
else
channel=0;
getOptionsReq.ConfigurationToken = deviceode->profile[channel].VideoEncoderConfigurationtoken;
getOptionsReq.ProfileToken = deviceode->profile[channel].token;
result = soap_call___ns8__GetVideoEncoderConfigurationOptions(soap, deviceode->mediauri, NULL, &getOptionsReq, &getOptionsResponse);
if(result==-1)
{
printf("soap error: %d, %s, %s\n", soap->error, *soap_faultcode(soap), *soap_faultstring(soap));
result = soap->error;
return FALSE;
}
else
{
printf(" GetVideoEncoderConfigurationOptions OK! \n");
/* 有的摄像头应答无Extension字段,有的有Extension字段。
Extension字段中含码率BitrateRange范围定义 */
#if 1
printf(" getOptionsResponse.Options->QualityRange=(%d ~ %d) \n", getOptionsResponse.Options->QualityRange->Min,getOptionsResponse.Options->QualityRange->Max);
printf(" getOptionsResponse.Options->H264->__sizeResolutionsAvailable=%d \n", getOptionsResponse.Options->H264->__sizeResolutionsAvailable);
struct ns3__VideoResolution *ResolutionsAvailable;
ResolutionsAvailable = getOptionsResponse.Options->H264->ResolutionsAvailable;
count = getOptionsResponse.Options->H264->__sizeResolutionsAvailable;
for(i=0; i<count;i++)
{
printf(" getOptionsResponse.Options->H264->ResolutionsAvailable[%d]=(%d x %d) \n", i,ResolutionsAvailable->Width,ResolutionsAvailable->Height);
ResolutionsAvailable++;
}
printf(" getOptionsResponse.Options->H264->GovLengthRange=(%d ~ %d) \n", getOptionsResponse.Options->H264->GovLengthRange->Min,getOptionsResponse.Options->H264->GovLengthRange->Max);
printf(" getOptionsResponse.Options->H264->FrameRateRange=(%d ~ %d) \n", getOptionsResponse.Options->H264->FrameRateRange->Min,getOptionsResponse.Options->H264->FrameRateRange->Max);
printf(" getOptionsResponse.Options->H264->EncodingIntervalRange=(%d ~ %d)\n", getOptionsResponse.Options->H264->EncodingIntervalRange->Min,getOptionsResponse.Options->H264->EncodingIntervalRange->Max);
printf(" getOptionsResponse.Options->H264->__sizeH264ProfilesSupported=%d \n", getOptionsResponse.Options->H264->__sizeH264ProfilesSupported);
printf(" getOptionsResponse.Options->H264->H264ProfilesSupported=%d \n", *getOptionsResponse.Options->H264->H264ProfilesSupported);
if(getOptionsResponse.Options->Extension!=NULL)
printf(" getOptionsResponse.Options->Extension->H264->BitrateRange=(%d ~ %d) \n", getOptionsResponse.Options->Extension->H264->BitrateRange->Min,getOptionsResponse.Options->Extension->H264->BitrateRange->Max);
#endif
}
4 命令及应答报文
linux服务器发出命令 GetVideoEncoderConfigurationOptions,获取配置参数的范围。
略
想要修改配置数据,必须知道摄像头支持的数据范围,这样才能设置成正确的数据。
2 函数原型
SOAP_FMAC5 int SOAP_FMAC6 soap_call___ns8__GetVideoEncoderConfigurationOptions(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct _ns8__GetVideoEncoderConfigurationOptions *ns8__GetVideoEncoderConfigurationOptions, struct _ns8__GetVideoEncoderConfigurationOptionsResponse
*ns8__GetVideoEncoderConfigurationOptionsResponse)
该函数需要指定通道代号、该通道的功能种类(例如本例中的编码器代号)
getOptionsReq.ConfigurationToken
getOptionsReq.ProfileToken
3 我的代码实例:
/* 读取子通道的配置数据范围.
一般2通道,第1是主通道,第2是子通道。 */
struct _ns8__GetVideoEncoderConfigurationOptions getOptionsReq;
struct _ns8__GetVideoEncoderConfigurationOptionsResponse getOptionsResponse;
if(count>1)
channel=1;
else
channel=0;
getOptionsReq.ConfigurationToken = deviceode->profile[channel].VideoEncoderConfigurationtoken;
getOptionsReq.ProfileToken = deviceode->profile[channel].token;
result = soap_call___ns8__GetVideoEncoderConfigurationOptions(soap, deviceode->mediauri, NULL, &getOptionsReq, &getOptionsResponse);
if(result==-1)
{
printf("soap error: %d, %s, %s\n", soap->error, *soap_faultcode(soap), *soap_faultstring(soap));
result = soap->error;
return FALSE;
}
else
{
printf(" GetVideoEncoderConfigurationOptions OK! \n");
/* 有的摄像头应答无Extension字段,有的有Extension字段。
Extension字段中含码率BitrateRange范围定义 */
#if 1
printf(" getOptionsResponse.Options->QualityRange=(%d ~ %d) \n", getOptionsResponse.Options->QualityRange->Min,getOptionsResponse.Options->QualityRange->Max);
printf(" getOptionsResponse.Options->H264->__sizeResolutionsAvailable=%d \n", getOptionsResponse.Options->H264->__sizeResolutionsAvailable);
struct ns3__VideoResolution *ResolutionsAvailable;
ResolutionsAvailable = getOptionsResponse.Options->H264->ResolutionsAvailable;
count = getOptionsResponse.Options->H264->__sizeResolutionsAvailable;
for(i=0; i<count;i++)
{
printf(" getOptionsResponse.Options->H264->ResolutionsAvailable[%d]=(%d x %d) \n", i,ResolutionsAvailable->Width,ResolutionsAvailable->Height);
ResolutionsAvailable++;
}
printf(" getOptionsResponse.Options->H264->GovLengthRange=(%d ~ %d) \n", getOptionsResponse.Options->H264->GovLengthRange->Min,getOptionsResponse.Options->H264->GovLengthRange->Max);
printf(" getOptionsResponse.Options->H264->FrameRateRange=(%d ~ %d) \n", getOptionsResponse.Options->H264->FrameRateRange->Min,getOptionsResponse.Options->H264->FrameRateRange->Max);
printf(" getOptionsResponse.Options->H264->EncodingIntervalRange=(%d ~ %d)\n", getOptionsResponse.Options->H264->EncodingIntervalRange->Min,getOptionsResponse.Options->H264->EncodingIntervalRange->Max);
printf(" getOptionsResponse.Options->H264->__sizeH264ProfilesSupported=%d \n", getOptionsResponse.Options->H264->__sizeH264ProfilesSupported);
printf(" getOptionsResponse.Options->H264->H264ProfilesSupported=%d \n", *getOptionsResponse.Options->H264->H264ProfilesSupported);
if(getOptionsResponse.Options->Extension!=NULL)
printf(" getOptionsResponse.Options->Extension->H264->BitrateRange=(%d ~ %d) \n", getOptionsResponse.Options->Extension->H264->BitrateRange->Min,getOptionsResponse.Options->Extension->H264->BitrateRange->Max);
#endif
}
4 命令及应答报文
linux服务器发出命令 GetVideoEncoderConfigurationOptions,获取配置参数的范围。
略
相关文章推荐
- linux设备上的Onvif 实现14: 修改子通道的配置数据
- linux设备上的Onvif 实现12: 获取媒体配置数据
- linux设备上的Onvif 实现10:获取支持通道的RTSP地址
- 通过摄像机视频设备或者流媒体服务器SDK获取到数据转换成RTMP流实现网页/手机微信播放
- 开发人员学Linux(13):CentOS7安装配置IT设备监控系统Zabbix
- 如何在Linux下实现设备的配置(上)
- Linux设备上的Onvif实现18: ONVIF视频监视功能开发问题总结
- linux下编程实现GPS数据获取与解析(2)
- 虚拟机Linux访问usb设备,通过Libusb库方法实现读写usb设备所获取的实时图像数据
- linux设备上的Onvif 实现21:解决大华摄像头无法使用问题
- 如何在Linux下实现设备的配置
- SSM配置Mybatis实现自动获取插入数据的自增id至目标对象中
- 在Linux中实现类似windows中获取配置文 件的函数GetProfileString
- 开发人员学Linux(13):CentOS7安装配置IT设备监控系统Zabbix
- linux设备上的Onvif 实现20:海康摄像头H264码流错误
- linux系统下,qtcreator实现onvif协议设备发现
- 如何在Linux下实现设备的配置(下)
- 如何在 Linux 下实现设备的配置(上)
- 如何在Linux下实现设备的配置(上)
- 如何在Linux下实现设备的配置