在iOS9中调整AVAudioMix卷属性无效

时间:2015-09-21 14:44:40

标签: avplayer ios9

我有一个应用程序,它通过AVMutableComposition将本地文件加载到avPlayer中,它可能有多达6个音频和视频轨道作为合成的一部分。

我有一个UISlider,用于调整播放器中每个音轨的音量。

以下是用于更新卷的代码。

- (void)updateVolumeForTake:(Take *)take
{    
    NSInteger trackID = // method that gets trackID

    AVMutableAudioMix *audioMix = self.player.currentItem.audioMix.mutableCopy;
    NSMutableArray *inputParameters = audioMix.inputParameters.mutableCopy;

    AVMutableAudioMixInputParameters *audioInputParams = [inputParameters filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:kTrackIdPredicate, trackID]].firstObject;

   [audioInputParams setVolume:myNewVolumeFloat atTime:myDesiredTime];

    audioMix.inputParameters = inputParameters;

    AVPlayerItem *playerItem = self.player.currentItem;
    playerItem.audioMix = audioMix;
}

这是目前在appStore中存在并且自iOS6以来一直没有问题。 在运行iOS9的设备上,上述内容完全不再有效。我查看了发行说明,虽然有一些提到AVFoundation,但我没有看到有关AVAudioMix的任何内容。我已经搜索过,并没有找到其他任何人解决此问题。

我还尝试创建一个只有AVPlayer和UISlider的新项目,我看到了同样的行为。

我的问题如下,还有其他人遇到过这个问题吗? 有人知道与此相关的已知错误吗?

1 个答案:

答案 0 :(得分:5)

我找到了一个解决方案,但不幸的是不是一个确切的原因。

我不能说我完全理解为什么这解决了我的问题,但这是解决方案,并尝试解释为什么它解决了我遇到的问题。

- (void)updateVolumeForTake:(Take *)take
{

    AVMutableAudioMix *audioMix = [AVMutableAudioMix audioMix];
    NSMutableArray *inputParameters = [self.inputParameters filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:kNotTrackIdPredicate, myTrackID]].mutableCopy;

    AVCompositionTrack *track = (AVCompositionTrack *)[self.composition trackWithTrackID:myTrackID];
    AVMutableAudioMixInputParameters *audioInputParams = [AVMutableAudioMixInputParameters audioMixInputParametersWithTrack:track];
    [audioInputParams setVolume:myDesiredVolume atTime:kCMTimeZero];

    [inputParameters addObject:audioInputParams];
    audioMix.inputParameters = inputParameters;

    AVPlayerItem *playerItem = self.player.currentItem;
    playerItem.audioMix = audioMix;

    self.inputParameters = inputParameters;
}

正如您在上面所看到的,我已经停止使用我的AVAudioMix及其inputParameters的可变副本,而是为inputParameters创建了一个新的AVAudioMix和NSMutableArray。新的inputParameters数组是现有inputParameters的一个副本(从属性" self.inputParameters'引用)减去与我想要更改的轨道匹配的轨道。

其次,我使用我希望编辑音量的音轨创建AVMutableAudioMixInputParameters的新实例(之前我正在引用具有匹配trackID的现有参数并修改它们)。我编辑它将它添加到我的新数组并使其成为currentItem的音频混合。

我再也无法确定为什么会修复它,但它确实对我有用,我想知道当我重新分配playerItem的audioMix时,是否所有可变副本都没有被发现。为什么我没有听到音量的任何变化。 (虽然这看起来很可疑)。

无论如何,我的问题已得到修复,我希望这可以帮助任何有类似问题的人。