2015-10-07 75 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的 –