Android MediaCodec API视频播放速度过快

时间:2012-10-17 09:36:22

标签: android android-mediaplayer surfaceview android-4.2-jelly-bean mediacodec

我目前正在使用Android Jelly Bean MediaCodec API来开发一个简单的视频播放器。

我在单独的线程中提取曲目,播放音频和视频。问题是视频播放总是播放得太快。

哪里可以隐藏问题?
除了音频通过AudioTrack播放并且视频呈现在表面之外,音频和视频的处理方式几乎相同。

1 个答案:

答案 0 :(得分:4)

如果以最高速度渲染帧,则在大多数设备上都会达到60fps。您需要根据编码器提供的演示时间标记来调整它。

例如,如果输入是Android支持的格式(例如典型的.mp4文件),则可以使用MediaExtractor类来提取每个帧。可以使用getSampleTime()检索时间戳。您希望通过连续帧上的时间戳之间的差异来延迟渲染 - 不要假设第一帧的时间戳为零。

此外,不要假设视频帧以恒定速率出现(例如30fps)。对于某些来源,帧将不均匀地到达。

请参阅Grafika中的“播放视频(TextureView)”示例,尤其是SpeedControlCallback类。 gen-eight-rects.mp4视频使用可变帧持续时间来执行此操作。如果选中“以60fps播放”框,则会忽略演示时间戳。