Marcas de tiempo de presentación incorrectas al buscar hacia atrás a través de vídeo MP4

Estoy usando MediaCodec y MediaExtractor para reproducir vídeo a tasas variables, tanto hacia delante como hacia atrás. El código está utilizando algo como SpeedControlCallback para establecer pausas inter-frame – alimentando el campo presentationTimeUs desde los buffers de salida.

Esto funciona bien, el 99% del tiempo, sin embargo, parece que el códec AVC en el Samsung S6 ofrece tiempos de presentación incorrecta cuando se busca hacia atrás – están fijados en lo que el valor más alto era cuando se busca hacia adelante, si tiene sentido. Los datos de los buffers son correctos / cambian – simplemente no se corresponde con el tiempo de presentación fijo.

El S6 puede manejar backward busca en archivos MP4 con una marca / ftype de avc1 , pero otros vídeos de marca H.264 que he probado ( mp42 , isom ) no funcionan el 100% del tiempo. Los mismos archivos funcionan bien en un Samsung S5, y en todos los otros dispositivos que he probado.

El códec registra esto:

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

En cada búsqueda hacia atrás ( SEEK_TO_PREVIOUS_SYNC ), y proporcionará esa latestTimestampValue errónea para todos los fotogramas clave.

¿Alguien ha encontrado un problema similar con el códec AVC en el Galaxy S6, o está en condiciones de ofrecer alguna solución (no hacky)?

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.