我使用AVPlayerLooper在AVPlayer中循环视频。这个视频实际上是一个AVComposition,它融合了两个音频轨道和一个视频轨道。
我在作文中应用了两个音频输入参数,一个用于每个音轨来管理各自的音量(使用setVolume()方法)。还请注意,其中一个音频音轨还具有一个tap处理器来应用一些音频过滤器,使用audiomix输入参数内的专用属性。
一切似乎都很好,但我注意到这卷书有一个问题:
第一个循环很好,并呈现预期的卷,但下一个循环的卷似乎是随机的,一个循环位于预期的卷(假设setVolume()中为4.0 ),另一个为默认的(1.0)。
注意,如果我在一个音量低于预期的循环中静音和解除AVPlayer,则卷返回到它的配置值和期望值。
请注意,使用AVAssetExportSession导出文件中的相同组合(从任何活套中导出)都是很好的,卷总是与预期的一样。
,你有什么建议可以帮我解决这个问题吗?
发布于 2018-12-21 00:29:13
这方面的一切听起来都像是一个bug (即第一个循环工作,AVAssetExportSession工作),加上将AVMutableAudioMixInputParameters的音量设置为文档中的0,1范围之外的值,听起来像是可能引发奇怪行为的事情,但是将MTAudioProcessingTap创建标志从kMTAudioProcessingTapCreationFlag_PostEffects更改为kMTAudioProcessingTapCreationFlag_PreEffects似乎解决了这个问题,或者至少解决了这个问题。
在头文件中:
kMTAudioProcessingTapCreationFlag_PreEffects表示在任何效果之前插入处理龙头。kMTAudioProcessingTapCreationFlag_PostEffects表示在任何效果之后插入处理龙头。
我对此的解读是,这两个标志只会改变谁第一次接触音频: tap还是AVAudioMix inputParameters (inputParameters没有得到特殊的优先级标志,所以我假设它们是按数组顺序应用的?)。所有这些都没有说明混合配置是在某个时间点丢弃的,所以我想pre只是碰巧让您避免了错误的、不愉快的代码路径。
因此,总之,我希望这不是一个问题,你应用音量控制后,你的水龙头。如果是的话,就把音量放进你的水龙头里。
但是,伙计,AVPlayerLooper,AVComposition和MTAudioProcessingTap之间的一种讨厌的互动?啊呀。在API设计中,标志始终是一个危险的标志。
https://stackoverflow.com/questions/53857963
复制相似问题