我正在使用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()”调用回来。所以我的视频停止了。 任何提示? :)