如何在android os中获取视频的帧速率?

时间:2017-02-13 13:13:13

标签: java android video frame-rate

我想获得视频的帧率,但我不想使用FFMPEG,JAVACV lib。 可以在android中获得视频的帧速率吗?

我读过KEY_FRAME_RATE它说,"具体来说,MediaExtractor提供一个整数值,对应于轨道的帧速率信息(如果指定且非零)。" 但我不知道如何使用它?

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

1 个答案:

答案 0 :(得分:17)

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(实时),则表示所需的操作帧速率。对于视频编码器,该值对应于预期的帧速率,但是期望编码器基于缓冲器时间戳支持可变帧速率。此键不用于MediaCodec输入/输出格式,也不用于MediaMuxer。

常数值:&#34;帧速率&#34;

更新2 代码检查是否为NPE,如果KEY_FRAME_RATE不存在。见上文