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();
}
Note: Essayez d'exécuter le code ci-dessus dans thread de travail.
Update 1 Qu'est-ce que KEY_FRAME_RATE et peut être en option
KEY_FRAME_RATE Ajouté au niveau de l'API 16 Chaîne KEY_FRAME_RATE Une clé décrivant la fréquence d'images d'un format vidéo dans des cadres /seconde. La valeur associée est normalement un entier lorsque la valeur est utilisée par la plateforme, mais les codecs vidéo acceptent également les valeurs de configuration flottantes. Plus précisément, MediaExtractor fournit une valeur entière correspondant aux informations de fréquence d'images de la piste si elle est spécifiée et non nulle. Sinon, cette clé n'est pas présente. MediaCodec accepte les valeurs float et integer. Cela représente la fréquence d'images de fonctionnement souhaitée si KEY_OPERATING_RATE n'est pas présent et KEY_PRIORITY est 0 (temps réel). Pour les encodeurs vidéo, cette valeur correspond à la fréquence d'images attendue, bien que les encodeurs soient supposés prendre en charge une fréquence d'images variable basée sur l'horodatage du tampon. Cette clé n'est pas utilisée dans les formats d'entrée/sortie MediaCodec ni dans MediaMuxer.
Valeur constante: "frame rate"
Update 2 code de contrôle si pour NPE si KEY_FRAME_RATE pas présent. Voir ci-dessus
il lance 'NullPointerException' à format.getString (MediaFormat.KEY_MIME); –
Publiez le journal pour le même. Mais comment ça peut être si ça va à l'intérieur de la boucle? –
java.lang.NullPointerException: Tentative d'invocation de la méthode virtuelle 'int java.lang.Integer.intValue()' sur une référence d'objet nul 02-16 19: 19: 21.741: E/fra (7900): \t at android. media.MediaFormat.getInteger (MediaFormat.java:591) 02-16 19: 19: 21.741: E/fra (7900): \t à com.exam.activity.VideoPlayActivity.init (VideoPlayActivity.java:101) 02- 16 19: 19: 21.741: E/fra (7900): \t at com.exam.activity.VideoPlayActivity.onCreate (VideoPlayActivity.java:59) –