背景
勉強の為、MediaExtractor, MediaCodec等を使い、動画再生を行いたいです。
再生・一時停止は確認できています。
問題
以下のようにMediaExtractor#seekTo のみを使いシークを行うと、巻き戻し時に動画が静止し、音声のみが流れる状態になってしまいました。
java
1 mAudioExtractor.seekTo(timeUs, MediaExtractor.SEEK_TO_PREVIOUS_SYNC); 2 mVideoExtractor.seekTo(timeUs, MediaExtractor.SEEK_TO_PREVIOUS_SYNC);
https://developer.android.com/reference/android/media/MediaCodec#signalEndOfInputStream() より、MediaCodecをflushした方が良さげな記述があった為、
java
1 mAudioExtractor.seekTo(timeUs, MediaExtractor.SEEK_TO_PREVIOUS_SYNC); 2 mVideoExtractor.seekTo(timeUs, MediaExtractor.SEEK_TO_PREVIOUS_SYNC); 3 mSync.flush(); 4 mVideoCodec.flush(); 5 mAudioCodec.flush();
等も試しましたが、ブロック・IllegalStateException・動画のみが高速に流れる等の挙動になってしまいました。
MediaCodecで動画再生を行うサンプルコードは多く簡単に見つかりますが、
シーク操作を行うサンプルコードは見つけられませんでした。
質問
- シーク前後で行うべき処理・正しいflushの方法があればご教授願いします
- MediaExtractor・MediaCodecを使った動画再生のシーク操作のサンプル実装のURL等あれば参考にしたいです
ソース全体はこちらにあります。
あなたの回答
tips
プレビュー