我将录制的文件保存到Documents目录,然后将音频与其他保存在NSBundle中的音频合并。对所有文件使用m4a编码。文件路径格式为path/to/documents/directory/filename.m4a。包括文件扩展名。

我正在创建AVURLAsset这样的:

NSURL* audioURL = [NSURL fileURLWithPath:audioPath];
AVURLAsset* audioAsset = [AVURLAsset assetWithURL:audioURL];

像这样记录:
NSLog(@"filename: %@", audioAsset.URL.lastPathComponent); // filename: filename.m4a

但是AVURLAsset不可读且不可播放,当我使用函数AVAssetTrack获得tracksWithMediaType数组时,如下所示:
NSArray<AVAssetTrack *>* tracks = [audioAsset tracksWithMediaType:AVMediaTypeAudio];
AVAssetTrack* audioTrack = [tracks objectAtIndex:0]; //Exception occurs

异常:抛出*** -[__NSArrayM objectAtIndex:]: index 0 beyond bounds for empty array
因为AVAssetTrack数组为空。在OS 10.3.1的模拟器上进行测试。

根据iCreative的评论进行了尝试:
AVMediaSelectionGroup *audioTracks = [audioAsset mediaSelectionGroupForMediaCharacteristic:AVMediaCharacteristicAudible];
NSLog(@"MediaSelectionGroup count: %lu", (unsigned long)audioTracks.options.count); //count is 0

最佳答案

这段代码没有任何问题。问题出在此功能之前。在停止录音机之前调用合并功能。该文件未从记录器中释放,并且合并正在访问该文件。

关于ios - 无法从Documents Directory的NSURL中正确创建AVAsset,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51607152/

10-12 16:15