Development Tip

비디오 파일의 길이를 얻는 방법은 무엇입니까?

yourdevel 2020. 12. 10. 21:25
반응형

비디오 파일의 길이를 얻는 방법은 무엇입니까?


저는 Android 프로그래밍의 초보자입니다.

폴더에있는 모든 비디오 파일을 나열하고 폴더에있는 모든 비디오의 정보를 표시하는 응용 프로그램을 작성 중입니다. 그러나 비디오 기간을 얻으려고 할 때 null을 반환하고 그것을 얻을 수있는 방법을 찾을 수 없습니다.

누구든지 나를 도울 수 있습니까?

아래는 내 코드입니다.

Uri uri = Uri.parse("content://media/external/video/media/9");
Cursor cursor = MediaStore.Video.query(res, data.getData(), new String[]{MediaStore.Video.VideoColumns.DURATION});
if(cursor.moveToFirst()) {
    String duration = cursor.getString(0);
    System.out.println("Duration: " + duration);
}

MediaMetadataRetriever미디어 특정 데이터를 검색하는 데 사용 합니다.

MediaMetadataRetriever retriever = new MediaMetadataRetriever();
//use one of overloaded setDataSource() functions to set your data source
retriever.setDataSource(context, Uri.fromFile(videoFile));
String time = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
long timeInMillisec = Long.parseLong(time );

retriever.release()

가장 쉬운 방법은 다음과 같습니다.

MediaPlayer mp = MediaPlayer.create(this, Uri.parse(uriOfFile));
int duration = mp.getDuration();
mp.release();
/*convert millis to appropriate time*/
return String.format("%d min, %d sec", 
        TimeUnit.MILLISECONDS.toMinutes(duration),
        TimeUnit.MILLISECONDS.toSeconds(duration) - 
        TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(duration))
    );

미디어 스토어 비디오 쿼리에 URI를 게시하지 않는 것 같습니다.

Uri uri = Uri.parse("content://media/external/video/media/9");

Cursor cursor = MediaStore.Video.query(res, data.getData(), new String[]{MediaStore.Video.VideoColumns.DURATION});

public static long getDurationOfSound(Context context, Object soundFile)
  {
    int millis = 0;
    MediaPlayer mp = new MediaPlayer();
    try
    {
      Class<? extends Object> currentArgClass = soundFile.getClass();
      if(currentArgClass == Integer.class)
      {
        AssetFileDescriptor afd = context.getResources().openRawResourceFd((Integer)soundFile);
            mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
        afd.close();
      }
      else if(currentArgClass == String.class)
      {
        mp.setDataSource((String)soundFile);
      }
      else if(currentArgClass == File.class)
      {
        mp.setDataSource(((File)soundFile).getAbsolutePath());
      }
      mp.prepare();
      millis = mp.getDuration();
    }
    catch(Exception e)
    {
    //  Logger.e(e.toString());
    }
    finally
    {
      mp.release();
      mp = null;
    }
    return millis;
  }

MediaPlayer mpl = MediaPlayer.create(this,R.raw.videoFile);   
int si = mpl.getDuration();

이것은 비디오 파일의 길이를 제공합니다

참고 URL : https://stackoverflow.com/questions/3936396/how-to-get-duration-of-a-video-file

반응형