ios - trackWithMediaType 有时返回 0 首轨道

标签 ios objective-c iphone avaudiorecorder

在我的应用程序中,我合并了多个 .m4a 音频文件。为了合并音频文件,我使用下面的代码。

CMTime nextClipStartTime = kCMTimeZero;
AVMutableComposition *composition = [[AVMutableComposition alloc] init];
AVMutableCompositionTrack *compositionAudioTrack = [composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];


for(NSString * str in filesNamesArray)
{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *path = [documentsDirectory stringByAppendingPathComponent:str];
    NSURL *url = [[NSURL alloc] initFileURLWithPath:path];

    AVAsset *avAsset = [[AVURLAsset alloc] initWithURL:url options:nil];

    NSArray *tracks = [avAsset tracksWithMediaType:AVMediaTypeAudio];
    if ([tracks count] == 0)
    {
        NSLog(@"Tracks = %lu",(unsigned long)[tracks count]);
        return;
    }
    NSLog(@"%@",avAsset);
    CMTimeRange timeRangeInAsset = CMTimeRangeMake(kCMTimeZero, [avAsset duration]);
    AVAssetTrack *clipAudioTrack = [[avAsset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0];
    ok = [compositionAudioTrack insertTimeRange:timeRangeInAsset  ofTrack:clipAudioTrack atTime:nextClipStartTime error:&error];
    if (!ok) {
        NSLog(@"Current Video Track Error: %@",error);
    }
    nextClipStartTime = CMTimeAdd(nextClipStartTime, timeRangeInAsset.duration);
}

有时“tracksWithMediaType”返回空数组。为什么会发生这种情况以及任何帮助将不胜感激。

最佳答案

当您创建 AVAsset 时:

AVAsset *avAsset = [[AVURLAsset alloc] initWithURL:url options:nil];

Assets 必须在准备使用之前加载其轨道:

[avAsset loadValuesAsynchronouslyForKeys:@"tracks" completionHandler: ^{
 AVKeyValueStatus status = [avAsset statusOfValueForKey:@"tracks" error:nil];
 if (status == AVKeyValueStatusLoaded) { 
     // Asset is ready now

 }
}];

关于ios - trackWithMediaType 有时返回 0 首轨道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38439299/

相关文章:

objective-c - 将 NSMutableDictionary 变量设置为 NSDictionary

ios - NSURLRequest 在 iphone 5s 和更新版本上给出正确结果但在 iphone 4s 和 5 上失败

iOS Facebook SDK v2.0 - 读取另一个用户的公共(public)数据

ios - 是否可以将 `marshal` 数据放入 Realm 对象中?

objective-c - 无法移动我的 UIScrollView

iphone - 如何陈述 'animation stop animating'的命令?

ios - 如何使用 Swift 从 CoreData sqlite 表中获取特定行数据

ios - AVPlayer 无法将类型的值分配给类型

iphone - 从 NSData 在 iPhone 上计算校验和

iphone - 加载桌面版网站