2013-10-21 8 views
14

Desidero rendere il mio lettore multimediale personalizzato e richiede informazioni di orientamento del video (per rilevarlo è registrato dalla fotocamera anteriore o posteriore). per immagini jpeg posso usare ExifInterface.TAG_ORIENTATION ma per il video come posso trovare queste informazioni.Rileva l'orientamento di un video registrato in Android

Ho provato a prendere il frame dal file video e convertirlo in jpeg ma di nuovo fornisce sempre l'orientamento 0 in tutti i casi.

Per favore aiutatemi. Grazie in anticipo.

risposta

1

Dopo troppi sforzi sono venuto per sapere che il lettore multimediale fornisce l'altezza e la larghezza del file video da cui possiamo definire la rotazione del video.

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

non è così buggato, ho capito che in KitKat il callback non viene chiamato affatto. – Nativ

+0

@powerX cosa vuoi dire? non funziona in kitkat ???? – ultimate

+0

questo è esattamente quello che sto dicendo. Ma lo sto basando su ciò che leggo nei forum senza verificarlo – Nativ

14

Api livello 17 dopo, siamo in grado di estrarre l'orientamento del video: 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

Ho provato utilizzando 'altezza String = m.extractMetadata (MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT); Larghezza stringa = m.extractMetadata (MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH); 'ma tutti i miei video stanno uscendo con le stesse dimensioni, sia in orizzontale che in verticale. Quindi questa risposta è molto buona. Dobbiamo basare il controllo dell'orientamento sulla rotazione. Grazie! – Azurespot

+0

per me sta arrivando 0 qualsiasi soluzione? – Narendra

2

FFmpegMediaMetadataRetriever può fare questo e funziona con 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

So che questo ha pochi anni, ma per quello che vale - la libreria FFmpegMediaMetadataRetriever è enorme - a meno che non si utilizzino i build build, questo aggiungerà circa 18 MB alla tua app. A meno che tu non abbia assolutamente bisogno dell'orientamento di un video su API 16 o meno, ti consiglio di non utilizzarlo. –

+0

La libreria offre anche le AAR predefinite per ogni architettura, è possibile creare singoli APK. –

Problemi correlati