88 Stimmen

Wie kann man die Dauer einer Videodatei ermitteln?

Ich bin ein Anfänger in der Android-Programmierung.

Ich schreibe eine Anwendung, die alle Videodateien in einem Ordner auflistet und Informationen über alle Videos in diesem Ordner anzeigt. Aber wenn ich versuche, die Videodauer zu erhalten, gibt es null zurück und ich kann den Weg nicht finden, um es zu erhalten.

Kann mir irgendjemand helfen?

Unten ist mein Code:

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

1voto

Ashok Domadiya Punkte 1114
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;
  }

1voto

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

Hier wird die Dauer der Videodatei angegeben

0voto

Konstantin Konopko Punkte 4890
object MediaHelper {

    const val PICK_IMAGE_FROM_DEVICE = 100
    const val PICK_MEDIA_FROM_DEVICE = 101

    fun openPhoneGalleryForImage(fragment: Fragment){
        Intent(Intent.ACTION_GET_CONTENT).run {
            this.type = "image/*"
            fragment.startActivityForResult(this, PICK_IMAGE_FROM_DEVICE)
        }
    }

    fun openPhoneGalleryForMedia(fragment: Fragment){
        Intent(Intent.ACTION_GET_CONTENT).run {
            this.type = "*/*"
            fragment.startActivityForResult(this, PICK_MEDIA_FROM_DEVICE)
        }
    }

    fun getMediaType(context: Context, source: Uri): MediaType? {
        val mediaTypeRaw = context.contentResolver.getType(source)
        if (mediaTypeRaw?.startsWith("image") == true)
            return MediaType.Image
        if (mediaTypeRaw?.startsWith("video") == true)
            return MediaType.Video
        return null
    }

    fun getVideoDuration(context: Context, source: Uri): Long? {
        if (getMediaType(context, source) != MediaType.Video) 
            return null
        val retriever = MediaMetadataRetriever()
        retriever.setDataSource(context, source)
        val duration = retriever.extractMetadata(METADATA_KEY_DURATION)
        retriever.release()
        return duration?.toLongOrNull()
    }
}

enum class MediaType {
    Image {
        override val mimeType: String = "image/jpeg"
        override val fileExtension: String = ".jpg"
    },
    Video {
        override val mimeType: String = "video/mp4"
        override val fileExtension: String = ".mp4"
    };

    abstract val mimeType: String
    abstract val fileExtension: String
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X