颤动音频播放延迟
Posted
技术标签:
【中文标题】颤动音频播放延迟【英文标题】:flutter audio play delay 【发布时间】:2019-12-20 13:05:13 【问题描述】:我正在使用 audioplayers
package 播放存储在 Firebase 云存储中的 mp3 音频文件。 android 和 ios 都存在显着延迟,Android 仅稍快一些。此后,我已将所有音频文件移至本地资产。
AudioPlayer audioPlayer = AudioPlayer(mode: PlayerMode.LOW_LATENCY);
play(String url) async
int result = await audioPlayer.play(url);
if (result == 1)
// success
print('success');
就在几天前,我在 iOS Swift 中使用音频播放器进行了测试,并播放了一些来自 firebase 云存储的音频文件,但我并没有因为缓冲而遇到任何明显的延迟,而且速度要快得多。
我需要找到一种方法来解决这个问题,因为我有很多音频文件并且它们需要存储在网络中。大家有没有遇到过类似的问题,有什么好的建议吗?
【问题讨论】:
好吧,this 开放的拉取请求应该可以解决 iOS 上的延迟问题。尚未达到发布版本。还有this关于初始滞后的讨论。最后是this 问题。 你试试缓存? github.com/luanpotter/audioplayers/blob/master/doc/… @om-ha,感谢您提供此信息!所以我现在急切地等待拉取请求被批准和发布! @om-ha,我刚刚对 AudioPlayersPlugin.m 进行了修改,这确实有帮助,您可以将其作为答案,我将其标记为正确。 @DarylWong 感谢您确认这一点。如果您进行了任何其他更改,请随时编辑我的答案。 【参考方案1】:更新
这个second PR 解决了first original PR 的一些缺点。两者都合并到audioplayers的master分支中。
我的 PR 更改是:
playbackRate
始终在 playImmediatelyAtRate
中使用,而不是常量值——最初由库设置为 _defaultPlaybackRate
即 1.0
playImmediatelyAtRate
也被添加到 resume
方法中,而不仅仅是 play
原方案
这是帮助解决 OP 的音频播放延迟的最终代码:
在play
& resume
方法中
AVPlayer *player = playerInfo[@"player"];
float playbackRate = [playerInfo[@"rate"] floatValue];
if (@available(iOS 10.0, *))
[player playImmediatelyAtRate:playbackRate];
else
[player play];
所以调用[player playImmediatelyAtRate:playImmediatelyAtRate:playbackRate]
而不是[player play];
似乎可以解决问题。
到目前为止,它还没有被合并到 pub,仍然是一个开放的first incomplete PR,second PR 也被合并了。
原评论:
this 打开拉取请求应该可以解决 iOS 上的延迟问题。尚未达到发布版本。还有this关于初始滞后的讨论。
【讨论】:
我在audioplayers: ^0.20.1
@om-ha 中面临iOS 延迟问题
我看到你在维护者发表评论后评论了原始问题:Closing this due to reports of this being fixed on newer versions. Feel free to open a new issue in case of this still happening
如果他们没有回复您的评论,请使用 MRE 和一些调试信息和上下文打开一个新问题,以便维护者/社区在您的问题上为您提供帮助。
我只是在播放网络上的音频,扩展名是mp3和wav。 @om-ha以上是关于颤动音频播放延迟的主要内容,如果未能解决你的问题,请参考以下文章
Android native音频:录制播放的实现以及低延迟音频方案