#android #file #kotlin #video #mime-types
#Android #файл #kotlin #Видео #mime-типы
Вопрос:
Я пытаюсь получить mimetype видеофайлов, используя приведенный ниже код.
Проблема: у меня есть файл, сохраненный как аудио, но его тип mimetype — video / 3gpp, и он также воспроизводится как аудио.. Как определить такой файл, который является аудио, но mimetype — это video / 3gpp в деталях, чтобы я мог исключить его из списка.
fun getFileMimeType(url: String): String {
var type: String = ""
try {
if (url.lastIndexOf(".") != -1) {
val ext: String = url.substring(url.lastIndexOf(".") 1)
val mime = MimeTypeMap.getSingleton()
type = mime.getMimeTypeFromExtension(ext)!!
}
} catch (e: Exception) {
}
return type
}
Ответ №1:
Предполагая, что это локальный файл, вы можете использовать MediaMetadataRetriever для получения информации метаданных о медиафайле.
В частности, вы можете проверить, установлено ли значение METADATA_KEY_HAS_VIDEO в true.
Пример в Kotlin:
val metadataRetriever = MediaMetadataRetriever()
metadataRetriever.setDataSource(context, Uri.fromFile(your3GPPFile))
val hasVideoKey = metadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_HAS_VIDEO)
if (hasVideoKey == "yes") {
//Include in your list or do whatever work
//you need here
}
Вы также можете использовать ExoPlayer и загрузить файл, а затем получить список дорожек с помощью
player.getCurrentTrackGroups()
Это вернет массив дорожек, которые вы можете перебирать и анализировать формат, чтобы проверить, содержат ли они видеодорожку.
Комментарии:
1. Большое вам спасибо. Решена проблема с помощью MediaMetadataRetriever
2. Это идеально. Мне это было нужно как запасной вариант для форматов контейнеров, таких как 3gpp, которые всегда возвращают video / 3gpp, даже если файл содержит только звуковую дорожку.