У меня есть декодер Android MediaCodec, настроенный с поверхностью от объекта SurfaceTexture. Декодирование файлов MP4 работает отлично, кадры можно увидеть на устройстве. Но если попытаться перекодировать в новый файл MP4 с помощью MediaMuxer, размер выходного файла равен нулю, потому что SurfaceTexture.getTimestamp() всегда возвращает 0. Каков правильный способ получить время представления кадра в этом случае?Как получить временную метку кадра, когда декодер MediaCodec настроен с выходом SurfaceTexture?
ответ
Марки времени отправляются. Временная метка, которую вы получаете от SurfaceTexture, предоставлена производителем.
При декодировании с помощью MediaCodec вы получаете отметку времени в объекте BufferInfo. Вы либо передаете эту временную метку в кодировщик queueInputBuffer()
напрямую, либо если вы выполняете рендеринг с помощью GLES, вы передаете его eglPresentationTimeANDROID()
, что делает его доступным для SurfaceTexture.
Просто чтобы прояснить, не наблюдаемый вид последовательности, как это: * eglPresentationTimeANDROID (frameTime) * SurfaceTexture.updateTexImage() * SurfaceTexture.OnFrameAvailableListener.onFrameAvailable() * SurfaceTexture.getTimestamp() возвращает frameTime –
Спасибо, fadden, я надеялся, что вы рядом! –