2016-04-19 26 views
2

我正在開發一個應用程序,用戶可以在其中查看存儲在服務器上的所有視頻信息和標題。我幾乎完成了它,除了無論如何編碼它,我都無法從給定的URL獲得視頻持續時間。讓我們從互聯網上的某個地方看這個演示視頻:CLICK HERE FOR VIDEO PATH 我希望應用獲得視頻時長,而不需要打開視頻本身。從android應用程序中的URL獲取視頻持續時間

,我試圖在Android上使用的代碼是這樣的:

MediaMetadataRetriever retriever = new MediaMetadataRetriever(); 
    retriever.setDataSource("https://12-lvl3-pdl.vimeocdn.com/01/1386/0/6932347/10573836.mp4?expires=1461047937&token=037972137fdfc4c2d9902"); 
    String time = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION); 
    long timeInmillisec = Long.parseLong(time); 
    long duration = timeInmillisec/1000; 
    long hours = duration/3600; 
    long minutes = (duration - hours * 3600)/60; 
    long seconds = duration - (hours * 3600 + minutes * 60); 
    Toast.makeText(context,Long.toString(timeInmillisec),Toast.LENGTH_SHORT).show(); 

但是,我得到的結果是:java.lang.IllegalArgumentException異常 第2行是「獵犬。 setDataSource()「。 任何人都可以幫助我找到我做錯了什麼或Android提供另一種方式來獲取所需的信息?

+0

你叫''的setDataSource它MainThread或網線? – Kathi

回答

4

也許您正在尋找FFmpegMediaMetadataRetriever

FFmpegMediaMetadataRetriever類提供從輸入的媒體文件檢索框和元數據的統一接口。

使用的METADATA_KEY_DURATION不斷FFmpegMediaMetadataRetriever你可以得到你video.It的持續時間將字符串返回到你,那麼你可以將其轉換成久才TIME。

這裏是你應該使用的代碼:

FFmpegMediaMetadataRetriever mFFmpegMediaMetadataRetriever = new MediaMetadataRetriever(); 
mFFmpegMediaMetadataRetriever .setDataSource("Your video url"); 
String mVideoDuration = mFFmpegMediaMetadataRetriever .extractMetadata(FFmpegMediaMetadataRetriever .METADATA_KEY_DURATION); 
long mTimeInMilliseconds= Long.parseLong(mVideoDuration); 

如果以上還是不行,然後使用

MediaMetadataRetriever retriever = new MediaMetadataRetriever(); 
if (Build.VERSION.SDK_INT >= 14) 
retriever.setDataSource("Your video url", new HashMap<String, String>()); 
else 
retriever.setDataSource("Your video url"); 

從您的代碼。

希望它能幫助你。祝你好運。

+0

不要把這個錯誤的方式,....... LEMME給你一個花......我一直在努力幾天得到一些結果,並最終得到java.lang.IllegalArgumentException。你是對的.. FFmpegMediaMetadataRetriever確實提供了一個更好的界面。你的第一個解決方案就像一個魅力。非常感謝你 –

1

這是爲我工作,

MediaMetadataRetriever retriever = new MediaMetadataRetriever(); 
    retriever.setDataSource("YourVideofileUrl", new HashMap<String, String>()); 
    String time = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION); 
    long timeInMillisec = Long.parseLong(time); 
    retriever.release(); 
    String duration=convertMillieToHMmSs(timeInMillisec); //use this duration 

public static String convertMillieToHMmSs(long millie) { 
    long seconds = (millie/1000); 
    long second = seconds % 60; 
    long minute = (seconds/60) % 60; 
    long hour = (seconds/(60 * 60)) % 24; 

    String result = ""; 
    if (hour > 0) { 
     return String.format("%02d:%02d:%02d", hour, minute, second); 
    } 
    else { 
     return String.format("%02d:%02d" , minute, second); 
    } 

} 
相關問題