2013-10-21 16 views
14

私は自分のカスタムメディアプレーヤーを作りたいと思っており、ビデオの方向情報が必要です(フロントカメラまたはバックカメラから録画されたものを検出するため)。 jpeg画像の場合、私はExifInterface.TAG_ORIENTATIONを使うことができますが、どのようにこの情報を見つけることができるのですか?アンドロイドで録画したビデオの方向を検出

ビデオファイルからフレームを取得してjpegに変換しようとしましたが、やはり常に常に向きが0になります。

私を助けてください。前もって感謝します。

答えて

1

メディアプレーヤーがビデオファイルの高さと幅を提供していることを知り、ビデオファイルの回転を取り出すことができます。

MediaPlayer mp = new MediaPlayer(); 
    try { 
     mp.setDataSource(viewSource); 
     mp.prepare(); 
     mp.setOnVideoSizeChangedListener(new OnVideoSizeChangedListener() { 
      @Override 
      public void onVideoSizeChanged(MediaPlayer mp, int width, int height) { 

       int orientation = -1; 

       if(width < height){ 
        orientation = 0; 
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);} 
       else{ 
        orientation = 1; 
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);} 

      } 
     }); 
    } catch (IllegalArgumentException e) { 
     e.printStackTrace(); 
    } catch (SecurityException e) { 
     e.printStackTrace(); 
    } catch (IllegalStateException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
+1

この方法はバグではありません。私はKitKatではコールバックがまったく呼び出されないことを理解しました。 – Nativ

+0

@powerXあなたは何をしたいですか?これはkitkatで動作していないのですか? – ultimate

+0

それは私が言っていることは嬉しいことです。しかし、私はそれを確認せずにフォーラムで読んだものに基づいている – Nativ

14

APIレベル17以降の、我々は、ビデオの向きを抽出することができます。MediaMetadataRetriever

MediaMetadataRetriever m = new MediaMetadataRetriever(); 

m.setDataSource(path); 
Bitmap thumbnail = m.getFrameAtTime(); 
// 
if (Build.VERSION.SDK_INT >= 17) { 
    String s = m.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION); 

    Log.e("Rotation", s); 
} 
+1

私は 'String height = m.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT);を使用しようとしました。 文字列の幅= m.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH); 'しかし、私のビデオはすべて風景や肖像画のいずれのサイズでも出てきます。だからこの答えはとても良いです。私たちは回転のオリエンテーションチェックに基づいていなければなりません。ありがとうございました!私のために – Azurespot

+0

は0になりますか? – Narendra

2

FFmpegMediaMetadataRetrieverはこれを行うことができ、それがAPI 7+で動作します:私は来てあまりにも多くの努力の後

FFmpegMediaMetadataRetriever fmmr = new FFmpegMediaMetadataRetriever(); 
fmmr.setDataSource(path); 
String rotation = fmmr.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION); 
Log.e("Rotation", rotation); 
fmmr.release(); 
+0

これは数年前ですが、FFmpegMediaMetadataRetrieverライブラリは大量です - ビルドのフレーバを使用しない限り、これはあなたのアプリに約18MBを追加します。 API 16以下のビデオの方向付けが絶対的に必要な場合を除き、私はこれを使用しないことをお勧めします。 –

+0

ライブラリーには、各アーキテクチャーにあらかじめ構築されたAARが用意されています。個々のAPKを作成することができます。 –

関連する問題