如题:做一款音乐播放器,如何取出网络音频的缓存呢?mediaplayer貌似是取不出来了,
audiotrack貌似可以,但是不知道怎么做,大家有什么方法么?其实我就是想播放过一次
的音频可以缓存到本地,下次播放的时候可以不用再次去请求网络数据流,去缓存了
如何获取mediaplayer播放网络音频时的缓存?
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
你知我知皆知 2024-08-03 21:19关注以下回答参考 皆我百晓生、券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。
要从MediaPlayer中获取缓存,您需要调用
setCachePolicy()方法,并设置相应的缓存策略。以下是一个示例:MediaPlayer mp = new MediaPlayer(); mp.setDataSource("http://example.com/audio.mp3"); mp.prepare(); // 设置缓存策略 mp.setCachePolicy(CachePolicy.NORMAL);这里我们设置了缓存策略为
NORMAL,这意味着如果文件已经存在于本地磁盘上,那么就直接使用它,而不需要再次下载。然后,您可以像之前一样在播放过程中调用
getBuffered()方法来获取缓冲区的信息。BufferedFrame[] frames = mp.getBufferedFrames(); if (frames != null) { // 获取当前帧 BufferedFrame frame = frames[0]; int position = frame.getPosition(); // ... }注意,这个方法返回的是一个数组,其中包含了所有可用的缓冲帧。您可以遍历这个数组以获取具体的位置信息。
如果您希望在播放过程中保持对网络数据的访问(例如,当用户暂停或停止播放时),则可能需要在
prepare()方法之后重置mNetworkDataSource字段,以便每次播放时都可以从网络开始。mp.setDataSource("http://example.com/audio.mp3"); mp.prepare(); // 重置mNetworkDataSource mp.setDataSource("file:///path/to/your/file.mp3"); // 使用本地缓存以上代码中的
cachePolicy和mNetworkDataSource都是MediaPlayer类的一部分,用于控制缓存行为和网络数据源的管理。解决 无用评论 打赏 举报