Ответ 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 не присутствует. См. Выше