如何在android os中获取视频的帧率? [英] how to get frame rate of video in android os?

查看:23
本文介绍了如何在android os中获取视频的帧率?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想获得视频的帧率,但我不想使用 FFMPEG、JAVACV 库.可以在android中获取视频的帧率吗?

I want to get frame rate of video, but i don't want to use FFMPEG,JAVACV lib. is that possible to get frame rate of video in android?

我读过 KEY_FRAME_RATE 上面说,特别是,如果指定且非零,MediaExtractor 会提供与轨道的帧速率信息相对应的整数值."但我不知道如何使用它?

I read KEY_FRAME_RATE it's says that,"Specifically, MediaExtractor provides an integer value corresponding to the frame rate information of the track if specified and non-zero." but i don't know how to use it?

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

if you know about how to get frame rate from video then answer here.

推荐答案

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();
}

注意:尝试在工作线程中运行上述代码.

Note: Try to run the above code in worker thread.

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

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

KEY_FRAME_RATE Added in API level 16 String KEY_FRAME_RATE A key describing the frame rate of a video format in frames/sec. The associated value is normally an integer when the value is used by the platform, but video codecs also accept float configuration values. Specifically, MediaExtractor provides an integer value corresponding to the frame rate information of the track if specified and non-zero. Otherwise, this key is not present. MediaCodec accepts both float and integer values. This represents the desired operating frame rate if the KEY_OPERATING_RATE is not present and KEY_PRIORITY is 0 (realtime). For video encoders this value corresponds to the intended frame rate, although encoders are expected to support variable frame rate based on buffer timestamp. This key is not used in the MediaCodec input/output formats, nor by MediaMuxer.

常量值:帧率"

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

Update 2 Code check if for NPE if KEY_FRAME_RATE not present. See above

这篇关于如何在android os中获取视频的帧率?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆