Dar*_*usL 8 audio android media-player
我正在使用SeekBar来显示音频文件的进度以及寻找某个时间.为了更新,我使用Runnable,每隔一秒左右在MediaPlayer上调用getCurrentPosition().每次发生这种情况都会导致音频中出现少量延迟.因为我经常打电话,所以在玩东西时我会发现非常明显的口吃.如果它是相关的,我正在使用setAudioStreamType(AudioManager.STREAM_MUSIC),文件格式是mp4,而AAC音频(没有视频),我正在使用Android 2.3.4.有没有办法通过getCurrentPosition()获得良好的音频,还是我必须实现自己的进度计算?
Runnable:
private Runnable mUpdateTask = new Runnable(){
@Override
public void run() {
mSeekBar.setProgress((int) (mPlayer.getCurrentPosition() * 100 / mArrayAdapter.getRecording(mPlayingId).mDuration));
mHandler.postDelayed(mUpdateTask, 999);
}
};
Run Code Online (Sandbox Code Playgroud)
我有相同的问题或类似的问题。
当我mMediapPlayer.getCurrentPosition()在TimerTask中用于更新SeekBar时,我听到了诸如回声之类的声音问题,但实际上问题并不存在。
问题是我也使用SeekBar OnSeekBarChangeListener进行手动搜索,但是发生的是从TimerTask中更新seekBar也触发了侦听器,监听器确实这样做了mp.seekTo(progress),这导致mp再次返回到该位置。
我已经通过使用fromUser此处建议的参数来修复它,仅当seekBar手动更改时才进行查找。
这是我的示例代码:
TimerTask:
public void initializeTimerTask() {
mTimerTask = new TimerTask() {
public void run() {
int progress = mp.getCurrentPosition()/1000;
runOnUiThread(new Runnable() {
@Override
public void run() {
mSeekBar.setProgress(progress);
tvDuration.setText(DateUtils.formatElapsedTime(progress));
}
});
}
};
}
Run Code Online (Sandbox Code Playgroud)
听众:
mSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if(mp != null && fromUser){
mp.seekTo(progress * 1000);
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
Run Code Online (Sandbox Code Playgroud)
van*_*dzi -3
我用这个方法来计算进度'
public static int getProgressPercentage(long currentDuration,
long totalDuration) {
Double percentage = (double) 0;
long currentSeconds = (int) (currentDuration / 1000);
long totalSeconds = (int) (totalDuration / 1000);
// calculating percentage
percentage = (((double) currentSeconds) / totalSeconds) * 100;
// return percentage
return percentage.intValue();
}
Run Code Online (Sandbox Code Playgroud)
注意:mPlayer.getCurrentPosition() 不准确。报告了一些错误。我遇到的问题是当前位置高于总持续时间。
| 归档时间: |
|
| 查看次数: |
3262 次 |
| 最近记录: |