2013-10-21 72 views
14

我想製作自定義媒體播放器並需要視頻方向信息(用於檢測是從前置攝像機還是後置攝像機拍攝)。對於jpeg圖像,我可以使用ExifInterface.TAG_ORIENTATION,但對於視頻,我可以如何找到這些信息。在android中檢測錄製的視頻的方向

我試圖從視頻文件中抓取幀並將其轉換爲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

我試圖使用'字符串高度= m.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT); 字符串寬度= m.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH);'但是我的所有視頻都呈現出相同的大小,無論是橫向還是縱向。所以這個答案非常好。我們必須以旋轉方向檢查爲基礎。謝謝! – Azurespot

+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。 –