web-dev-qa-db-ja.com

Android osでビデオのフレームレートを取得する方法?

ビデオのフレームレートを取得したいのですが、FFMPEG、JAVACV libを使用したくありません。 Androidでビデオのフレームレートを取得することは可能ですか?

私は KEY_FRAME_RATE と読みます。「具体的には、MediaExtractorは、指定されたゼロ以外のトラックのフレームレート情報に対応する整数値を提供します。」しかし、私はそれを使用する方法がわかりませんか?

ビデオからフレームレートを取得する方法を知っている場合は、ここで答えてください。

18
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のコードチェック。上記を参照

18
Anurag Singh