【问题标题】:Presentation time of samples quickly grows larger than total duration样本的呈现时间迅速增长大于总持续时间
【发布时间】:2014-01-25 03:07:37
【问题描述】:

我正在使用 MediaCodec 解码音轨。我的解码类可以很好地播放音频。我正在尝试使用总曲目持续时间和总播放时间在 SeekBar 中显示曲目的进度。我有两个 long,一个以微秒为单位记录曲目的总持续时间,另一个以微秒为单位记录曲目的总播放时间。

我遇到的问题是播放时长很快变得大于曲目的总时长。我不明白我哪里出错了。

解码类中的长声明:

private long durationUs; //track duration in us
private volatile long currentTimeUs; //total played duration thus far

确定 ctor 中的总持续时间:

extractor = new MediaExtractor();
extractor.setDataSource(fullPath);

format = extractor.getTrackFormat(0);
String mime = format.getString(MediaFormat.KEY_MIME);
durationUs = format.getLong(MediaFormat.KEY_DURATION);

我将输入样本的时间添加到 currentTimeUs 的方法:

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();
        }
    }
}

【问题讨论】:

    标签: android android-mediacodec mediaextractor


    【解决方案1】:

    getSampleTime()返回的时间是一个时间戳,所以我们必须从上一次减去这个时间。

    presentationTimeUs = extractor.getSampleTime();
    currentTimeUs += presentationTimeUs - lastPresentationTime;
    lastPresentationTime = presentationTimeUs;
    

    【讨论】:

    • 或者简单地将currentTimeUs 设置为presentationTimeUs :)
    猜你喜欢
    • 1970-01-01
    • 2021-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-30
    • 2012-01-09
    • 1970-01-01
    相关资源
    最近更新 更多