我正在制作一个媒体播放器应用程序,其中我有一个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/
任何帮助将不胜感激。 感谢
答案 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秒或更长时间才能结束第一个缓冲区......
如何放慢速度,以便尽快开始播放歌曲......