Nano Hash - криптовалюты, майнинг, программирование

Не удается получить миниатюру видео в Android 2.0+

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

В моем приложении я сначала позволяю пользователю выбрать видео с помощью:

startActivityForResult(new Intent(Intent.ACTION_GET_CONTENT).setType("video/*"), ACTIVITY_PICKVIDEO);

Затем я определяю идентификатор видео с помощью:

fileID = Integer.parseInt(contentUri.getLastPathSegment());

Таким образом, видео content://media/external/video/media/5 будет иметь идентификатор 5.

Затем я пытаюсь получить растровое изображение миниатюры с помощью:

ContentResolver crThumb = getContentResolver();
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 1;
Bitmap curThumb = MediaStore.Video.Thumbnails.getThumbnail(crThumb, fileID, MediaStore.Video.Thumbnails.MICRO_KIND, options);

Исключение не выдается, но растровое изображение имеет ширину и высоту -1. Я не уверен, что идентификатор, необходимый в getThubnail(), на самом деле является идентификатором, который я определил выше.

Кто-нибудь знает рабочий пример, как получить растровое изображение миниатюры, если у вас есть содержимое Uri?

Интересно (может быть так), я получаю null при попытке с MediaStore.Video.Thumbnails.MINI_KIND в качестве размера эскиза и IllegalArgumentException ("Unsupported kind: 2") при попытке FULL_SCREEN_KIND.

Я использую Motorola Milestone с Android 2.1.

EDIT: я также пытался получить идентификатор с запросом BaseColumns._ID, но он оказался таким же, как в Uri (в данном примере _ID равен 5).


Ответы:


1

для получения идентификатора видео попробуйте это

String[] proj = {
    MediaStore.Video.Media._ID,
        MediaStore.Video.Media.DISPLAY_NAME,
    MediaStore.Video.Media.DATA
};
Cursor cursor = managedQuery(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, 
                                    proj, MediaStore.Video.Media.DISPLAY_NAME+"=?",new String[] {"name.mp4"}, null);
cursor.moveToFirst()
fileid = cursor.getLong(cursor.getColumnIndex(MediaStore.Video.Media._ID));

для получения эскиза:

ContentResolver crThumb = getContentResolver();
Bitmap curThumb = MediaStore.Video.Thumbnails.getThumbnail(crThumb,fileid, MediaStore.Video.Thumbnails.MICRO_KIND, options);
iv2.setImageBitmap(curThumb);

здесь iv2 - это изображение, а name.mp4 будет представлять имя вашего файла

25.02.2011
  • @Manuel: используйте эту функцию android.media.ThumbnailUtils.createVideoThumbnail(путь,MediaStore.Video.Thumbnails.MINI_KIND); здесь путь - это путь к файлу, с помощью которого вы можете получить миниатюру определенного видео. 14.03.2011
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..