Как определить, является ли файл.3gp аудио или видео в Android
У меня есть приложение, которое позволяет пользователю импортировать медиа (видео, фото, аудио), которые затем будут управляться приложением (в качестве доказательства). Я обнаружил, что некоторые приложения для записи звука будут сохранять аудио в формате.3gp (в частности, мессенджер Whats App). Если я получаю MIME-тип, используя следующий код:
MimeTypeMap.getSingleton().getMimeTypeFromExtension(fileExtension);
он вернется как video/3gp, что означает, что мое приложение означает, что оно относится к типу "video" и пытается создавать эскизы, а что нет (я использую первую часть mime-типа, чтобы определить, к какому типу относится мое приложение), Однако это аудио, поэтому некоторые вещи, которые я ожидаю работать, не будут работать (например, создание эскиза для видео). Существуют ли какие-либо библиотеки или что-либо доступное для Android, которое позволило бы мне определить, является ли файл только видео аудио? Я полагаю, что я могу попытаться сделать миниатюру, и если это не удастся, предположим, что файл является аудио, но это немного растянуто, учитывая, что при создании миниатюры может возникнуть ряд проблем. Есть идеи?
4 ответа
Я нашел способ сделать это:
public static boolean is3gpFileVideo(File mediaFile) {
int height = 0;
try {
MediaPlayer mp = new MediaPlayer();
FileInputStream fs;
FileDescriptor fd;
fs = new FileInputStream(mediaFile);
fd = fs.getFD();
mp.setDataSource(fd);
mp.prepare();
height = mp.getVideoHeight();
mp.release();
} catch (Exception e) {
Log.e(TAG, "Exception trying to determine if 3gp file is video.", e);
}
return height > 0;
}
Таким образом, чтобы выяснить, есть ли в медиафайле видео, вы можете использовать это... Возможно, это не самый эффективный способ сделать это, но для чего-то, что редко делается в вашем приложении, это кажется разумным решением.
Если этот ключ существует, медиа содержит видео контент.
Я не проверял это решение, но вы можете попытаться получить эскиз для видео.
Bitmap thumbnail = ThumbnailUtils.createVideoThumbnail(videoPath,
MediaStore.Images.Thumbnails.MINI_KIND);
Если thumbnail
является null
тогда это аудио, иначе это видео.
Я проверил решение Алессандро Роаро, и оно работает для меня. Я использую это в настоящее время в моем приложении.
Я цитирую:
Я не проверял это решение, но вы можете попытаться получить эскиз для видео. Если миниатюра пуста, то это аудио, в противном случае это видео.
Bitmap thumbnail = ThumbnailUtils.createVideoThumbnail(videoPath,
MediaStore.Images.Thumbnails.MINI_KIND);