2013-10-21 7 views
14

Ich möchte meinen eigenen Media Player machen und benötigt Informationen zur Video-Information (zur Erkennung wird von der vorderen oder hinteren Kamera aufgenommen). Für JPEG-Bilder kann ich ExifInterface.TAG_ORIENTATION aber für Video verwenden, wie ich diese Informationen finden kann.Erkennung der Ausrichtung eines aufgezeichneten Videos in Android

Ich habe versucht, Frame von Videodatei zu greifen und es in JPEG zu konvertieren, aber es gibt immer wieder Orientierung 0 in allen Fällen.

Bitte helfen Sie mir. Danke im Voraus.

Antwort

1

Nach zu viel Aufwand zu wissen, dass Media Player Höhe und Breite der Videodatei zur Verfügung stellt, aus der wir die Drehung des Videos beenden können.

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

ist nicht so Buggy, ich habe verstanden, dass in KitKat der Callback überhaupt nicht aufgerufen wird. – Nativ

+0

@powerX was möchtest du sagen? funktioniert das nicht in kitkat ???? – ultimate

+0

das ist genau das, was ich sage. Aber ich basiere es auf dem, was ich in Foren gelesen habe, ohne es zu überprüfen – Nativ

14

Api Level 17 später, können wir die Ausrichtung von Video extrahieren: 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

ich versuchte, mit 'String height = m.extractMetadata (MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT); String width = m.extractMetadata (MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH); 'aber alle meine Videos haben die gleiche Größe, egal ob im Quer- oder Hochformat. Diese Antwort ist also sehr gut. Wir müssen die Orientierungsprüfung auf die Rotation stützen. Vielen Dank! – Azurespot

+0

für mich s kommt 0 jede Lösung? – Narendra

2

FFmpegMediaMetadataRetriever dies tun können und es funktioniert mit API 7+: Ich kam

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

Ich weiß, das ist ein paar Jahre alt, aber für das, was es wert ist - die FFmpegMediaMetadataRetriever-Bibliothek ist massiv - wenn Sie Build-Flavors nicht verwenden, werden Ihrer App ca. 18 MB hinzugefügt. Sofern Sie nicht unbedingt die Ausrichtung eines Videos auf API 16 oder weniger benötigen, würde ich empfehlen, dies nicht zu verwenden. –

+0

Die Bibliothek bietet auch vorgefertigte AARs für jede Architektur, Sie können individuelle APKs erstellen. –