Поле существует как способ передачи временных меток через систему. Это может повлиять или не повлиять на обработку кадра.
IIRC, начальное использование поля предназначено для видеокадров, захваченных камерой. Включив временную метку с момента захвата кадра, приложение, которое генерирует закодированное видео, может выводить точную метку времени. Если приложение использовало время приема фреймом приложения, вы получите значительное изменение значений времени.
Старые версии Android игнорируют метку времени при отображении фреймов. В Android 4.4 («KitKat») композитор SurfaceFlinger добавил функцию, которая позволяла удерживать или отбрасывать кадры на основе метки времени. Целью этого было упростить A/V-синхронизацию. Это подробно обсуждается в комментариях в Grafika's активности «запланированного свопа», в частности, выше метода doFrame()
.
Короче говоря, целью этой функции было позволить видеоплееру подавать каждый кадр чуть раньше, чтобы он был готов и ожидал в очереди композиций, когда воспроизведение звука достигнет соответствующего времени. Попытка выполнить мелкомасштабную синхронизацию в самом приложении проблематична, когда система становится занятой. (SurfaceFlinger работает с повышенным приоритетом.)
Обеспечение должным образом воспроизводимого воспроизведения, когда приложение спамает весь видеофайл, не было целью. Для обратной совместимости с приложениями, которые поддерживают встроенный PTS с фреймами, и чтобы избежать слишком длинных ларьков, если приложение отправляет отметку времени, которая будет годом в будущем, SurfaceFlinger игнорирует отметки времени, которые не находятся в пределах секунды или около того текущего времени. Таким образом, вам все равно придется ломать кормы, но метки могут помочь избежать киосков и капель.
Итак ... если вы хотите управлять своим собственным воспроизведением видео, вам нужно будет самостоятельно выполнить выход. Вы можете увидеть пример в классе Grafika SpeedControlCallback.