美文网首页收藏
AV Foundation ⑧ 资源导出(AVAssetExpo

AV Foundation ⑧ 资源导出(AVAssetExpo

作者: _涼城 | 来源:发表于2022-06-04 13:11 被阅读0次

概述

    AVAssetExportSession 用于将 AVAsset 内容根据导出预设条件进行转码,并将导出资源写到磁盘中。其提供了多个功能来实现将一种格式转换为另一种格式、修订资源的内容、修改资源的音频和视频行为,以及写入新的元数据。

导出会话工作流程.png

创建 AVAssetExportSession

    创建一个 AVAssetExportSession 实例需要提供资源和导出预设。导出预设用于确定导出内容的质量、大小等属性。在创建之前需要通过 exportPresetsCompatibleWithAsset 确认资源可用的预设,如下所示:

AVAsset *anAsset = <#获取资产#>;
NSArray *compatiblePresets = [AVAssetExportSession exportPresetsCompatibleWithAsset:anAsset];
if ([compatiblePresets containsObject:AVAssetExportPresetLowQuality]) {
    AVAssetExportSession *exportSession = [[AVAssetExportSession alloc]
        initWithAsset:anAsset presetName:AVAssetExportPresetLowQuality];
    // 执行继续。
}

了解导出预设

     AVAssetExportSession提供了一个方法 allExportPresets,可以查看当前系统设备所有可用的导出预设名称,在 iOS 系统中大致分为 5 类:

  • 质量预设

    AVAssetExportPresetHighestQuality,
    AVAssetExportPresetLowQuality,
    AVAssetExportPresetMediumQuality
    
    
  • 尺寸预设

    AVAssetExportPreset640x480,
    AVAssetExportPreset960x540,
    AVAssetExportPreset1280x720,
    AVAssetExportPreset1920x1080,
    AVAssetExportPreset3840x2160
    
  • HEVC 尺寸预设

    AVAssetExportPresetHEVC1920x1080,
    AVAssetExportPresetHEVC1920x1080WithAlpha,
    AVAssetExportPresetHEVC3840x2160,
    AVAssetExportPresetHEVC3840x2160WithAlpha,
    AVAssetExportPresetHEVCHighestQuality,
    AVAssetExportPresetHEVCHighestQualityWithAlpha
    
  • 纯音频预设

    AVAssetExportPresetAppleM4A
    
  • 直通预设

    AVAssetExportPresetPassthrouge
    

配置输出 URL

    创建一个导出会话后,需要指定一个 outputURL 用于声明导出内容将要写入的地址,AVAssetExportSession 可以从 URL 路径的扩展名设置输出文件类型,但是通常直接使用 outputFileType 值来表示将要写入的导出格式。开发者还可以指定其他属性,例如时间范围、输出文件长度的限制、导出的文件是否应针对网络使用进行优化以及视频合成。以下示例说明了如何使用 timeRange属性修剪影片:

exportSession.outputURL = <#A file URL#>;
exportSession.outputFileType = AVFileTypeQuickTimeMovie;

CMTime start = CMTimeMakeWithSeconds(1.0, 600);
CMTime duration = CMTimeMakeWithSeconds(3.0, 600);
CMTimeRange range = CMTimeRangeMake(start, duration);
exportSession.timeRange = range;

创建新文件

    要创建新文件,需要调用 exportAsynchronouslyWithCompletionHandler: 导出。操作完成时调用完成处理程序块,在处理程序的实现中,应该检查会话的 status 值以确定导出是成功、失败还是被取消。

  [exportSession exportAsynchronouslyWithCompletionHandler:^{
 
        switch ([exportSession status]) {
            case AVAssetExportSessionStatusFailed:
                NSLog(@"Export failed: %@", [[exportSession error] localizedDescription]);
                break;
            case AVAssetExportSessionStatusCancelled:
                NSLog(@"Export canceled");
                break;
            default:
                break;
        }
    }];

如果尝试覆盖现有文件或在应用程序的沙箱之外写入文件,则导出将失败。如果出现以下情况,它也可能会失败:有来电或者应用程序在后台

取消导出

    可以通过调用cancelExport 取消导出。

[exportSession cancelExport];

相关文章

网友评论

    本文标题:AV Foundation ⑧ 资源导出(AVAssetExpo

    本文链接:https://www.haomeiwen.com/subject/jdikmrtx.html