在 AVAssetReader 中获取 Exc_Bad_access

Posted

技术标签:

【中文标题】在 AVAssetReader 中获取 Exc_Bad_access【英文标题】:Getting Exc_Bad_access in AVAssetReader 【发布时间】:2015-01-20 12:20:35 【问题描述】:

我在使用 AVAssetReader 读取文件时遇到 Exc_bad_Access 异常。 该文件位于文档目录中,格式为 m4a。这是我正在使用的代码。无法弄清楚我哪里弄错了:

 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filepath = [documentsDirectory stringByAppendingPathComponent:@"My_Recording2.m4a"];

NSURL *newURL=[NSURL URLWithString:filepath];

if ([[NSFileManager defaultManager] fileExistsAtPath:newURL.absoluteString])

    NSLog(@"File exists");


AVURLAsset *asset = [AVURLAsset URLAssetWithURL:newURL options:nil];
NSError *assetError;

if(asset)
    NSLog(@"all ok");

self.assetReader = [AVAssetReader assetReaderWithAsset:asset error:&assetError];

我在最后一行遇到异常,即

self.assetReader = [AVAssetReader assetReaderWithAsset:asset error:&assetError];

【问题讨论】:

使用 AVAsset assetWithURL: 只是为了尝试 AVURLAsset 可能是用于 web 内容。您的assetReader 属性是否设置为strong? 是的assetReader 属性很强大。我尝试使用assetWithURL 仍然是相同的结果。 【参考方案1】:

我认为您的 [NSURL URLWithString:filepath] 不正确。 您可以尝试使用 fileURLWithPath 方法吗?希望这能解决您的问题。

【讨论】:

在此之后我使用 AVURLAsset* audioAsset = [[AVURLAsset alloc]initWithURL:newURL options:nil]; NSError *assetError; if(audioAsset) NSLog(@"一切正常"); NSLog(@" 数组是 %@",audioAsset.tracks);获取跟踪但如果我记录跟踪数组为空你能告诉我为什么吗? 如果 url 正确(首先检查它是否正确),那么正如文档所说,有时您必须确保是否加载了曲目。使用 loadValuesAsynchronouslyForKeys:[NSArray arrayWithObject:@"tracks"] completionHandler: ^ //for that.

以上是关于在 AVAssetReader 中获取 Exc_Bad_access的主要内容,如果未能解决你的问题,请参考以下文章

获取 AVAssetReader 的样本数据

AVAssetReader 和 Audio Queue 流问题

启动 AVAssetReader 停止对远程 I/O AudioUnit 的回调

如何通过 AVAssetReader 播放声音

使用 AVAssetReader 绘制波形

使用 AVAssetReader 读取多个轨道