AVPlayerLooper,带有AVMutableAudioMixInputParameters的AVComposition:循环之间的音量不稳定

时间:2018-12-19 19:26:35

标签: ios avplayer avmutablecomposition avplayerlooper

我使用AVPlayerLooper在AVPlayer中循环播放视频。 该视频实际上是将两个音轨和一个视频轨合并的AVComposition。

我在作品上应用了两个audiomix输入参数,每个音轨一个参数来管理它们各自的音量(使用setVolume()方法)。 还要注意,音轨之一还具有抽头处理器,可以使用audiomix输入参数中的private属性来应用一些音频滤波器。

一切似乎都正常,但我注意到音量有问题:

第一个循环很好,可以呈现预期的音量,但是下一个循环的音量似乎是随机的,一个循环处于预期的音量(在setVolume()中为4.0),另一个循环为默认值(1.0)。

请注意,如果我在音量低于预期的循环中播放时对AVPlayer进行静音和取消静音,则音量会恢复为其配置和预期的值。

请注意,使用AVAssetExportSession将相同的合成文件导出到文件中(这样就可以从任何循环播放器中导出)效果很好,音量始终符合预期。

您有任何提示可以帮助我解决此问题吗?

1 个答案:

答案 0 :(得分:1)

关于此的一切听起来都像个错误(viz first loop有效,AVAssetExportSession有效),再加上将AVMutableAudioMixInputParameters的音量设置为已记录的[0,1]范围之外的值,听起来像那种可能引起怪异行为的事物,但是如何将MTAudioProcessingTap创建标志从kMTAudioProcessingTapCreationFlag_PostEffects更改为kMTAudioProcessingTapCreationFlag_PreEffects似乎可以解决或至少可以解决此问题。

来自头文件:

  

kMTAudioProcessingTapCreationFlag_PreEffects           表示在任何效果之前已插入处理水龙头。
      kMTAudioProcessingTapCreationFlag_PostEffects           表示在任何效果之后都插入了处理水龙头。

我的理解是,这两个标志只会更改谁在音频上首先受到叮咬的人:水龙头或AVAudioMix inputParametersinputParameters不会得到特殊的优先标志,因此我假设它们以数组顺序应用?)。所有这些都没有表明在某个特定的时间点会丢弃混合配置,因此我认为pre-fx恰好可以避免出现错误的,不愉快的代码路径。

因此,总而言之,我希望在点击后 应用音量控制不是问题。如果是的话,只需将自己的音量放在水龙头内即可。

但是,伙计,AVPlayerLooperAVCompositionMTAudioProcessingTap之间的互动令人讨厌吗? kes。而且标志在API设计中始终是一个危险信号。