视频编码参数与视频采集参数匹配策略

在voip系统中,音视频客户端往往需要配置视频编码的分辨率,码率和帧率,其中分辨率和帧率是与采集息息相关的。一般的如果直接使用的是usb摄像头,对于不同厂家,不同规格的摄像头所支持的分辨率,图像格式和帧率是有很大不同的,以下是windows下获取摄像头支持格式属性的方法:

 

//hwnd为显示窗口的句柄 
int CCamera::ShowCapturePropertyPage(HWND hWnd)
{
	if(!m_bInit)
		return -1;

	ISpecifyPropertyPages *pSpec;
	CAUUID cauuid;
	HRESULT hr = m_captureConfig->QueryInterface(IID_ISpecifyPropertyPages,(void**)&pSpec);
	if(hr == S_OK)
	{
		hr = pSpec->GetPages(&cauuid);
		//获取指定摄像头的能力
		hr = OleCreatePropertyFrame(hWnd,200,200,NULL,1,(IUnknown **)&m_captureConfig,cauuid.cElems,(GUID*)cauuid.pElems,0,0,NULL);
		CoTaskMemFree(cauuid.pElems);
		pSpec->Release();
	}
	return 0;
}


会产生如下对话框

 

 

 

 

如红框所示,依次为帧率,格式和分辨率,这几项的意思为在采集格式为YUY2时能够满足的最大的帧率为5帧,分辨率为1080P。有些摄像头往往支持的最大分辨率只能支持到VGA(640x480) 。在windows和linux下,摄像头的支持是有不同处理的:

在windows下通过directshow采集,其实不用关心采集的格式和帧率,通常都是将采集格式设置为rgb24直接进行采集,不管摄像头是否支持都可以采集出rgb的数据。通常关心的都是分辨率。

在linux下通过v4l2去采集,格式通常YUY2的,并且帧率是与摄像头实际帧率是相符合的,如上图,在YUY2模式下,最大的采集帧率只有5帧。

音视频客户端往往会将视频编码配置参数开放给用户设置,其中视频编码参数就包括视频的分辨率,帧率,码率。而分辨率需要摄像头去支持的,因为用户配置的分辨率摄像头不一定会支持,一个通常的策略是在摄像头不支持配置分辨率情况下,去取摄像头就近最满足的分辨率,如:

  1. 摄像头最大支持vga,用户配置的编码参数为720p,此时取vga,那么在编码前就需要将vga放大成720p的图像。
  2. 摄像头支持vga和1080p,配置的编码参数为720p,此时取最近一个支持的即要么是vga,要么是1080p,不管怎么选都是需要进行缩放的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mo4776

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值