如何获取mp3文件持续时间Http通过Android MediaPlayer流式传输

时间:2010-11-22 11:53:42

标签: android

我正在制作一个媒体播放器应用程序,其中我有一个Mp3文件URL,我需要通过Android MediaPlayer进行http流式传输。

现在我的Streaming工作得非常好。歌曲正在下载并成功播放。 但我需要通过ProgressBar / SeekBar显示下载和歌曲进度。 一旦我的初始数据缓冲区中充满了一些歌曲数据,我的流媒体就播放了这首歌。

但我需要知道歌曲的总持续时间,以便我可以相应地设置进度条。 一旦我的媒体播放器开始播放歌曲。我打电话给

mediaPlayer.getDuration()用于获取文件持续时间.. 但它并没有给我正确的数据,直到整首歌被下载....

这很糟糕。因为看起来getDuration()MediaPlayer的方法是在下载内容的基础上显示持续时间,而不是检查Mp3文件的头.......

我正在关注来自以下链接的Http流音频歌曲的教程

http://blog.pocketjourney.com/2008/04/04/tutorial-custom-media-streaming-for-androids-mediaplayer/

任何帮助将不胜感激。 感谢

3 个答案:

答案 0 :(得分:1)

要获取通过http传输mp3文件的持续时间,可以使用MediaPlayer类。

   String url = mediaUrl; // your URL here
    MediaPlayer mediaPlayer = new MediaPlayer();
    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
    try {
        mediaPlayer.setDataSource(url);

        mediaPlayer.prepareAsync();
        mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mediaPlayer) {

                int length = mediaPlayer.getDuration(); // duration in time in millis

                String durationText = DateUtils.formatElapsedTime(length / 1000)); // converting time in millis to minutes:second format eg 14:15 min


                seekbar.setMax(length);// use this to set seekbar length and then update every second

            }
        });


    } catch (Exception e) {
        e.printStackTrace();
    }

要开始播放mp3,您可以致电

 mediaPlayer.start();

别忘了在onDestroy()中调用release()

 mediaPlayer.release();

答案 1 :(得分:0)

您使用的教程非常陈旧。你不应该下载MP3。您可以将网址传递给MediaPlayer,它将完成所有工作。它会给你正确的持续时间。

MediaPlayer mp=new MediaPlayer();
mp.setDataSource(url_to_mp3);
mp.prepare();
mp.start();

答案 2 :(得分:0)

在较低的互联网速度下,此类默认缓存可能需要很长时间...... Pocket Journey教程有一个较小的缓冲区,并立即开始播放歌曲..

默认MediaPlayer需要45秒或更长时间才能结束第一个缓冲区......

如何放慢速度,以便尽快开始播放歌曲......