Как определить, является ли файл.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;
    }

Таким образом, чтобы выяснить, есть ли в медиафайле видео, вы можете использовать это... Возможно, это не самый эффективный способ сделать это, но для чего-то, что редко делается в вашем приложении, это кажется разумным решением.

METADATA_KEY_HAS_VIDEO

Если этот ключ существует, медиа содержит видео контент.

Я не проверял это решение, но вы можете попытаться получить эскиз для видео.

Bitmap thumbnail = ThumbnailUtils.createVideoThumbnail(videoPath,
            MediaStore.Images.Thumbnails.MINI_KIND);

Если thumbnail является null тогда это аудио, иначе это видео.

Я проверил решение Алессандро Роаро, и оно работает для меня. Я использую это в настоящее время в моем приложении.

Я цитирую:

Я не проверял это решение, но вы можете попытаться получить эскиз для видео. Если миниатюра пуста, то это аудио, в противном случае это видео.

Bitmap thumbnail = ThumbnailUtils.createVideoThumbnail(videoPath,
MediaStore.Images.Thumbnails.MINI_KIND);
Другие вопросы по тегам