2017-02-13 1 views
14

Ich möchte Bildrate von Video erhalten, aber ich möchte FFMPEG, JAVACV lib nicht verwenden. ist das möglich, Bildrate von Video in Android zu bekommen?Wie bekomme ich Bildrate von Video in Android OS?

Ich lese KEY_FRAME_RATE es heißt, dass "MediaExtractor speziell einen ganzzahligen Wert entsprechend der Bildrate Informationen der Spur bietet, wenn angegeben und nicht Null." aber ich weiß nicht, wie man es benutzt?

Wenn Sie wissen, wie Bildrate von Video erhalten, dann antworten Sie hier.

Antwort

15
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(); 
} 

Hinweis: Versuchen Sie den obigen Code in Worker-Thread ausgeführt werden.

Update 1 WasKEY_FRAME_RATE ist und optional sein kann

KEY_FRAME_RATE Added in API-Ebene 16 String KEY_FRAME_RATE A Taste, um die Framerate eines Videoformat in Rahmen der Beschreibung/Sek. Der zugehörige Wert ist normalerweise eine ganze Zahl, wenn der Wert von der Plattform verwendet wird, aber Videocodecs akzeptieren auch Float-Konfigurationswerte. Insbesondere stellt MediaExtractor einen ganzzahligen Wert bereit, der der Bildfrequenzinformation der Spur entspricht, falls angegeben und nicht Null. Andernfalls ist dieser Schlüssel nicht vorhanden. MediaCodec akzeptiert sowohl Float- als auch Integer-Werte. Dies stellt die gewünschte Bildwiederholfrequenz dar, wenn KEY_OPERATING_RATE nicht vorhanden ist und KEY_PRIORITY 0 (Realtime) ist. Bei Videoencodern entspricht dieser Wert der beabsichtigten Bildfrequenz, obwohl Encoder eine variable Bildrate basierend auf dem Pufferzeitstempel unterstützen sollen. Dieser Schlüssel wird weder in den MediaCodec-Eingabe-/Ausgabeformaten noch von MediaMuxer verwendet.

Konstanter Wert: "frame-rate"

Update 2-Code zu überprüfen, ob für NPE wenn KEY_FRAME_RATE nicht vorhanden. Siehe oben

+0

es werfen "NullPointerException" bei format.getString (MediaFormat.KEY_MIME); –

+0

Veröffentlichen Sie das Protokoll für das gleiche. Aber wie kann es sein, wenn es in for-Schleife geht? –

+0

java.lang.NullPointerException: Versuch, die virtuelle Methode 'int java.lang.Integer.intValue()' für eine Nullobjekt-Referenz aufzurufen 02-16 19: 19: 21.741: E/fra (7900): \t bei android. media.MediaFormat.getInteger (MediaFormat.java:591) 02-16 19: 19: 21.741: E/fra (7900): \t bei com.exam.activity.VideoPlayActivity.init (VideoPlayActivity.java:101) 02- 16 19: 19: 21.741: E/fra (7900): \t bei com.exam.activity.VideoPlayActivity.onCreate (VideoPlayActivity.java:59) –

Verwandte Themen