Я хочу создать миниатюру видео из пути к SD-карте. Как я могу это сделать?
Как создать миниатюру видео из пути к видеофайлу в Android?
Ответы (3)
Вы можете использовать класс ThumbnailUtils
, чтобы получить миниатюру видео из видеофайла.
createVideoThumbnail()
- это метод, который возвращает Bitmap (миниатюру) видео из пути к видеофайлу.
Из документов Android:
общедоступное статическое растровое изображение createVideoThumbnail (String filePath, тип int)
Создайте миниатюру для видео. Может возвращать значение null, если видео повреждено или формат не поддерживается.
Вы можете создать VideoThumbnail из пути SD-карты следующим образом.
Bitmap thumb = ThumbnailUtils.createVideoThumbnail(filePath, Thumbnails.MINI_KIND);
Используя ThumbnailUtils
, вы можете создавать эскизы двух типов.
Тип
MediaStore.Images.Thumbnails.MICRO_KIND
создаст миниатюру размером 96 x 96.MediaStore.Images.Thumbnails.MINI_KIND
создаст миниатюру размером 512 x 384.
Я надеюсь, что это помогает!
Пожалуйста, проверьте мой код, надеюсь, он вам поможет
/**
* Retrieve video frame image from given video path
*
* @param p_videoPath
* the video file path
*
* @return Bitmap - the bitmap is video frame image
*
* @throws Throwable
*/
@SuppressLint("NewApi")
public static Bitmap retriveVideoFrameFromVideo(String p_videoPath)
throws Throwable
{
Bitmap m_bitmap = null;
MediaMetadataRetriever m_mediaMetadataRetriever = null;
try
{
m_mediaMetadataRetriever = new MediaMetadataRetriever();
m_mediaMetadataRetriever.setDataSource(p_videoPath);
m_bitmap = m_mediaMetadataRetriever.getFrameAtTime();
}
catch (Exception m_e)
{
throw new Throwable(
"Exception in retriveVideoFrameFromVideo(String p_videoPath)"
+ m_e.getMessage());
}
finally
{
if (m_mediaMetadataRetriever != null)
{
m_mediaMetadataRetriever.release();
}
}
return m_bitmap;
}
Измените вышеуказанный метод в соответствии с вашими потребностями.
Если вы непосредственно создаете миниатюры следующим образом
Bitmap thumb = ThumbnailUtils.createVideoThumbnail(path,
MediaStore.Images.Thumbnails.MINI_KIND);
Тогда есть проблема с этим методом, если вы создаете эскизы для большого набора видео (для большого количества видео). приложение зависнет до тех пор, пока не будут загружены все эскизы, потому что весь процесс выполняется в основном потоке.
Использовать SuziLoader
Этот загрузчик будет загружать эскизы для видео, которые локально хранятся в вашей файловой системе в фоновом режиме.
String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/video.mp4";
ImageView mThumbnail = (ImageView) findViewById(R.id.thumbnail);
SuziLoader loader = new SuziLoader(); //Create it for once
loader.with(MainActivity.this) //Context
.load(path) //Video path
.into(mThumbnail) // imageview to load the thumbnail
.type("mini") // mini or micro
.show(); // to show the thumbnail
Чтобы получить эту зависимость, выполните следующие действия.
Шаг 1. Добавьте репозиторий JitPack в файл сборки
Добавьте его в корневой файл build.gradle в конце репозиториев:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
Шаг 2. Добавьте зависимость
dependencies {
compile 'com.github.sushinpv:SuziVideoThumbnailLoader:0.1.0'
}
ДОБАВИТЬ ЧТЕНИЕ ВНЕШНЕГО ХРАНИЛИЩА Разрешение в манифесте
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>