Как получить частоту кадров видео в android os?

Я хочу получить частоту кадров видео, но я не хочу использовать FFMPEG, JAVACV lib. возможно ли получить частоту кадров видео в андроиде?

Я читаю KEY_FRAME_RATE, он говорит, что "в частности, MediaExtractor предоставляет целочисленное значение, соответствующее информации о частоте кадров дорожки, если указано и ненулевой". но я не знаю, как его использовать?

если вы знаете, как получить частоту кадров из видео, ответьте здесь.

Ответы

Ответ 1

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 Ключ, описывающий частоту кадров видеоформата в кадрах/сек. Связанное значение обычно является целым числом, когда значение используется платформой, но видеокодеки также принимают значения конфигурации float. В частности, MediaExtractor предоставляет целочисленное значение, соответствующее информации о частоте кадров дорожки, если указано, и не равно нулю. В противном случае этот ключ отсутствует. MediaCodec принимает как значения float, так и целочисленные. Это представляет желаемую рабочую частоту кадров, если KEY_OPERATING_RATE отсутствует, а KEY_PRIORITY - 0 (в реальном времени). Для видеокодеров это значение соответствует предполагаемой частоте кадров, хотя ожидается, что кодеры будут поддерживать переменную частоту кадров на основе временной метки буфера. Этот ключ не используется в форматах ввода/вывода MediaCodec или MediaMuxer.

Постоянное значение: "частота кадров"

Обновить 2. Проверьте код, если для NPE, если KEY_FRAME_RATE не присутствует. См. Выше