Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在android操作系统中获得视频的帧速率?_Java_Android_Video_Frame Rate - Fatal编程技术网

Java 如何在android操作系统中获得视频的帧速率?

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

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

我读到它说,“具体地说,MediaExtractor提供了一个与曲目的帧速率信息相对应的整数值(如果指定且非零)。” 但我不知道如何使用它

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

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+