Как узнать, является ли файл .3gp аудио или видео в android

У меня есть приложение, которое позволяет пользователю импортировать мультимедиа (видео, фотографии, аудио), которые затем будут управляться приложением (в качестве доказательства). Я обнаружил, что некоторые приложения для записи звука сохраняют звук в формате .3gp (в частности, мессенджер Whats App). Если я получу тип пантомимы, используя следующий код:

MimeTypeMap.getSingleton().getMimeTypeFromExtension(fileExtension);

он вернется как video / 3gp, что мое приложение означает, что оно относится к типу «видео» и пытается создать эскизы, а что нет (я использую первую часть типа mime, чтобы определить, к какому типу мое приложение относит его) . Однако это звук, поэтому некоторые вещи, которые, как я ожидаю, будут работать, не будут работать (например, создание миниатюры для видео). Есть ли какие-либо библиотеки или что-нибудь, доступное для Android, что позволило бы мне определить, является ли файл только видео-аудио? Я полагаю, я могу попытаться создать эскиз, и если это не удастся, предположим, что файл является аудио, но это немного натянуто, учитывая ряд других проблем, которые могут пойти не так при создании эскиза. Любые идеи?


person Matt Wolfe    schedule 27.10.2011    source источник


Ответы (4)


METADATA_KEY_HAS_VIDEO

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

person Reno    schedule 27.10.2011

Я придумал, как это сделать:

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

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

person Matt Wolfe    schedule 27.10.2011
comment
mp.prepare (); на самом деле требуется (хотя в документации сказано иначе). В моем тесте, если я не вызывал подготовку к объекту медиаплеера, высота всегда была 0, независимо от того, было ли это аудио или видео. - person Matt Wolfe; 29.11.2011

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

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

Если thumbnail равно null, то это звук, в противном случае - видео.

person Alessandro Roaro    schedule 10.12.2013

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

Я цитирую:

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

Bitmap thumbnail = ThumbnailUtils.createVideoThumbnail(videoPath,
MediaStore.Images.Thumbnails.MINI_KIND);
person Harry Stroker    schedule 24.04.2014