我正在使用VTCompressionSessionRef来压缩H.264格式的CVImageBuffer。压缩会话工作正常,我得到CMSampleBuffer的压缩回调。 当我尝试使用以下代码设置NALU参数时,它不起作用。
const uint8_t *paramenterSetPointerOut = NULL;
size_t parameterSetSizeOut,parameterSizeCountOut;
int nalUnitHeaderLengthOut;
CMFormatDescriptionRef fdesc = CMSampleBufferGetFormatDescription(sampleBuffer);
OSStatus status = CMVideoFormatDescriptionGetH264ParameterSetAtIndex(fdesc, 0, ¶menterSetPointerOut,¶meterSetSizeOut, ¶meterSizeCountOut, &nalUnitHeaderLengthOut);
CMVideoFormatDescriptionGetH264ParameterSetAtIndex API返回-12712错误。如果我在这里做错了,你能告诉我吗?
答案 0 :(得分:0)
该函数有一个错误,提交一个Radar。您可以从索引0迭代,直到函数返回错误。 pset数据和大小变量都可以。
答案 1 :(得分:0)
也许为时已晚,但是此实现效果很好:
CMFormatDescriptionRef description = CMSampleBufferGetFormatDescription(sampleBuffer);
size_t numberOfParameterSets;
CMVideoFormatDescriptionGetH264ParameterSetAtIndex(description,
0, NULL, NULL,
&numberOfParameterSets,
NULL);
// Write each parameter set to the elementary stream
NSLog(@"NUMBER OF PARAMETERS %lu", numberOfParameterSets);
for (int i = 0; i < numberOfParameterSets; i++) {
const uint8_t *parameterSetPointer;
size_t parameterSetLength;
CMVideoFormatDescriptionGetH264ParameterSetAtIndex(description,
i,
¶meterSetPointer,
¶meterSetLength,
NULL, NULL);
// Write the parameter set to the elementary stream
[elementaryStream appendBytes:startCode length:startCodeLength];
[elementaryStream appendBytes:parameterSetPointer length:parameterSetLength];
}