2015-10-07 2 views
0

У меня есть декодер Android MediaCodec, настроенный с поверхностью от объекта SurfaceTexture. Декодирование файлов MP4 работает отлично, кадры можно увидеть на устройстве. Но если попытаться перекодировать в новый файл MP4 с помощью MediaMuxer, размер выходного файла равен нулю, потому что SurfaceTexture.getTimestamp() всегда возвращает 0. Каков правильный способ получить время представления кадра в этом случае?Как получить временную метку кадра, когда декодер MediaCodec настроен с выходом SurfaceTexture?

+0

Спасибо, fadden, я надеялся, что вы рядом! –

ответ

0

Марки времени отправляются. Временная метка, которую вы получаете от SurfaceTexture, предоставлена ​​производителем.

При декодировании с помощью MediaCodec вы получаете отметку времени в объекте BufferInfo. Вы либо передаете эту временную метку в кодировщик queueInputBuffer() напрямую, либо если вы выполняете рендеринг с помощью GLES, вы передаете его eglPresentationTimeANDROID(), что делает его доступным для SurfaceTexture.

Один пример можно найти here, другие в Grafika.

+0

Просто чтобы прояснить, не наблюдаемый вид последовательности, как это: * eglPresentationTimeANDROID (frameTime) * SurfaceTexture.updateTexImage() * SurfaceTexture.OnFrameAvailableListener.onFrameAvailable() * SurfaceTexture.getTimestamp() возвращает frameTime –