我想获得视频的帧率,但我不想使用FFMPEG,JAVACV lib。 可以在android中获得视频的帧速率吗?
我读过KEY_FRAME_RATE它说,"具体来说,MediaExtractor提供一个整数值,对应于轨道的帧速率信息(如果指定且非零)。" 但我不知道如何使用它?
如果您知道如何从视频中获取帧速率,请在此处回答。
答案 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不存在。见上文