1

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

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

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

4

1 回答 1

1

深入研究 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");
}
于 2012-11-19T20:49:53.473 回答