【问题标题】:How to get frame timestamp when MediaCodec decoder is configured with SurfaceTexture output?使用 SurfaceTexture 输出配置 MediaCodec 解码器时如何获取帧时间戳?
【发布时间】:2016-01-04 08:00:51
【问题描述】:

我有一个使用 SurfaceTexture 对象的 Surface 配置的 Android MediaCodec 解码器。 MP4 文件解码工作正常,可以在设备上看到帧。但是如果尝试使用 MediaMuxer 重新编码为新的 MP4 文件,则输出文件大小为零,因为 SurfaceTexture.getTimestamp() 返回始终为 0。在这种情况下,获取帧呈现时间的正确方法是什么?

【问题讨论】:

  • 谢谢fadden,我希望你在身边!

标签: android android-mediacodec


【解决方案1】:

转发时间戳。您从 SurfaceTexture 获得的时间戳是生产者提供的。

使用 MediaCodec 解码时,您会在 BufferInfo 对象中收到时间戳。您可以将该时间戳直接传递给编码器的queueInputBuffer(),或者如果您使用 GLES 进行渲染,则将其传递给eglPresentationTimeANDROID(),这样它就可以用于 SurfaceTexture。

一个例子可以在here找到,其他的可以在Grafika找到。

【讨论】:

  • 澄清一下,观察到的序列是否如下所示: * eglPresentationTimeANDROID( frameTime ) * SurfaceTexture.updateTexImage() * SurfaceTexture.OnFrameAvailableListener.onFrameAvailable() * SurfaceTexture.getTimestamp() 返回 frameTime
猜你喜欢
  • 2014-04-19
  • 2021-12-21
  • 1970-01-01
  • 2018-07-07
  • 2014-09-03
  • 2023-03-22
  • 2020-08-13
  • 2018-05-17
  • 2016-08-31
相关资源
最近更新 更多