AVCaptureVideoDataOutput有一个字段availableVideoCodecTypes,它应该告诉您可以用来录制视频的编解码器,但它总是空的。这是为什么?
我在创建VideoDataOutput后立即检查了它的值,并在将其添加到会话后,但它是空的。我尝试使用运行iOS 10的iPhone 5s和运行iOS 11的iPhone 7 Plus,两者都是空的。
这个问题与AVCaptureVideoDataOutput有关。 AVCaptureMovieFileOutput具有相同名称的another field,这有效,但问题不在于此。
可以说VideoDataOutput会为您提供帧而不是记录到文件,因此编解码器不涉及,这就是属性为零的原因,但在这种情况下,为什么要使用该属性呢? / p>
答案 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