Ответ 1
Большинство медиа-API - это просто связующий клиент медиасервера, который работает в своем собственном процессе. Вы можете попытаться сделать файл общедоступным.
Как получить миниатюру видео для частного приложения? В частности, есть способ извлечь видео кадры из файла .mpeg напрямую?
Context#openFileOutput(fileName, Context.MODE_PRIVATE)
- типичный путь к файлу выглядит следующим образом: /data/data/[package.name]/files/[fileName].mp4
- FYI Я уже пробовал использовать Context.MODE_WORLD_READABLE
вместо этого из Context.MODE_PRIVATE
, но это не помогло.Environment#getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES)
), миниатюра должна отображаться во время видео находится в частном хранилище приложений.Кажется, что ThumbnailUtils.createVideoThumbnail(String, int)
отлично работает для файла после его перемещения в общий каталог (независимо от его добавления в MediaStore), но молча завершает работу (возвращает null
), когда файл находится во внутреннем хранилище.
Большинство медиа-API - это просто связующий клиент медиасервера, который работает в своем собственном процессе. Вы можете попытаться сделать файл общедоступным.
Конечно, вы не можете использовать материал MediaStore для частных носителей. Я бы использовал библиотеку обработки изображений, если это вообще возможно. Я знаю OpenCV может сделать это легко, извлекая/изменяя размер кадра. - просмотрите среднюю часть страницы 2.
Вы пробовали с помощью нижеприведенного API,
MediaMetadataRetriever:: getFrameAtTime(), обратитесь к Android-разработчик-страница-MediaMetadataRetriever
пример кода:
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
try {
retriever.setDataSource(filePath);
bitmap = retriever.getFrameAtTime(0, MediaMetadataRetriever.OPTION_CLOSEST);
} catch (IllegalArgumentException ex) {
// Assume this is a corrupt video file
} catch (RuntimeException ex) {
// Assume this is a corrupt video file. }
Вышеприведенная часть кода работала для меня!! но мой файл доступен в общих папках.
Это работает на Gingerbread и up:
try {
Uri location = Uri.fromFile(context.getFileStreamPath(filePath));
MediaMetadataRetriever media = new MediaMetadataRetriever();
ParcelFileDescriptor parcel = ParcelFileDescriptor.open(new File(location.getPath()),ParcelFileDescriptor.MODE_READ_ONLY);
media.setDataSource(parcel.getFileDescriptor());
Bitmap thumb = media.getFrameAtTime(0 , MediaMetadataRetriever.OPTION_CLOSEST );
thumbnail.setImageBitmap(thumb);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}