【问题标题】:How to get mp3 file duration Http streamed over Android MediaPlayer如何获取通过 Android MediaPlayer 流式传输的 mp3 文件持续时间 Http
【发布时间】:2010-11-22 11:53:41
【问题描述】:

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

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

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

mediaPlayer.getDuration() 用于获取文件持续时间.. 但在整首歌曲下载完成之前,它并没有给我正确的数据....

这很糟糕。似乎 MediaPlayer 的 getDuration() 方法是根据下载的内容显示持续时间,而不是检查 Mp3 文件的标题.....

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

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

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

【问题讨论】:

    标签: android


    【解决方案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();
    

    【讨论】:

      【解决方案2】:

      您使用的教程很旧。你不应该下载 mp3。您只需将 url 传递给 MediaPlayer,它就会完成所有工作。它会给你正确的持续时间。

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

      【讨论】:

      • 是的,它的工作原理,但它第一次停止缓冲并开始播放歌曲需要 45 秒
      • 11-22 18:20:08.445: DEBUG/PlayerDriver(31): 缓冲 (35) 11-22 18:20:08.565: DEBUG/PlayerDriver(31): 缓冲 (36) 11- 22 18:20:09.765:DEBUG/PlayerDriver(31):缓冲 (37) 11-22 18:20:09.930:WARN/AudioFlinger(31):写入阻塞 51 毫秒 11-22 18:20:11.315:DEBUG/ PlayerDriver(31):缓冲(38)
      • 如何降低缓冲率,以便歌曲可以在 10 秒或更长时间后开始播放
      【解决方案3】:

      在较低的互联网速度下,这种默认缓冲可能需要很长时间... Pocket Journey 教程的缓冲区较小,会立即开始播放歌曲。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-04-03
        • 2013-07-14
        • 2016-03-19
        • 1970-01-01
        • 2015-05-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多