播放网络电台时,MediaPlayer.getCurrentPosition()始终返回0

时间:2015-03-08 15:49:00

标签: android android-mediaplayer

我使用AAC打开在线音频MediaPlayer信息流。无线电服务器允许使用URL中的特殊参数收听广播存档。

http://extstreamer800.moskva.fm/stream/7881/1425837912.0?format=aac&hash=c4f64a41d00dafd3c0c7b989d12b3fec

hash即将过期,导致网址无效。可以通过http://moskva.fm的在线播放器获取新的

我的程序有一个文本字段,应该包含当前位置。我定期调用player.getCurrentPosition()并将毫秒格式化为字符串。

我注意到当MediaPlayer正在播放持续时间未知的流时,getCurrentPosition()始终返回0.我正在使用AVD 4.4.2进行测试

        try {
            final Handler handler = new Handler();
            final MediaPlayer mediaPlayer = new MediaPlayer();
            mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
            mediaPlayer.setDataSource(getApplicationContext(), Uri.parse("http://extstreamer800.moskva.fm/stream/7881/1425837912.0?format=aac&hash=c4f64a41d00dafd3c0c7b989d12b3fec"));
            mediaPlayer.setOnPreparedListener(new OnPreparedListener(){
                @Override
                public void onPrepared(MediaPlayer mp) {
                    mp.start();
                    handler.postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            Log.e("x", "currentPosition = " + mediaPlayer.getCurrentPosition());
                        }
                    }, 10000);
                }
            });
            mediaPlayer.prepareAsync();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

1 个答案:

答案 0 :(得分:0)

我会回答而不是评论,因为这不适合作为评论。 根据你使用onPrepared回调的问题,是吗? 如果从外部源流式传输,我会这样做:

MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setDataSource(getApplicationContext(), myUri);
mediaPlayer.setOnPreparedListener(new OnPreparedListener(){

@Override
    public void onPrepared(MediaPlayer mp) {
        mp.start();
    }
});
mediaPlayer.prepareAsync();

您似乎没有在此回调中使用mp变量。

另一个原因可能是模拟器。您是否在真实设备上尝试过解决方案?