mediaCodec flush不会返回

时间:2018-01-09 16:26:40

标签: android mediacodec

我正在使用Android解码视频,并在显示之前对音频部分应用一些处理。为了确保两个流都是同步的,我正在使用MediaSync对象。 当我收到BUFFER_FLAG_END_OF_STREAM标志时,我想循环播放视频。我有一个“seekTo”函数来做到这一点(我当然称之为msec = 0):

       public void seekTo(int msec) throws IllegalStateException {
        boolean restart = true;
        if (isPause) {
            restart = false;
        }
        isPause = true;
        mediaSync.setPlaybackParams(new PlaybackParams().setSpeed(0.f));

        synchronized (mVideoLock) {
            if (mVideoExtractor != null) {
                Log.d(TAG, "Loop video");
                mVideoExtractor.seekTo(msec * 1000, SEEK_TO_CLOSEST_SYNC);
                mVideoDecoder.flush();
            }
        }
        synchronized (mAudioLock) {
            if (mAudioExtractor != null) {
                mAudioExtractor.seekTo(msec * 1000, SEEK_TO_CLOSEST_SYNC);
                mAudioDecoder.flush();

                mAudioTrack.pause();
                mAudioTrack.flush();
                mAudioTrack.setPlaybackHeadPosition(0);
                mAudioTrack.play();
            }
        }

    mediaSync.setPlaybackParams(new PlaybackParams().setSpeed(1.f));
    if (restart) {
        isPause = false;
    }

如果'isPause'为真,我在调用onOutputBufferAvailable(...)时不做任何动作。

我的问题是我从未通过“mVideoDecoder.flush()”调用回来。所以我的视频停止了。 任何提示? :)

0 个答案:

没有答案