android获取音频流什么格式,android – 如何获取音频流的持续时间,并从任何点继续音频流...

描述:

我有一个音频播放器的以下代码.我可以通过点击进度栏(0到to-mediaplayer.getDuration())之间的任何时间段继续音频播放.它对于音频播放工作正常.

音频流中的问题:

>当我从互联网服务器(比如s3-bucket)流式传输音频文件时

它开始流正确.

>但是mediaPlayer.getDuration()和mediaPlayer.getCurrentPosition()

返回错误的值.在流媒体开始

mediaPlayer.getCurrentPosition()返回5小时.

>由于这个原因,我无法继续音频流

流(0到流持续时间)的指定持续时间.

问题:

>如何获取音频流的持续时间

>如何从指定的持续时间继续音频流.对于

例如,为10分钟的文件,我想从6开始流式传输

分钟.

码:

public class MyAudioPlayer extends Activity

implements OnClickListener{

MediaPlayer mediaPlayer = null;

private boolean isPaused=false;

private boolean isStop = true;

String filePath = null;

String productName = null;

ImageButton btnPlay = null;

ImageButton btnPause = null;

ImageButton btnReset = null;

ImageButton btnStop = null;

AudioManager audioManager = null;

SeekBar volControl = null;

SeekBar progressControl = null;

TextView progressText = null;

long durationInMillis = -1;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.ltd_audio_player);

volControl = (SeekBar)findViewById(R.id.player_volume);

progressControl = (SeekBar)findViewById(R.id.player_seekbar);

progressText = (TextView) findViewById(R.id.player_progress_text);

btnPlay = (ImageButton) findViewById(R.id.ic_player_play);

btnPause = (ImageButton) findViewById(R.id.ic_player_pause);

btnReset = (ImageButton) findViewById(R.id.ic_player_reset);

btnStop = (ImageButton) findViewById(R.id.ic_player_stop);

btnPlay.setOnClickListener(this);

btnPause.setOnClickListener(this);

btnReset.setOnClickListener(this);

btnStop.setOnClickListener(this);

filePath = getIntent().getExtras().getString("localPath");

this.setPlayer();

this.resetAndStartPlayer();

}

@Override

protected void onResume() {

super.onResume();

isPaused=false;

progressText.postDelayed(onEverySecond,1000);

}

@Override

protected void onPause() {

super.onPause();

isPaused=true;

}

private void setProgressControl() {

int maxVolume = mediaPlayer.getDuration();

int curVolume = mediaPlayer.getCurrentPosition();

progressControl.setMax(maxVolume);

progressControl.setProgress(curVolume);

progressControl.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

@Override

public void onProgressChanged(SeekBar seekbar,int progress,boolean fromUser) {

mediaPlayer.seekTo(progress);

}

@Override

public void onStartTrackingTouch(SeekBar seekBar) {

// TODO Auto-generated method stub

}

@Override

public void onStopTrackingTouch(SeekBar seekBar) {

// TODO Auto-generated method stub

}

});

}

@Override

public void onClick(View v) {

switch(v.getId()){

case R.id.ic_player_play:

if(isStop==true){

try {

mediaPlayer.prepareAsync();

} catch (Exception e) {

e.printStackTrace();

}

}else{

mediaPlayer.start();

isStop = true;

}

break;

case R.id.ic_player_pause:

mediaPlayer.pause();

break;

case R.id.ic_player_reset:

mediaPlayer.seekTo(0);

break;

case R.id.ic_player_stop:

isStop = true;

progressControl.setProgress(0);

mediaPlayer.stop();

break;

}

}

private void resetAndStartPlayer(){

try {

if(filePath!=null){

mediaPlayer.setDataSource(filePath);

mediaPlayer.prepareAsync();

}

} catch (Exception e) {

e.printStackTrace();

}

}

private void setPlayer(){

getWindow().setFormat(PixelFormat.UNKNOWN);

mediaPlayer = new MediaPlayer();

mediaPlayer.setOnBufferingUpdateListener(new OnBufferingUpdateListener() {

@Override

public void onBufferingUpdate(MediaPlayer mp,int percent) {

progressControl.setSecondaryProgress((progressControl.getMax()/100)*percent);

}

});

mediaPlayer.setOnPreparedListener(new OnPreparedListener() {

@Override

public void onPrepared(MediaPlayer mp) {

mediaPlayer.start();

isStop=false;

durationInMillis = mediaPlayer.getDuration();

MyAudioPlayer.this.setProgressControl();

}

});

mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

}

@Override

protected void onDestroy() {

// TODO Auto-generated method stub

mediaPlayer.release();

super.onDestroy();

}

protected void setProgressText() {

durationInMillis = mediaPlayer.getDuration();

int curVolume = mediaPlayer.getCurrentPosition();

long HOUR = 60*60*1000;

if(progressText!=null){

if(durationInMillis>HOUR){

progressText.setText(String.format("%1$tH:%1$tM:%1$tS",new Date(curVolume))

+" / "+String.format("%1$tH:%1$tM:%1$tS",new Date(durationInMillis)));

}else{

progressText.setText(String.format("%1$tM:%1$tS",new Date(curVolume))

+" / "+String.format("%1$tM:%1$tS",new Date(durationInMillis)));

}

}

}

private Runnable onEverySecond=new Runnable() {

public void run() {

if (mediaPlayer!=null) {

progressControl.setProgress(mediaPlayer.getCurrentPosition());

MyAudioPlayer.this.setProgressText();

}

if (!isPaused) {

progressText.postDelayed(onEverySecond,1000);

}

}

};

}

时间显示在进度条上方.

时间:’当前持续时间’/’总持续时间’

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值