Iphone 将AVURLAsset的音频传输切换到多个audio类型的AvassetTrack

Iphone 将AVURLAsset的音频传输切换到多个audio类型的AvassetTrack,iphone,ios,avplayer,avaudiosession,avurlasset,Iphone,Ios,Avplayer,Avaudiosession,Avurlasset,我有一个AVURLAsset,有多个音频类型的AvassetTrack。我想能够允许用户通过触摸按钮在这些不同的音频曲目之间切换。可以打开和关闭第一首曲目的音量,但当音量设置为1.0时,不会听到其他曲目的声音 下面是调整曲目音量的代码(sender是一个UIButton,标签设置为audioTracks中资产的索引) 我需要做些什么才能使所需的曲目成为活动曲目吗?确定发现问题。与上述代码无关,因为这可以正常工作。问题是未启用除第一首曲目以外的音频Avassettrack。要启用此功能,必须使用A

我有一个AVURLAsset,有多个音频类型的AvassetTrack。我想能够允许用户通过触摸按钮在这些不同的音频曲目之间切换。可以打开和关闭第一首曲目的音量,但当音量设置为1.0时,不会听到其他曲目的声音

下面是调整曲目音量的代码(sender是一个UIButton,标签设置为audioTracks中资产的索引)


我需要做些什么才能使所需的曲目成为活动曲目吗?

确定发现问题。与上述代码无关,因为这可以正常工作。问题是未启用除第一首曲目以外的音频Avassettrack。要启用此功能,必须使用AVMutableComposition重新创建资产:

NSURL *fileURL = [[NSBundle mainBundle]
                  URLForResource:@"movie" withExtension:@"mp4"];

AVURLAsset *asset = [AVURLAsset URLAssetWithURL:fileURL options:nil];

AVMutableComposition *composition = [AVMutableComposition composition];

AVMutableCompositionTrack *compositionVideoTrack = [composition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid];
NSError* error = NULL;

[compositionVideoTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero,asset.duration) 
                               ofTrack:[[asset tracksWithMediaType:AVMediaTypeVideo]objectAtIndex:0] 
                                atTime:kCMTimeZero
                                 error:&error];

NSArray *allAudio = [asset tracksWithMediaType:AVMediaTypeAudio];
for (int i=0; i < [allAudio count]; i++) {
    NSError* error = NULL;
    AVAssetTrack *audioAsset = (AVAssetTrack*)[allAudio objectAtIndex:i];

    AVMutableCompositionTrack *compositionAudioTrack = [composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];
    [compositionAudioTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero,asset.duration) 
                                   ofTrack:audioAsset
                                    atTime:kCMTimeZero
                                     error:&error];

    NSLog(@"Error : %@", error);

}
NSURL*fileURL=[[NSBundle mainBundle]
URLForResource:@“movie”带扩展名:@“mp4”];
AVURLAsset*asset=[AVURLAsset URLAssetWithURL:fileURL选项:nil];
AVMutableComposition*composition=[AVMutableComposition];
AVMutableCompositionTrack*compositionVideoTrack=[composition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_无效];
n错误*错误=NULL;
[compositionVideoTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero,asset.duration)
ofTrack:[[asset tracksWithMediaType:AVMediaTypeVideo]对象索引:0]
时间:kCMTimeZero
错误:&错误];
NSArray*allAudio=[asset tracksWithMediaType:AVMediaTypeAudio];
对于(int i=0;i<[allAudio count];i++){
n错误*错误=NULL;
AVAssetTrack*audioAsset=(AVAssetTrack*)[allAudio objectAtIndex:i];
AVMutableCompositionTrack*compositionAudioTrack=[CompositionAddMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_无效];
[compositionAudioTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero,asset.duration)
ofTrack:audioAsset
时间:kCMTimeZero
错误:&错误];
NSLog(@“错误:%@”,错误);
}

非常感谢!这帮了大忙!谢谢,谢谢,谢谢!!这非常有用!
NSURL *fileURL = [[NSBundle mainBundle]
                  URLForResource:@"movie" withExtension:@"mp4"];

AVURLAsset *asset = [AVURLAsset URLAssetWithURL:fileURL options:nil];

AVMutableComposition *composition = [AVMutableComposition composition];

AVMutableCompositionTrack *compositionVideoTrack = [composition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid];
NSError* error = NULL;

[compositionVideoTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero,asset.duration) 
                               ofTrack:[[asset tracksWithMediaType:AVMediaTypeVideo]objectAtIndex:0] 
                                atTime:kCMTimeZero
                                 error:&error];

NSArray *allAudio = [asset tracksWithMediaType:AVMediaTypeAudio];
for (int i=0; i < [allAudio count]; i++) {
    NSError* error = NULL;
    AVAssetTrack *audioAsset = (AVAssetTrack*)[allAudio objectAtIndex:i];

    AVMutableCompositionTrack *compositionAudioTrack = [composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];
    [compositionAudioTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero,asset.duration) 
                                   ofTrack:audioAsset
                                    atTime:kCMTimeZero
                                     error:&error];

    NSLog(@"Error : %@", error);

}