当前位置: 首页 > 知识库问答 >
问题:

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

韶硕
2023-03-14

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

使用 AV 播放器播放多个音频文件


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

- (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的每个实例时,是否需要做一些事情,以便声音混合而不会出现故障?

共有2个答案

李景天
2023-03-14

我终于明白问题出在哪里了。我正在编写一个应用程序,其中我使用AVMutableAudioMixInputParameters类来调整音量,并尝试使用该类通过在每个样本的基础上上下移动音量来标准化音频。

虽然这种方法在只有几个音量斜坡时有效,但斜坡的应用似乎发生在缓冲音频的同一线程上,所以当我使用太多(

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

拓拔奇
2023-03-14

这可能是软件编码器启动的结果。当软件编码器尝试播放第二个声音剪辑时,您会看到内存出现相当大的峰值。看看苹果文档部分“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 的“音频混音器(混音器主机)”

 类似资料:
  • 问题内容: 我正在尝试使用2个AVPlayer实例播放多个音频文件,但是其中一个播放器停止了几分之一秒,而不是同时播放所有音频文件。该程序的逻辑如下: 将从我的数据库流式传输音频文件。就其本身而言,玩起来很完美。 播放当前正在播放的项目的计数。计数是一个1到8的序列,对于每个数字,我正在本地存储/设置一个.wav文件,例如1.wav,2.wav … 8.wav。 当的当前时间是某个时间时,将被触发

  • 我在带有的游戏中播放音效(WAV文件)。但是,有2秒的效果并没有完全播放,只是其中的一部分。如果我添加,那么声音会正确播放多次,即整个2秒。出了什么问题,如何修复?

  • 我有一个网页,提供通过手机动态下载mp3文件。我想添加一个功能,在下载文件之前,有人可以通过他们的台式机来收听这首歌。 我需要做什么?

  • 音频的加载方式请参考:声音资源 使用 AudioSource 组件播放 在 层级管理器 上创建一个空节点 选中空节点,在 属性检查器 最下方点击 添加组件 -> 其他组件 -> AudioSource 来添加 AudioSource 组件 将 资源管理器 中所需的音频资源拖拽到 AudioSource 组件的 Clip 中,如下所示: 然后根据需要对 AudioSource 组件的其他参数项进行设

  • 安装Flutter包时遇到错误= 我使用的是颤振4.2.2; 错误: kotlin. Unit类使用不兼容的静态编程语言版本编译。其元数据的二进制版本为1.5.1,预期版本为1.1.15。 在连续3天试图找到解决方案后,我现在遇到了这个错误。 错误2: Android Studio在运行Gradle时使用以下JDK位置://C:\Program Files\Android\Android Stud

  • 本文向大家介绍java实现音频文件播放功能,包括了java实现音频文件播放功能的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了java实现音频文件的播放功能的具体代码,供大家参考,具体内容如下 实现思路 1、首先获取音频文件的地址,然后通过IO流读取音频文件,加缓冲区,实现Player类的对象。 2、Player类主要用于播放器的初始化,以及通过它来实现一些音视频文件的播放,这个类需