Неправильные временные метки представления при обратном просмотре через видео MP4

Я использую MediaCodec и MediaExtractor для воспроизведения видео с переменной скоростью, как вперед, так и назад. В коде используется что-то вроде SpeedControlCallback для установки межкадровых пауз – подача поля presentationTimeUs из выходных буферов.

Это работает отлично, в 99% случаев, однако, похоже, что кодек AVC на Samsung S6 обеспечивает неправильное время представления при обратном обращении – они закреплены на любом высоком значении при поиске вперед, если это имеет смысл. Данные в буферах правильны / меняются – это просто не соответствует фиксированному времени представления.

S6 может обрабатывать обратные запросы в файлах MP4 с маркой / ftype avc1 , но другое видео H.264, которое я пробовал ( mp42 , isom ), не работает в 100% случаев. Эти же файлы отлично работают на Samsung S5 и на всех других устройствах, которые я пробовал.

Кодек регистрирует это:

09-15 11:16:21.611 2992-16618/? W/EXYNOS_VIDEO_DEC﹕ sCurrentTimestamp(6002033) is smaller than latestTimeStamp(7001744), uses latestTimeStamp

При каждом обратном SEEK_TO_PREVIOUS_SYNC ( SEEK_TO_PREVIOUS_SYNC ) и предоставит этот ошибочный latestTimestampValue для всех ключевых кадров.

Кто-нибудь сталкивался с аналогичной проблемой с кодеком AVC на Galaxy S6 или может предложить любые (не-хаки) решения?

Solutions Collecting From Web of "Неправильные временные метки представления при обратном просмотре через видео MP4"