我正在使用 VideoToolbox 开发一个使用硬件加速进行视频编码的 macOS 项目。我曾尝试使用kVTCompressionPropertyKey_AverageBitRate
和控制比特率kVTCompressionPropertyKey_DataRateLimits
,但经过多次尝试后,它仍然经常超过目标比特率。
kVTCompressionPropertyKey_DataRateLimits
在 macOS 上受到尊重吗?
当我使用VTSessionCopySupportedPropertyDictionary
在我的压缩会话上获取支持的属性时,DataRateLimits 会显示在字典中,并且我已在压缩会话上设置它而没有错误。但是,如果我尝试实际使用它来获得它的价值
CFTypeRef value = nullptr;
result = VTSessionCopyProperty(m_compressionSessionRef, (__bridge CFStringRef)key, kCFAllocatorDefault, &value);
DataRateLimits在哪里key
,从字典中获取,它返回属性不受支持的错误。但在 iOS 上,它成功返回。
这似乎很严重,并且似乎不限于我的机器。如果它真的不受支持,那将有助于解释我的编码比特率的波动性。但是,在从事这个项目和研究 VideoToolbox 的几个月中,我没有看到任何关于 macOS 上的硬件编码器不支持此功能的情况。我认为这样的缺陷将是一个大问题。有人对此有任何见解吗?谢谢!
更新:8/5 注意:目标 SDK 是最新的(macOS-10.14.x、iOS-12.x)。我在具有不同版本 macOS (10.11-10.14) 的多个硬件型号上看到了这个问题,尽管所有型号都是 MacBook Pro,可以追溯到 2013/2014 年,以及最近的触控型号 2017/2018 年。对于 iOS,我没有很多数据,但我看到 DataRateLimits 在 12.3.1 以及 iPhone 7 和 iPhone X 上按预期显示。底线,操作系统版本和硬件似乎无关紧要;它适用于手机,但不适用于笔记本电脑。