Bee大前端 2015-05-14 01:31 采纳率: 0%
浏览 3207

如何获取mediaplayer播放网络音频时的缓存?

如题:做一款音乐播放器,如何取出网络音频的缓存呢?mediaplayer貌似是取不出来了,
audiotrack貌似可以,但是不知道怎么做,大家有什么方法么?其实我就是想播放过一次
的音频可以缓存到本地,下次播放的时候可以不用再次去请求网络数据流,去缓存了

  • 写回答

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"); // 使用本地缓存
    

    以上代码中的cachePolicymNetworkDataSource都是MediaPlayer类的一部分,用于控制缓存行为和网络数据源的管理。

    评论

报告相同问题?