繁体   English   中英

同时播放两个AVPlayer音频文件时出现音频故障

[英]Audio glitch when playing two AVPlayer audio files simultaneously

我有一个iOS应用程序,播放一个AVPlayer的背景音轨,并播放其他声音剪辑“在顶部”与第二个AVPlayer。 (声音片段是从互联网流式传输的,因此需要AVPlayer。)问题是,当第二个AVPlayer开始播放时,它会导致背景AVPlayer停止片刻,类似于此评论中描述的内容:

使用AVPlayer播放多个音频文件


我正在使用这种方法准备音频剪辑:

- (void)prepareAudio:(NSURL *)assetURL {

asset = [AVURLAsset URLAssetWithURL:assetURL options:nil];
playerItem = [AVPlayerItem playerItemWithAsset:asset];
[player replaceCurrentItemWithPlayerItem:playerItem];


[playerItem addObserver:self forKeyPath:@"playbackBufferEmpty" options:NSKeyValueObservingOptionNew context:nil];
[playerItem addObserver:self forKeyPath:@"playbackLikelyToKeepUp" options:NSKeyValueObservingOptionNew context:nil];


[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(playerItemDidReachEnd:)
                                             name:AVPlayerItemDidPlayToEndTimeNotification
                                           object:[player currentItem]];

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(playerItemFailedToReachEnd:)
                                             name:AVPlayerItemFailedToPlayToEndTimeNotification
                                           object:[player currentItem]];
 }

...然后调用[player play]; 当我想听到每个声音。


当我设置音频会话或AVPlayer的每个实例时,我需要做些什么,以便声音在没有故障的情况下融合?

这可能是因为软件编码器开始使用。当软件编码器尝试播放第二个声音片段时,你会看到内存中出现相当大的峰值。 看看苹果文档部分“iOS硬件和软件音频编解码器” http://developer.apple.com/library/ios/#DOCUMENTATION/AudioVideo/Conceptual/MultimediaPG/UsingAudio/UsingAudio.html

“当使用硬件辅助解码时,设备一次只能播放一种支持格式的单个实例。”

另外......“要播放具有最佳性能的多种声音,或者在iPod在后台播放时有效播放声音,请使用线性PCM(未压缩)或IMA4(压缩)音频。”

如果您无法选择可以提供的媒体编解码器,请查看AudioUnit框架以获得更加无缝的混音。 特别是http://developer.apple.com/library/ios/#samplecode/MixerHost/Introduction/Intro.html#//apple_ref/doc/uid/DTS40010210上的“音频混音器(MixerHost)”

我终于弄明白了问题所在。 我正在编写一个应用程序,我正在使用AVMutableAudioMixInputParameters类调整音量,我试图通过在每个样本的基础上向上或向下移动音量来使用此类来标准化音频。

虽然这种方法在只有少量音量斜坡时有效,但似乎斜坡的应用发生在缓冲音频的同一个线程上,所以当我使用太多(> ~1000)它们时,这最终会消耗掉应该忙于缓冲音频的CPU,然后你在音频中有一个ggg-glitch。

我的解决方案是重构我的音量标准化算法,以使用更少的音量斜率来实现同样的目的。 一旦我能够将每组音量斜坡/歌曲降低到大约500左右,我就不再有问题了,音频故障就消失了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM