为什么VideoDataOutput的availableVideoCodecTypes为空?

时间:2017-10-20 06:58:41

标签: ios iphone codec avcapture

AVCaptureVideoDataOutput有一个字段availableVideoCodecTypes,它应该告诉您可以用来录制视频的编解码器,但它总是空的。这是为什么?

我在创建VideoDataOutput后立即检查了它的值,并在将其添加到会话后,但它是空的。我尝试使用运行iOS 10的iPhone 5s和运行iOS 11的iPhone 7 Plus,两者都是空的。

这个问题与AVCaptureVideoDataOutput有关。 AVCaptureMovieFileOutput具有相同名称的another field,这有效,但问题不在于此。

可以说VideoDataOutput会为您提供帧而不是记录到文件,因此编解码器不涉及,这就是属性为零的原因,但在这种情况下,为什么要使用该属性呢? / p>

1 个答案:

答案 0 :(得分:0)

我不知道为什么它是空的。我自己也遇到了同样的问题,但是您可以在AVCaptureVideoDataOutput上调用以下方法并获得有效的结果:

- (NSArray<AVVideoCodecType> *)availableVideoCodecTypesForAssetWriterWithOutputFileType:(AVFileType)outputFileType;

用法示例:

NSArray *availableVideoCodecTypes = [videoDataOutput availableVideoCodecTypesForAssetWriterWithOutputFileType:AVFileTypeQuickTimeMovie];

在运行iOS 12的iPhone XR上返回

hvc1, // AKA HVEC or H.265
avc1, // AKA H.264
jpeg

在运行iOS 12的iPhone 6s +上,它返回

avc1, // AKA H.264
jpeg