2013-04-29 44 views
2

我正在开发媒体播放器,它应该能够播放来自Internet的音频。正如我注意到的,在播放远程内容时,标准MediaPlayer是相当不稳定的:它经常掉落或停止播放,没有任何理由。另一方面,我想实现媒体缓存。但我还没有找到任何方法从MediaPlayer获取缓冲内容以将其保存在设备的某个位置。播放媒体文件并在同一时间追加

所以,我想为自己实施缓冲并使MediaPlayer只播放本地媒体。我看到的第一种方式是将足够多的媒体下载到文件中,通过MediaPlayer开始播放此文件,并继续下载其余媒体(当没有足够的媒体下载并处理其他事件时暂停)。

问题是:可以播放文件并在同一时间追加它?现在我只叫MediaPlayersetDataSource

UPD

IllegalStateException被无效逻辑时引起有IllegalStateExceptions。 MediaPlayer正在播放。

但是另一个问题出现了。

因此,首先下载5%的音轨,MediaPlayer开始播放,播放这5%然后停止播放。这是一种继续玩的方式吗?

开始播放很简单:

private void startPlayback(final File file) { 
    try { 
     FileInputStream fs = new FileInputStream(file); 
     mPlayer.setDataSource(fs.getFD()); 
     mPlayer.prepare(); 
     mPlayer.start(); 

    } catch (IOException e) { 
     Log.e(e); 
    } 
} 

可能存在这种情况下有用的其它流类型?

+0

是你在setDataSource方法之前发布mediaplayer ....因为文件处于下载模式,所以它可能已经被改变了......这就是为什么你得到IllegalstateException – 2013-04-29 08:35:09

+0

谢谢!这是应用程序逻辑问题。没有发布,但类似。现在还有另一个问题 – darja 2013-04-29 09:53:49

回答

0

在某些设备上同时附加和播放文件,不适用于其他设备。所以,这不是一个解决方案。我尝试了很多方法来实现自己的缓冲和回放(请参阅Best practices for audio streaming),并决定使用JellyBean Media API(正如我为JB设备开发的那样)。对于JB之前的设备,这个问题仍然是开放的

+0

你能解释一下如何在JB设备中实现这个功能,如果你已经实现了它? – Bedant 2017-01-20 11:55:33