Java 如何在android操作系统中获得视频的帧速率?
我想获得视频的帧速率,但我不想使用FFMPEG,JAVACV lib。 在安卓系统中可以获得视频的帧速率吗 我读到它说,“具体地说,MediaExtractor提供了一个与曲目的帧速率信息相对应的整数值(如果指定且非零)。” 但我不知道如何使用它 如果您知道如何从视频中获取帧速率,请在此处回答。Java 如何在android操作系统中获得视频的帧速率?,java,android,video,frame-rate,Java,Android,Video,Frame Rate,我想获得视频的帧速率,但我不想使用FFMPEG,JAVACV lib。 在安卓系统中可以获得视频的帧速率吗 我读到它说,“具体地说,MediaExtractor提供了一个与曲目的帧速率信息相对应的整数值(如果指定且非零)。” 但我不知道如何使用它 如果您知道如何从视频中获取帧速率,请在此处回答。MediaExtractor extractor=newmediaextractor(); MediaExtractor extractor = new MediaExtractor(); int fra
MediaExtractor extractor=newmediaextractor();
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();
}
整数帧率=24//可能是默认的
试一试{
//根据文件、URI等要求调整数据源。
提取器.setDataSource(…);
int numTracks=extractor.getTrackCount();
对于(int i=0;i
注意:尝试在工作线程中运行上述代码
更新1什么是关键帧速率并且可能是可选的
关键帧速率
在API级别16中添加
字符串键\帧\速率
以帧数/秒为单位描述视频格式帧速率的键。当平台使用该值时,关联值通常为整数,但视频编解码器也接受浮点配置值。具体来说,MediaExtractor提供了一个对应于曲目帧速率信息的整数值(如果指定且非零)否则,该键不存在。MediaCodec同时接受浮点值和整数值。如果不存在按键操作速率且按键优先级为0(实时),则表示所需的操作帧速率。对于视频编码器,该值对应于预期的帧速率,尽管编码器预期支持基于缓冲区时间戳的可变帧速率。此键不用于MediaCodec输入/输出格式,也不用于MediaMuxer
常量值:“帧速率”
更新2如果关键帧速率不存在,则检查是否存在NPE代码。参见上文,它在format.getString(MediaFormat.KEY_MIME)中抛出
NullPointerException
;发布相同的日志。但是如果它进入for循环,它会是什么样子呢?java.lang.NullPointerException:尝试在null对象引用02-16 19:19:21.741:E/fra(7900):在android.media.MediaFormat.getInteger(MediaFormat.java:591)02-16 19:19:21.741:E/fra(7900):在com.exam.activity.VideoPlayActivity.init(VideoPlayActivity.java:101)02-16 19:19:21.741:E/fra(7900):在com.exam.activity.VideoPlayActivity.onCreate(VideoPlayActivity.java:59)上测试的android操作系统版本是什么?同时尝试发布format.containsKey(MediaFormat.KEY\u FRAME\u RATE)的值。您可以在字符串mime之前记录此操作。例外情况是此格式。getInteger line.android 6.0,内核版本3.10.72+