当前位置: 首页 > 面试题库 >

如何在Android OS中获取视频的帧率?

袁帅
2023-03-14
问题内容

我想获得视频的帧速率,但是我不想使用FFMPEG,JAVACV lib。是否有可能在Android中获取视频的帧率?

我读到KEY_FRAME_RATE时说,“具体地说,MediaExtractor提供了一个与轨道的帧速率信息相对应的整数值(如果已指定且非零)。”
但我不知道如何使用它?

如果您知道如何从视频中获取帧频,请在此处回答。


问题答案:
MediaExtractor extractor = new MediaExtractor();
int frameRate = 24; //may be default
try {
  //Adjust data source as per the requirement if file, URI, etc.
  extractor.setDataSource(...);
  int numTracks = extractor.getTrackCount();
  for (int i = 0; i < numTracks; ++i) {
    MediaFormat format = extractor.getTrackFormat(i);
    String mime = format.getString(MediaFormat.KEY_MIME);
    if (mime.startsWith("video/")) {
    if (format.containsKey(MediaFormat.KEY_FRAME_RATE)) {
        frameRate = format.getInteger(MediaFormat.KEY_FRAME_RATE);
      }
    }
  }
} catch (IOException e) {
  e.printStackTrace();
}finally {
  //Release stuff
  extractor.release();
}

注意: 尝试在辅助线程中运行以上代码。

更新1 什么是 KEY_FRAME_RATE ,可能是 可选的

KEY_FRAME_RATE
在API级别16中添加字符串KEY_FRAME_RATE一个键,以帧/秒为单位描述视频格式的帧速率。当平台使用该值时,关联的值通常是整数,但是视频编解码器也接受浮点型配置值。具体而言,MediaExtractor提供一个与轨道的帧速率信息相对应的整数值(如果已指定),并且该值非零。
否则,此密钥不存在。
MediaCodec接受浮点和整数值。如果KEY_OPERATING_RATE不存在并且KEY_PRIORITY为0(实时),则这表示所需的工作帧速率。对于视频编码器,此值对应于预期的帧速率,尽管编码器应支持基于缓冲区时间戳的可变帧速率。MediaKeyc输入/输出格式或MediaMuxer均未使用此键。

恒定值:“帧速率”

*如果不存在KEY_FRAME_RATE,则 *更新2 代码检查是否用于NPE。往上看



 类似资料:
  • FFMpeg的工作速度要快得多,但仍然相当慢。 所以,我的问题是,如果有一个lib,我可以在其中执行类似以下伪代码的操作: 快速扫描视频,不看帧内的任何东西,只看标题,以找到帧的类型,并继续下一帧。 我发现如果我直接指定帧,我不会得到真正的速度差异。 除了通过API之外,FFMPEG还有什么更快的吗?

  • 我们的视频播放软件(本地的,不是流媒体),可以随意跳到第 n 秒 这个功能是怎么实现的? 因为视频的一个一个 packet 组成,每个 packet 包含 [0,+∞) 个 frame 所以跳转到第 10 秒怎么实现? 一个视频 30 fps,难道要,从第 0 帧开始读取 300 帧,才播放吗? 这样的话,越拖到后面越慢 但是实际使用这些播放软件的时候,感觉都是秒级别的

  • 问题内容: 我想使用Java从视频文件(mov)中获取帧样本(jpeg)。是否有捷径可寻。当我在谷歌搜索时,我所能找到的就是从多个jpg中移动。我不知道也许找不到正确的关键字。 问题答案: Xuggler完成工作。他们甚至给出了完全符合我需要的示例代码。链接在下面 http://xuggle.googlecode.com/svn/trunk/java/xuggle- xuggler/src/com

  • 我正在开发一个Android视频应用程序,我需要在暂停模式下获取当前显示的视频帧号。 我需要向我的服务器发送当前在视频中暂停的帧号,并返回关于该帧/时间的项目列表,现在我正在以毫秒为单位发送当前暂停的时间,但它不能很好地工作,因为服务器比较发送到它计算出具体的帧,基于时间,但有时比较并不精确。 我知道如果你使用MediaMetaDataRetriever,你可以从那个帧中得到一个位图,我做到了,但

  • 我会考虑不要将与其他解决方案一起使用以满足上述需求的建议。