2015-10-07 64 views
0

我有一个Android MediaCodec解码器,配置了SurfaceTexture对象的Surface。 MP4文件解码工作正常,可以在设备上看到帧。但是如果尝试使用MediaMuxer重新编码为新的MP4文件,则输出文件大小为零,因为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的 –