What governs playback speed when encoding with Android's MediaCodec + mp4parser?

自古美人都是妖i 提交于 2019-12-02 16:46:50

问题


I'm trying to record, encode and finally create a short movie on Android (using API 16) with a combination of MediaCodec and Mp4Parser (to encapsulate into .mp4).

Everything is working just fine, except for the duration of the .mp4: its always 3 seconds long - and runs at about twice the 'right' speed.

  • The input to encoder is 84 frames (taken 100ms apart).
  • The last frame sets the 'end of stream' flag.
  • I set the presentation time for each frame on queueInputBuffer

I've tried to tweak every conceivable parameter - but nothing seems to make a difference - the film is always 3 seconds long - and always played way too fast.

So what governs the playback seepd? how do I generate a film with 'natuarl' speed?


回答1:


I figured it out: When encapsulating with mp4parser (needed if you target API<18), you need to set the speed in mp4parser's API. The presentation time you provide to queueInputBuffer appearently make no difference if you're not using Android's built-in muxer (available only from API18).

I stumbled on this question on github, which indicates the following is required:

 new H264TrackImpl(new FileDataSourceImpl(rawDataFile), "eng", 100, 10);
  • the last two parameters (timeScale and frameTick) set the playback speed to 'noraml'.


来源:https://stackoverflow.com/questions/38738890/what-governs-playback-speed-when-encoding-with-androids-mediacodec-mp4parser

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!