0
오디오 트랙을 디코딩하기 위해 MediaCodec을 사용하고 있습니다. 내 디코딩 클래스는 오디오 재생에 적합합니다. 전체 트랙 길이와 총 재생 시간을 사용하여 SeekBar에서 트랙의 진행 상태를 표시하려고합니다. 나는 마이크로 세컨드 단위로 트랙의 총 지속 시간을 기록하는 길이와 마이크로 세컨드 단위로 트랙의 총 재생 시간을 기록하는 길이의 두 가지 길이를 가지고 있습니다.샘플의 프리젠 테이션 시간이 총 재생 시간보다 빠르게 커집니다.
내가 겪고있는 문제는 재생 된 시간이 트랙의 총 재생 시간보다 빨리 커집니다. 내가 어디가 잘못 될지 이해하지 못한다. 내가 currentTimeUs에 입력 샘플의 시간을 추가
extractor = new MediaExtractor();
extractor.setDataSource(fullPath);
format = extractor.getTrackFormat(0);
String mime = format.getString(MediaFormat.KEY_MIME);
durationUs = format.getLong(MediaFormat.KEY_DURATION);
방법 : ctor에 총 지속 시간을 결정
private long durationUs; //track duration in us
private volatile long currentTimeUs; //total played duration thus far
:
긴 디코딩 클래스의 선언
private void advanceInput()
{
boolean sawInputEOS = false;
int inputBufIndex = codec.dequeueInputBuffer(TIMEOUT_US);
if (inputBufIndex >= 0)
{
ByteBuffer dstBuf = codecInputBuffers[inputBufIndex];
int sampleSize = extractor.readSampleData(dstBuf, 0);
long presentationTimeUs = 0;
if (sampleSize < 0)
{
sawInputEOS = true;
sampleSize = 0;
}
else
{
presentationTimeUs = extractor.getSampleTime();
currentTimeUs += presentationTimeUs;
}
codec.queueInputBuffer(inputBufIndex,
0,
sampleSize,
presentationTimeUs,
sawInputEOS ? MediaCodec.BUFFER_FLAG_END_OF_STREAM : 0);
if (!sawInputEOS)
{
extractor.advance();
}
}
}
단순히 "currentTimeUs"를 'presentationTimeUs'로 설정하십시오. :) – b005t3r