2013-07-13 71 views
2

我試圖使用Android MediaMetadataRetriever獲得的mp4格式視頻recoreded長 - 但我發現了異常:的Android MediaMetadataRetriever的setDataSource失敗

07-13 13:54:32.686: E/AndroidRuntime(19790): FATAL EXCEPTION: main 
07-13 13:54:32.686: E/AndroidRuntime(19790): java.lang.RuntimeException: setDataSource failed: status = 0x80000000 

我的代碼是:

MediaMetadataRetriever retriever = new MediaMetadataRetriever(); 
      retriever.setDataSource(video.getMediaUrl()); 
      String time = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION); 
      long timeInmillisec = Long.parseLong(time); 

而且video.getMediaUrl()路徑類同這樣的:

file:///storage/emulated/0/Foldername/Videos/VID_20130713_135318.mp4 

我不知道我做錯了什麼 - 請任何人幫助我!此外,此代碼適用於音頻文件,但不適用於視頻。

+0

MediaMetadataRetriever可能因某種原因無法讀取該特定的視頻文件。你有沒有試過https://github.com/wseemann/FFmpegMediaMetadataRetriever? –

+0

它無法讀取我給我的每一個文件記錄從我的相機....所以沒有 - 沒有測試圖書館,但也許會稍後測試 - 在此先感謝 –

+0

我說的是,這個問題可能與相機正在使用的編解碼器相關或者如何寫出元數據。另外,你可以發佈一個示例文件嗎? –

回答

1

刪除file:// from video URI before將它傳遞給setDataSource方法。

2
public static String getFileDuration(Context context, File file) { 
     String result = null; 
     try { 
      MediaMetadataRetriever retriever = new MediaMetadataRetriever(); 
      FileInputStream inputStream = new FileInputStream(file.getAbsolutePath()); 
      retriever.setDataSource(inputStream.getFD()); 
      long time = Long.parseLong(retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION)); 
      result = String.format(context.getResources().getString(R.string.player_time_format), 
        AppUtil.getPlayerMinutes(time), AppUtil.getPlayerSoconds(time)); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } catch (RuntimeException e) { 
      e.printStackTrace(); 
     } 
     return result; 
    } 
+0

總是釋放檢索器並關閉輸入流。 – kAmol

相關問題