来自iPhone上图像阵列的视频-哪种分辨率有效以及如何找到



在我的应用程序中,我使用AVAssetWriter、AVAssetWriterInput和AVssetWriterInputPixelBufferAdaptor从一组静止图像中创建一个电影文件(有很多线程描述如何做到这一点)。作为AVAssetWriterInput输出设置AVVideoWidthKey和AVVideoHeightKey,我让用户选择视频分辨率(1080p、720p、540p或480p),然后我也将其用于-pixelBufferFromCGImage:方法。

在我的iPhone 5上创建视频可以很好地使用所有分辨率。然而,在我的iPhone 3GS上,每一个高于480p的分辨率都不会给我视频输出,但除了使用1080p作为分辨率外,我也不会得到任何错误(在这种情况下,-pixelBufferFromCGImage:方法返回NULL)。对我来说,3G可能永远无法导出分辨率高于480p的视频,iPhone 4也可能无法导出1080p的视频。

然而,我的问题是:我该如何检查设备可以写入哪些视频分辨率,并且只向用户提供这些分辨率?

深入AVFoundation,我自己找到了解决方案。我只需要检查AVAssetExportSessions allExportPresets属性中我想要使用的预设,即使我自己不使用预设,而不是创建自己的选项。

为此,我使用以下代码:

if([[AVAssetExportSession allExportPresets] containsObject:AVAssetExportPreset640x480]){
NSLog(@"480p"); 
}
if([[AVAssetExportSession allExportPresets] containsObject:AVAssetExportPreset960x540]){
NSLog(@"540p");
}
if([[AVAssetExportSession allExportPresets] containsObject:AVAssetExportPreset1280x720]){
NSLog(@"720p");
}
if([[AVAssetExportSession allExportPresets] containsObject:AVAssetExportPreset1920x1080]){
NSLog(@"1080p");
}

最新更新