AVAsset曲目为空

问题描述 投票:3回答:1

基本上我想要连接AVAsset文件。我已经大致知道该怎么做,但我正在努力加载音频文件。

我可以使用AVAudioPlayer播放文件,我可以通过终端在目录中看到它们,但是当我尝试使用AVAssetURL加载它们时,它总是为轨道返回一个空数组。

我正在使用的网址:

NSURL *firstAudioFileLocation = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@%@", workingDirectory , @"/temp.pcm"]];

结果如下:

file:///Users/evolve/Library/Developer/CoreSimulator/Devices/8BF465E8-321C-47E6-BF2E-049C5E900F3C/data/Containers/Data/Application/4A2D29B2-E5B4-4D07-AE6B-1DD15F5E59A3/Documents/temp.pcm

正在加载的资产:

AVAsset *test = [AVURLAsset URLAssetWithURL:firstAudioFileLocation options:nil];

但是在调用时:

NSLog(@" total tracks %@", test.tracks);

我的输出总是total tracks ()

我随后的调用将它们添加到我的AVMutableCompositionTrack最终崩溃了应用程序,因为AVAsset似乎没有正确加载。

我玩过其他变种来加载资产,包括:

NSURL *alternativeLocation = [[NSBundle mainBundle] URLForResource:@"temp" withExtension:@"pcm"];

除了尝试使用文档中的选项加载AVAsset:

NSDictionary *assetOptions = @{AVURLAssetPreferPreciseDurationAndTimingKey: @YES};

如何从最近由AVAudioRecorder创建的本地资源加载曲目?

编辑

我蠢蠢欲动,发现我可以记录并加载.CAF文件扩展名。

似乎.PCM不支持AVAsset,这个页面也有很大的帮助。 https://developer.apple.com/documentation/avfoundation/avfiletype

ios objective-c avfoundation
1个回答
3
投票

AVAsset负载不是瞬时的。您需要等待数据可用。例:

AVAsset *test = [AVURLAsset URLAssetWithURL:firstAudioFileLocation options:nil];
[test loadValuesAsynchronouslyForKeys:@[@"playable",@"tracks"] completionHandler:^{

    // Now tracks is available
    NSLog(@" total tracks %@", test.tracks);
}];

更详细的例子可以找到in the documentation

© www.soinside.com 2019 - 2024. All rights reserved.