我将录制的文件保存到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/