为什么VideoDataOutput的availableVideoCodecTypes为空?

10

AVCaptureVideoDataOutput有一个字段availableVideoCodecTypes,应该告诉您可以用哪些编解码器来录制视频,但它始终为空。为什么会这样?

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

这个问题是关于AVCaptureVideoDataOutput的。AVCaptureMovieFileOutput有一个同名的另一个字段,它可以工作,但这个问题不是关于那个的。

有人可能会说VideoDataOutput提供了帧而不是记录到文件中,因此没有涉及编解码器,这就是为什么该属性为空,但如果是这样,为什么要有该属性呢?

1个回答

1

我不知道为什么它是空的。我自己遇到了同样的问题,但是你可以在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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接