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

Android mediaplayer无尽缓冲

百里光熙
2023-03-14

我正在Android上开发在线流媒体播放器。我发现mediaplayer永远不会停止缓冲!它读取100%的缓冲区,并不断地做一些“事情”,因为流只能被读取一次,没有任何剩余的缓冲区...我看到了

public void onBufferingUpdate(MediaPlayer player, int percent)
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mMediaPlayer.setDataSource(streamUrl);
mMediaPlayer.setOnBufferingUpdateListener(this);
mMediaPlayer.setOnInfoListener(this);
mMediaPlayer.setOnPreparedListener(this);
mMediaPlayer.setOnErrorListener(this);
mMediaPlayer.prepareAsync();

我看到的日志消息:

10-30 08:45:21.169: D/MediaPlayer(13217): Message: MEDIA_BUFFERING_UPDATE(3), ext1=93, ext2=0x0
10-30 08:45:22.169: D/MediaPlayer(13217): Message: MEDIA_BUFFERING_UPDATE(3), ext1=100, ext2=0x0
10-30 08:45:23.169: D/MediaPlayer(13217): Message: MEDIA_BUFFERING_UPDATE(3), ext1=100, ext2=0x0
10-30 08:45:24.172: D/MediaPlayer(13217): Message: MEDIA_BUFFERING_UPDATE(3), ext1=100, ext2=0x0
10-30 08:45:25.172: D/MediaPlayer(13217): Message: MEDIA_BUFFERING_UPDATE(3), ext1=100, ext2=0x0
...

共有1个答案

孟安民
2023-03-14

首先,在不使用时暂停MediaPlayer不是一个好主意。它有时可能起作用,但Android最终会收回这些资源。当你的应用程序不活动的时候不清理是很糟糕的做法。

这就是说,我相信它所做的是维护一个开放的服务器套接字,当它ping时可能会发送缓冲通知,以确保套接字仍然是开放的。HTTP流是一个太简单的协议,无法满足您的要求。但你至少有一个选择让它发挥作用。您可以插入一个代理,允许您同时缓存流和播放。您将不得不巧妙地处理当用户在流完全缓存之前退出时发生的事情,但这是可以工作的。此时,MediaPlayer被还原为本地文件回放,当应用程序再次打开时,您可以停止并找到正确的位置。它提供了一种更好地管理资源和网络通信的手段。

 类似资料:
  • 问题内容: from selenium import webdriver from selenium.webdriver.common.by import By from selenium.common.exceptions import StaleElementReferenceException, TimeoutException from selenium.webdriver.support

  • 无尽的饼干是一款关于饼干制作的模拟年经营游戏,玩法也非常轻松,前期玩家只需要不断点击鼠标来生成饼干,然后随着游戏的推进。 点击开玩 为了制作更多的饼干,玩家可以招募各式各样的饼干制造者来帮助自己完成饼干的生产制作,比如请老奶奶来制作饼干,农场,工厂和异世界的穿越门等等,都可以加大饼干的生产量。          

  • 无尽的进度条是一款玩法独特另类的休闲类游戏。 在此款游戏中,没有华丽的界面,动人的 BGM,甚至几乎没有什么可以操作的内容。无尽的进度条游戏是一种生活的消遣,可以在你疲惫的时候调节你的心情。

  • 问题内容: 我想通过CSS旋转加载图标。 我有一个图标和以下代码: 但这是行不通的。如何使用CSS旋转图标? 问题答案:

  • 无缓存channel 我们首先实现无缓存的Channel: <?php class Channel { // 因为同一个channel可能有多个接收者,使用队列实现,保证调度均衡 // 队列内保存的是被阻塞的接收者协程的控制流,即call/cc的参数,我们模拟的continuation public $recvQ; // 发送者队列逻辑相同 public

  • 我已经在Ubuntu 16.04 x64上安装了Android Studio。启动新项目时,我在