ビデオのフレームレートを取得したいのですが、FFMPEG、JAVACV libを使用したくありません。 Androidでビデオのフレームレートを取得することは可能ですか?
私は KEY_FRAME_RATE と読みます。「具体的には、MediaExtractorは、指定されたゼロ以外のトラックのフレームレート情報に対応する整数値を提供します。」しかし、私はそれを使用する方法がわかりませんか?
ビデオからフレームレートを取得する方法を知っている場合は、ここで答えてください。
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();
}
注:上記のコードをワーカースレッドで実行してみてください。
pdate 1KEY_FRAME_RATEとは何かオプション
KEY_FRAME_RATE APIレベル16で追加されました。文字列KEY_FRAME_RATEビデオ形式のフレームレートをフレーム/秒で表すキー。関連付けられた値は通常、値がプラットフォームで使用される場合は整数ですが、ビデオコーデックも浮動小数点構成値を受け入れます。具体的には、MediaExtractorは、指定されていてゼロ以外の場合、トラックのフレームレート情報に対応する整数値を提供します。 それ以外の場合、このキーは存在しません。 MediaCodecは、浮動小数点値と整数値の両方を受け入れます。これは、KEY_OPERATING_RATEが存在せず、KEY_PRIORITYが0(リアルタイム)の場合に必要な動作フレームレートを表します。ビデオエンコーダーの場合、この値は意図したフレームレートに対応しますが、エンコーダーはバッファータイムスタンプに基づいて可変フレームレートをサポートすることが期待されています。このキーは、MediaCodec入出力形式では使用されず、MediaMuxerでも使用されません。
定数値:「フレームレート」
pdate 2 KEY_FRAME_RATEが存在しない場合のNPEのコードチェック。上記を参照