gpt4 book ai didi

Android 媒体播放器音频故障/断断续续仅在较新的设备上

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:43:40 25 4
gpt4 key购买 nike

我有一个相当标准的媒体播放器对象,它在 onCreate 中启动并在我的应用程序中循环播放背景音乐。该文件不是特别大,它是一个 6MB 的 MP3。来自 onCreate:

MediaPlayer mp;
mp = MediaPlayer.create(MainActivity.this, R.raw.lostmexicancity);
mp.setLooping(true);
mp.setVolume(0.4f, 0.4f);
mp.start();

这在我的大多数测试设备上运行良好,包括旧手机、Samsung Galaxy Tab 2 10"平板电脑,甚至 Nexus 4。

不幸的是,我在 Nexus 5 和更新的 Nexus 10 上遇到音频故障/断断续续的问题,这些问题只发生在更新的设备上,通常是在正常播放几秒钟后,而不是立即出现。我的 Nexus 4 和 5 都运行 Android 4.4.4,但问题只发生在 Nexus 5 上。

当我暂停该媒体播放器对象并在短时间内播放另一个播放器对象时(游戏中短时间战斗的战斗音乐),这个问题似乎会加剧,但即使没有这种额外的并发症,也会出现故障。

我了解到较新版本的 Android 会导致 Mediaplayer 出现问题,但我还没有找到解决方法或建议。

是否有任何其他人遇到过此问题可以提出修复或解决方法的建议?感谢您的宝贵时间!

最佳答案

我注意到我的 Android 设备上也出现了这种情况。

我注意到您没有调用 Prepare(),这是播放音频之前的一个重要函数。编辑——只有在使用 new 创建 MediaPlayer 时才需要准备调用,而不是使用内置的 MediaPlayer.Create()。

至于在源之间切换时出现的问题,我建议在您要播放的音频中准确调用 SeekTo() 时间,然后使用 SeekComplete 监听器等待该位置。在评论中,我有一小行 hacky 代码,直到调用开始后才在 mediaPlayer 上设置音量。这似乎减少了卡顿,但您可能会丢失第一小部分音频。

我使用的是 Xamarin Studio C#,但即使您使用的是 Java,同样的方法也应该有效。

MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.SetAudioStreamType (Android.Media.Stream.Music);
mediaPlayer.SetDataSource ("dataSourcePath");

mediaPlayer.Looping = true;

//It is necessary to call prepare after setting the data source
mediaPlayer.Prepare ();

//Ensure the audio has seeked to the position you need
bool seekingComplete = false;
mediaPlayer.SeekComplete += (object sender, EventArgs e) => {
seekingComplete = true;
};

mediaPlayer.SeekTo(0);

//Forces the audio to complete seeking
while(seekingComplete == false)
{
//Here, you just wait 2 milliseconds at a time
//for this buffering and seeking to complete
await Task.Delay(2);
}

mediaPlayer.Start();

//Hacky way to prevent the glitch sound at the start is to set the
//volume after calling start
//mediaPlayer.SetVolume(0.4f, 0.4f);

关于Android 媒体播放器音频故障/断断续续仅在较新的设备上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28033653/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com