【问题标题】:Android MediaCodec API video plays too fastAndroid MediaCodec API 视频播放太快
【发布时间】:2012-10-07 12:51:23
【问题描述】:

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

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

问题可能隐藏在哪里?
音频和视频的处理方式几乎相同,只是音频通过 AudioTrack 播放,视频渲染到表面。

【问题讨论】:

  • 你是从哪里了解到这个的?
  • 您能否发布您的代码。这将有助于客栈调试
  • 我也遇到了同样的问题,你解决了吗?

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


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-23
    • 2012-07-17
    • 2015-01-02
    • 2014-06-08
    • 2011-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多