Video Toolbox压缩配置
压缩属性
压缩属性都是以kVTCompressionPropertyKey_Xx
命名,所以下面的属性名都省略了其前缀kVTCompressionPropertyKey_
。
码流配置
Depth:像素深度。
该属性仅由视频编码器支持,用于与特定像素格式(例如,16位RGB、24位RGB)绑定的格式。
ProfileLevel:码流配置和级别。
H264EntropyMode:用于H.264压缩的熵编码模式。
如果H.264编码器支持,该属性控制编码器是否应使用基于上下文的自适应变长编码(CAVLC)或基于上下文的自适应二进制算术编码(CABAC)。CABAC通常能提供更好的压缩,但代价是更高的计算开销。默认值是针对编码器的,可能会根据其他编码器的设置而改变。
注意:改变默认的熵模式可能会导致配置与要求的配置文件和级别不兼容。这种情况下的结果是不确定的,可能包括编码错误或不符合要求的输出流。
- kVTH264EntropyMode_CABAC
- kVTH264EntropyMode_CAVLC
缓冲区
NumberOfPendingFrames:压缩会话中待处理的帧的数量。该值可能会异步减少。
PixelBufferPoolIsShared:布尔值,表示视频编码器和会话客户端之间是否共享公共像素缓冲池。
false表示视频编码器和客户端的像素缓冲区属性不兼容,使用单独的缓冲池。
VideoEncoderPixelBufferAttributes:视频编码器的像素缓冲区属性。使用这些属性来为源像素缓冲区创建一个像素缓冲区池。
清洁光圈和像素长宽比
AspectRatio16x9:布尔值,表示DV视频流是否应设置16x9标志。
此属性由DV25/50系列编码器支持。
false时,图片长宽比为4:3。true时,图片长宽比为16:9。无论哪种方式,都会使用一个固定的长宽比(具体数值取决于格式是NTSC还是PAL)。
CleanAperture:编码帧的清洁光圈。
如果视频编码器执行特定的清洁光圈,这个属性是只读的(VTSessionSetProperty(_:key:value:
)将返回kVTPropertyReadOnlyErr
)。洁净孔径将在输出样本的格式描述中设置,并可能影响源帧的缩放。NULL是这个属性的一个有效值,意味着清洁孔径是全宽和全高。
FieldCount:场类型,表示帧应该是逐行编码(1)还是隔行编码(2)。
在输出样本的格式描述上设置的,可能会影响源帧的缩放。NULL是这个属性的一个有效值。
FieldDetail:隔行扫描帧的场排序。
如果视频编码器执行特定的场排序,这个属性将是只读的(VTSessionSetProperty(_:key:value:)
返回kVTPropertyReadOnlyErr
)。字段细节是在输出样本的格式描述上设置的,并可能影响源帧的缩放。NULL是这个属性的一个有效值。
PixelAspectRatio:编码帧的像素长宽比。
如果视频编码器强制执行特定的像素长宽比,该属性将是只读的(VTSessionSetProperty(_:key:value:
) 返回 kVTPropertyReadOnlyErr
)。像素长宽比是在输出样本的格式描述上设置的,并可能影响源帧的缩放。NULL是这个属性的有效值,意味着方形像素(1:1)。
ProgressiveScan:布尔值,表示DV视频流是否应设置逐行标志。
DV25/50系列编码器支持此属性。如果是假的,内容被编码为隔行扫描。如果为真,则内容被编码为渐进式。此属性的值可固定 kVTCompressionPropertyKey_FieldCount
和 kVTCompressionPropertyKey_FieldDetail
属性。
颜色
ColorPrimaries:压缩内容的颜色原色。
TransferFunction:压缩内容的转换函数。
YCbCrMatrix:用于压缩内容的YCbCr矩阵。
ICCProfile:用于压缩内容的ICC配置文件。
预期值
ExpectedDuration:压缩会话的预期总时长。
ExpectedFrameRate:预期的帧率。
SourceFrameCount:源帧的数量。
帧依赖
AllowFrameReordering:布尔值,表示是否启用了帧重排。
AllowTemporalCompression:布尔值,表示是否启用了时间压缩。
MaxKeyFrameInterval:关键帧之间的最大间隔,也被称为关键帧率。
MaxKeyFrameIntervalDuration:从一个关键帧到下一个关键帧的最大持续时间,单位是秒。
硬件加速
UsingHardwareAcceleratedVideoEncoder:布尔值,表示是否使用了硬件加速视频编码器。
kVTVideoEncoderSpecification_RequireHardwareAcceleratedVideoEncoder:布尔值,表示是否需要硬件加速编码。
kVTVideoEncoderSpecification_EnableHardwareAcceleratedVideoEncoder:布尔值,表示是否允许硬件加速视频编码(如果可用)。
多重压缩存储
MultiPassStorage:启用多路压缩并为编码器私有数据提供存储。
每帧配置
kVTEncodeFrameOptionKey_ForceKeyFrame:布尔值,表示当前帧是否被强制为关键帧的。
PixelTransferProperties:用于配置VTPixelTransferSession的属性,以便在必要时将源帧从客户端的图像缓冲区转移到视频编码器的图像缓冲区。
速率控制
AverageBitRate:长期期望的平均比特率,单位是比特/秒。
DataRateLimits:对数据速率的零、一或两个硬限制。
MoreFramesAfterEnd:布尔值,表示一个压缩会话的帧是否以及如何与其他压缩帧串联以形成一个更长的系列。
Quality:希望的压缩质量。
RealTime:布尔值,表示是否建议视频编码器进行实时压缩。
MaxH264SliceBytes:H.264编码的最大分片大小。
MaxFrameDelayCount:压缩器在必须输出一个压缩帧之前允许保留的最大帧数。