【问题标题】:AVPlayerLooper, AVComposition with AVMutableAudioMixInputParameters : volume is instable between loopsAVPlayerLooper,带有 AVMutableAudioMixInputParameters 的 AVComposition :循环之间的音量不稳定
【发布时间】:2018-12-19 19:26:34
【问题描述】:

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

我在合成上应用了两个混音输入参数,一个用于每个音轨来管理它们各自的音量(使用 setVolume() 方法)。 另请注意,其中一个音轨还有一个抽头处理器来应用一些音频过滤器,使用 audiomix 输入参数中的专用属性。

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

第一个循环很好,可以渲染预期的音量,但是下一个循环的音量似乎是随机的,一个循环在预期的音量(比如说 setVolume() 中的 4.0),另一个在默认 (1.0)。

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

请注意,使用 AVAssetExportSession 在文件中导出相同的组合(因此从任何循环器中导出)效果很好,音量始终如预期。

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

【问题讨论】:

    标签: ios avplayer avmutablecomposition avplayerlooper


    【解决方案1】:

    这一切听起来像是一个错误(即第一个循环有效,AVAssetExportSession 有效),加上将 AVMutableAudioMixInputParameters 的音量设置为文档 [0, 1] 范围之外的值听起来像是可以引发奇怪的行为,但是将 MTAudioProcessingTap 创建标志从 kMTAudioProcessingTapCreationFlag_PostEffects 更改为 kMTAudioProcessingTapCreationFlag_PreEffects 似乎可以解决或至少解决此问题。

    来自头文件:

    kMTAudioProcessingTapCreationFlag_PreEffects 表示在任何效果之前插入处理抽头。
    kMTAudioProcessingTapCreationFlag_PostEffects 表示在任何效果之后插入处理抽头。

    我对此的解读是,这两个标志只会改变谁先听到音频:点击或AVAudioMixinputParametersinputParameters 没有特殊的优先标志,所以我假设它们应用于数组顺序?)。所有这一切都表明混合配置在某个时间点被丢弃,所以我猜 pre-fx 恰好可以让你避免错误、不愉快的代码路径。

    因此,总而言之,我希望您在点击之后 应用音量控制不会有问题。如果是这样,只需在水龙头内应用音量即可。

    但是,伙计,AVPlayerLooperAVCompositionMTAudioProcessingTap 之间的互动很糟糕?哎呀。在 API 设计中,标志始终是一个危险信号。

    【讨论】:

    • 太棒了!将表单 PostEffects 更改为 PreEffects «已修复»我的问题。谢谢
    猜你喜欢
    • 1970-01-01
    • 2019-05-04
    • 2018-08-15
    • 1970-01-01
    • 1970-01-01
    • 2020-10-20
    • 1970-01-01
    • 1970-01-01
    • 2018-01-16
    相关资源
    最近更新 更多