【问题标题】:Using exportAsynchronouslyWithCompletionHandler使用 exportAsynchronouslyWithCompletionHandler
【发布时间】:2011-07-25 03:31:12
【问题描述】:

我尝试从 iPod 库中导出音频文件。我想用这个 iPod-Library 文件创建一个新文件。在 AV Foundation Programming Guide 的 Reading and Writing Assets 一章中有一个小例子。但是,此代码对我不起作用。发生4个错误

Export Status 4 Error Domain=AVFoundationErrorDomain 
Code=-11800 "The operation could not be completed" 
UserInfo=0x1edfa0 {NSLocalizedFailureReason=An unknown error occurred (-12124), 
NSUnderlyingError=0x1ebdc0 "The operation couldn’t be completed. (OSStatus error -12124.)", 
NSLocalizedDescription=The operation could not be completed}

我的代码

AVURLAsset *objAvUrlAsset = [[AVURLAsset alloc] initWithURL:[tempArray objectAtIndex:0]  options:nil];

NSLog(@"%s objAvUrlAsset %@", __FUNCTION__, objAvUrlAsset);

NSArray *compatiblePresets = [AVAssetExportSession exportPresetsCompatibleWithAsset:objAvUrlAsset];

NSLog(@"%s compatiblePresets %@", __FUNCTION__, compatiblePresets);

if ([compatiblePresets containsObject:AVAssetExportPresetAppleM4A]) {


    AVAssetExportSession *exportSession = [[AVAssetExportSession alloc]
                                           initWithAsset:objAvUrlAsset presetName:AVAssetExportPresetAppleM4A];

    NSString * exportPath = [NSString stringWithFormat:@"testTrack1.M4A"];
    NSURL *exportURL = [NSURL fileURLWithPath:exportPath];

    exportSession.outputURL = exportURL;
    exportSession.outputFileType = AVFileTypeAppleM4A;
    exportSession.shouldOptimizeForNetworkUse = YES;

     NSLog(@"%s export Session %@",__FUNCTION__, exportSession);

    [exportSession exportAsynchronouslyWithCompletionHandler: ^(void) {
        // export completed
        NSLog(@"Export Status %d %@", exportSession.status, exportSession.error);
    }];
    [exportSession release];
}

nslog 消息

-[MyLocalMusicLibrary getAllTracks] objAvUrlAsset AVURLAsset: 0x1dd5a0, URL = ipod-library://item/item.mp3?id=-212958261728896866

 -[MyLocalMusicLibrary getAllTracks] compatiblePresets (
AVAssetExportPresetAppleM4A,
AVAssetExportPreset960x540,
AVAssetExportPresetLowQuality,
AVAssetExportPresetMediumQuality,
AVAssetExportPreset640x480,
AVAssetExportPresetHighestQuality,
AVAssetExportPreset1280x720
)

 -[MyLocalMusicLibrary getAllTracks] export Session AVAssetExportSession: 0x1e85c0, 
asset = AVURLAsset: 0x1dd5a0, URL = ipod-library://item/item.mp3?id=-212958261728896866, 
presetName = AVAssetExportPresetAppleM4A, outputFileType = com.apple.m4a-audio

 -[MyLocalMusicLibrary getAllTracks] Export Status 4 Error Domain=AVFoundationErrorDomain 
Code=-11800 "The operation could not be completed" 
UserInfo=0x1edfa0 {NSLocalizedFailureReason=An unknown error occurred (-12124), 
NSUnderlyingError=0x1ebdc0 "The operation couldn’t be completed. (OSStatus error -12124.)", 
NSLocalizedDescription=The operation could not be completed}

如何解决这四个错误。我需要为此导出 AVAssetReader 和 AVAssetWriter。

【问题讨论】:

标签: iphone avfoundation ipod m4a


【解决方案1】:

我从AVAssetExportSession 得到了相同的结果,完全没用的NSError 试图告诉你的是你要导出到的路径并不完全存在。您需要确保使用 NSFileManager 创建到要放置文件的目录的路径。

【讨论】:

    【解决方案2】:

    对我来说,问题是我试图在从 UIImagePickerController 获取文件后直接从 tmp 目录转换文件

    我要做的是首先将文件保存到库中,然后遍历 ALAssetLibrary 文件以查找保存的最新视频。然后我将该视频转换为 .mp4 并将其存储在应用程序的本地文档目录中以供我随意使用。

    这是必要的,但这有点荒谬。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-23
      • 2015-09-08
      • 2020-12-19
      • 2017-11-20
      相关资源
      最近更新 更多