2011-10-27 118 views
3

我有一個允許用戶導入媒體(視頻,照片,音頻)的應用程序,然後由應用程序管理(作爲證據)。 我發現一些錄音應用會以.3gp格式(特別是Whats App messenger)保存音頻。如果我用下面的代碼獲得MIME類型:如何判斷.3gp文件是否爲Android中的音頻或視頻

MimeTypeMap.getSingleton().getMimeTypeFromExtension(fileExtension); 

它會回來的視頻/ 3GP這我的應用程序需要意味着它的類型是「視頻」,並試圖使縮略圖並沒有什麼(我使用MIME類型的第一部分來確定我的應用將其分類爲的類型)。 但是它是音頻,所以我希望工作的某些東西不起作用(例如爲視頻創建縮略圖)。有沒有任何庫或任何可用的android,這將允許我告訴如果文件只是一個視頻音頻?我想我可以嘗試製作一個縮略圖,如果失敗則假定該文件是音頻文件,但由於其他一些問題可能會在製作縮略圖時出現問題,因此這是有點延伸。有任何想法嗎?

回答

2

我想出了一個辦法做到這一點:

public static boolean is3gpFileVideo(File mediaFile) { 
     int height = 0; 
     try { 
      MediaPlayer mp = new MediaPlayer(); 
      FileInputStream fs; 
      FileDescriptor fd; 
      fs = new FileInputStream(mediaFile); 
      fd = fs.getFD(); 
      mp.setDataSource(fd); 
      mp.prepare(); 
      height = mp.getVideoHeight(); 
      mp.release(); 
     } catch (Exception e) { 
      Log.e(TAG, "Exception trying to determine if 3gp file is video.", e); 
     } 
     return height > 0; 
    } 

所以要弄清楚,如果一個媒體文件具有視頻,你可以使用這個..也許不是最有效的方式做到這一點,但東西很少在你的應用程序中完成它似乎是一個合理的解

+0

mp.prepare作品();實際上是必需的(儘管文檔有不同的說法)。在我的測試中,如果我沒有在mediaplayer對象上調用prepare,那麼無論是音頻還是視頻,高度始終爲0。 –

3

METADATA_KEY_HAS_VIDEO

如果該鍵存在的媒體包括視頻內容。

+0

我需要的東西,與Android 2.2+(API 8)工作 –

+0

這種解決方案只能用API 10+ –

1

我還沒有測試過這個解決方案,但是您可以嘗試獲取視頻的縮略圖。

Bitmap thumbnail = ThumbnailUtils.createVideoThumbnail(videoPath, 
      MediaStore.Images.Thumbnails.MINI_KIND); 

如果thumbnailnull那麼它的聲音,否則它的視頻。

0

我測試了Alessandro Roaro的解決方案,它適用於我。我目前在我的應用程序中使用它。

我引述:

我沒有測試此解決方案,但你可以嘗試得到一個縮略圖 的視頻。如果縮略圖爲空,那麼它是音頻,否則它是視頻。

Bitmap thumbnail = ThumbnailUtils.createVideoThumbnail(videoPath, 
MediaStore.Images.Thumbnails.MINI_KIND); 
相關問題