我正在研究一个MacOS项目,该项目使用VideoToolbox将硬件加速用于视频编码。我尝试使用kVTCompressionPropertyKey_AverageBitRate
和kVTCompressionPropertyKey_DataRateLimits
控制比特率,但是经过多次尝试,它仍然经常超过目标比特率。
在MacOS上kVTCompressionPropertyKey_DataRateLimits
得到尊重吗?
当我使用VTSessionCopySupportedPropertyDictionary
获取压缩会话上受支持的属性时,DataRateLimits将显示在字典中,并且我已在压缩会话上对其进行了设置而没有错误。但是,如果我尝试真正使用它来获得它的价值
CFTypeRef value = nullptr;
result = VTSessionCopyProperty(m_compressionSessionRef, (__bridge CFStringRef)key, kCFAllocatorDefault, &value);
其中key
是DataRateLimits,从字典中获取,它返回错误,表明该属性不受支持。 但是在iOS上,它会成功返回。
这似乎很严重,并且似乎不限于我的机器。如果确实不支持它,那将有助于解释我的编码比特率的波动性。但是,在从事该项目和研究VideoToolbox的几个月中,我还没有看到关于macOS上的硬件编码器不支持此功能的任何信息。我认为这样的缺陷将是一个大问题。有人在这里有见识吗?谢谢!