【发布时间】:2017-02-13 13:13:12
【问题描述】:
我想获得视频的帧率,但我不想使用 FFMPEG、JAVACV 库。 可以在android中获得视频的帧率吗?
我读到KEY_FRAME_RATE 说,“具体来说,MediaExtractor 提供了一个与轨道的帧速率信息相对应的整数值(如果指定且非零)。” 但是不知道怎么用?
如果您知道如何从视频中获取帧速率,请在此处回答。
【问题讨论】:
标签: java android video frame-rate
我想获得视频的帧率,但我不想使用 FFMPEG、JAVACV 库。 可以在android中获得视频的帧率吗?
我读到KEY_FRAME_RATE 说,“具体来说,MediaExtractor 提供了一个与轨道的帧速率信息相对应的整数值(如果指定且非零)。” 但是不知道怎么用?
如果您知道如何从视频中获取帧速率,请在此处回答。
【问题讨论】:
标签: java android video frame-rate
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。
常数值:“帧率”
更新 2 如果 KEY_FRAME_RATE 不存在,则代码检查是否为 NPE。见上文
【讨论】:
NullPointerException;