2016-04-19 9 views
2

私は、ユーザーがサーバーに保存されているすべての動画の情報とタイトルを見ることができるアプリを開発中です。私はそれをどのようにコード化しても、私は特定のURLからビデオの期間を取得することはできませんを除いて、ほぼ完了です。インターネット上のどこからでもこのデモビデオを入手できます:CLICK HERE FOR VIDEO PATH ビデオを開く必要なく、ビデオの長さを取得します。 「レトリバーである2行目java.lang.IllegalArgumentExceptionが :アンドロイドアプリでURLから動画を取得

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(); 

は、しかし、私は取得しています結果は次のとおりです。私は、Android上で使用しようとしている

コードはこれです。 setDataSource() " 誰かが私が間違っていることを見つけるのを助けることができますか、またはアンドロイドは必要な情報を得る別の方法を提供していますか?

+0

はあなたがMainThreadまたはネットワークスレッドで '' setDataSourceそれを呼んだ、私のために働いていますか? – Kathi

答えて

4

たぶんあなたが探しているFFmpegMediaMetadataRetriever

FFmpegMediaMetadataRetrieverクラスは、入力されたメディアファイルから検索フレームとメタデータのための統一されたインタフェースを提供します。

FFmpegMediaMetadataRetrieverMETADATA_KEY_DURATION定数を使用することで、あなたのvideo.Itの期間は、あなたが時間を取得するためにLONGに変換することができますに文字列を返します得ることができます。ここで

あなたが使用する必要があるコードです:

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); 
    } 

} 
関連する問題