Android MediaPlayer.getCurrentPosition()在播放internet广播时始终返回0
我用Android MediaPlayer.getCurrentPosition()在播放internet广播时始终返回0,android,android-mediaplayer,Android,Android Mediaplayer,我用MediaPlayer打开一个在线音频AAC流。无线电服务器允许收听URL中带有特殊参数的广播存档 http://extstreamer800.moskva.fm/stream/7881/1425837912.0?format=aac&hash=c4f64a41d00dafd3c0c7b989d12b3fec (hash将很快过期,导致URL无效。可以从以下位置的在线播放器获取新的URL) 我的程序有一个文本字段,应该包含当前位置。我定期调用player.getCurrentPos
MediaPlayer
打开一个在线音频AAC
流。无线电服务器允许收听URL中带有特殊参数的广播存档
http://extstreamer800.moskva.fm/stream/7881/1425837912.0?format=aac&hash=c4f64a41d00dafd3c0c7b989d12b3fec
(hash
将很快过期,导致URL无效。可以从以下位置的在线播放器获取新的URL)
我的程序有一个文本字段,应该包含当前位置。我定期调用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();
}
我将回答而不是评论,因为这不适合作为评论。 根据问题,您正在使用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
变量
另一个原因可能是模拟器。您是否在真实设备上尝试了解决方案?您是否可以共享媒体播放器的初始化?您是否也尝试了真实设备?