AVPlayerLooper、带有 AVMutableAudioMixInputParameters 的 AVComposition:音量在循环之间不稳定
AVPlayerLooper, AVComposition with AVMutableAudioMixInputParameters : volume is instable between loops
我使用 AVPlayerLooper 在 AVPlayer 中循环播放视频。
该视频实际上是一个 AVComposition,合并了两个音轨和一个视频轨。
我在合成上应用了两个 audiomix 输入参数,一个用于每个音轨以管理它们各自的音量(使用 setVolume() 方法)。
另请注意,其中一个音轨还有一个抽头处理器来应用一些音频过滤器,使用 audiomix 输入参数中的专用 属性。
似乎一切正常,但我注意到音量有问题:
第一个循环很好并呈现预期音量,但下一个循环的音量似乎是随机的,一个循环处于预期音量(假设 setVolume() 中的 4.0),另一个是默认的 (1.0).
请注意,如果我在音量低于预期的循环中播放时将 AVPlayer 静音和取消静音,音量会恢复到其配置值和预期值。
请注意,使用 AVAssetExportSession 在文件中导出相同的合成(从任何循环器中导出)效果很好,音量始终符合预期。
你有什么建议可以帮助我解决这个问题吗?
关于这一切听起来像是一个错误(即第一个循环有效,AVAssetExportSession
有效),加上将 AVMutableAudioMixInputParameters
的音量设置为记录的 [0, 1] 范围之外的值听起来像这种事情可能会引发奇怪的行为,但是将 MTAudioProcessingTap
创建标志从 kMTAudioProcessingTapCreationFlag_PostEffects
更改为 kMTAudioProcessingTapCreationFlag_PreEffects
似乎可以解决或至少解决这个问题。
来自头文件:
kMTAudioProcessingTapCreationFlag_PreEffects
Signifies that the processing tap is inserted before any effects.
kMTAudioProcessingTapCreationFlag_PostEffects
Signifies that the processing tap is inserted after any effects.
我对此的理解是,这两个标志只会改变谁先听到音频:点击或 AVAudioMix
inputParameters
(inputParameters
没有特殊优先权标志,所以我假设它们是按数组顺序应用的?)。所有这些都没有暗示混合配置在某个时间点被丢弃,所以我猜 pre-fx 恰好让你避免了错误的、不愉快的代码路径。
总而言之,我希望您在点击后应用音量控制不会有问题。如果是,只需在水龙头内自己施加音量。
但是,伙计,AVPlayerLooper
、AVComposition
和 MTAudioProcessingTap
之间有讨厌的互动吗?哎呀。在 API 设计中,旗帜始终是红旗。
我使用 AVPlayerLooper 在 AVPlayer 中循环播放视频。 该视频实际上是一个 AVComposition,合并了两个音轨和一个视频轨。
我在合成上应用了两个 audiomix 输入参数,一个用于每个音轨以管理它们各自的音量(使用 setVolume() 方法)。 另请注意,其中一个音轨还有一个抽头处理器来应用一些音频过滤器,使用 audiomix 输入参数中的专用 属性。
似乎一切正常,但我注意到音量有问题:
第一个循环很好并呈现预期音量,但下一个循环的音量似乎是随机的,一个循环处于预期音量(假设 setVolume() 中的 4.0),另一个是默认的 (1.0).
请注意,如果我在音量低于预期的循环中播放时将 AVPlayer 静音和取消静音,音量会恢复到其配置值和预期值。
请注意,使用 AVAssetExportSession 在文件中导出相同的合成(从任何循环器中导出)效果很好,音量始终符合预期。
你有什么建议可以帮助我解决这个问题吗?
关于这一切听起来像是一个错误(即第一个循环有效,AVAssetExportSession
有效),加上将 AVMutableAudioMixInputParameters
的音量设置为记录的 [0, 1] 范围之外的值听起来像这种事情可能会引发奇怪的行为,但是将 MTAudioProcessingTap
创建标志从 kMTAudioProcessingTapCreationFlag_PostEffects
更改为 kMTAudioProcessingTapCreationFlag_PreEffects
似乎可以解决或至少解决这个问题。
来自头文件:
kMTAudioProcessingTapCreationFlag_PreEffects
Signifies that the processing tap is inserted before any effects.
kMTAudioProcessingTapCreationFlag_PostEffects
Signifies that the processing tap is inserted after any effects.
我对此的理解是,这两个标志只会改变谁先听到音频:点击或 AVAudioMix
inputParameters
(inputParameters
没有特殊优先权标志,所以我假设它们是按数组顺序应用的?)。所有这些都没有暗示混合配置在某个时间点被丢弃,所以我猜 pre-fx 恰好让你避免了错误的、不愉快的代码路径。
总而言之,我希望您在点击后应用音量控制不会有问题。如果是,只需在水龙头内自己施加音量。
但是,伙计,AVPlayerLooper
、AVComposition
和 MTAudioProcessingTap
之间有讨厌的互动吗?哎呀。在 API 设计中,旗帜始终是红旗。