Android: как получить миниатюру из видео (Uri)
Я хочу миниатюру из видео в любой конкретной позиции. Я использую ThumbnailUtils для того, чтобы получить миниатюру из видео URI и назначения для растрового изображения, но я получаю нулевое значение в растровом изображении.
Любые причины, как это происходит и как я могу это исправить?
selectedVideoUri = data.getData();
bitmap = ThumbnailUtils.createVideoThumbnail(getRealPathFromURI(videoUri),
MediaStore.Images.Thumbnails.MINI_KIND);
public String getRealPathFromURI(Uri contentUri) {
String res = null;
String[] proj = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(contentUri, proj, null, null, null);
if(cursor.moveToFirst()){;
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
res = cursor.getString(column_index);
}
cursor.close();
return res;
}
4 ответа
Вы можете использовать Glide для загрузки большого пальца непосредственно в просмотр изображений
Glide.with(activity).load(videoPath).into(imageview);
Это поддерживается Android изначально с использованием метода MediaPlayer SeekTo
Если вы просто хотите показать местозаполнитель видео для отображения, вы можете использовать следующий код:
video_view.setVideoPath(videoPath);
video_view.seekTo(3000); // in milliseconds i.e. 3 seconds
Сначала загрузите список видео с его путем в список массивов, используя метод ниже
private void loadData(String currentAppPath) {
hiddenpath = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + currentAppPath);
String[] fileName = hiddenpath.list();
try{
for(String f : fileName){
if(HelpperMethods.isVideo(f)){
videoFiles.add(hiddenpath.getAbsolutePath()+"/"+f);
}
}
new Loader().loadImages(Environment.getExternalStorageState());
}catch (Exception e){
}
}
Вам нужен метод Loader(). LoadImages, поэтому я объявляю этот метод в отдельном файле класса. см. ниже код
public class Loader {
String[] imagieFiles;
public void loadImages(String path){
Log.e("path",path);
System.out.println(path);
} }
Затем после вы можете использовать код ниже, чтобы получить видео миниатюру. По умолчанию в каждом магазине видео миниатюр двух размеров.
1) MINI - MediaStore.Images.Thumbnails.MINI_KIND и
2) MICRO - MediaStore.Images.Thumbnails.MICRO_KIND
Bitmap thumb = ThumbnailUtils.createVideoThumbnail(filePath,
MediaStore.Images.Thumbnails.MINI_KIND);
BitmapDrawable bitmapDrawable = new BitmapDrawable(thumb);
contentViewHolder.videoView.setImageBitmap(thumb);
ThumbnailUtils
возвращается
null
когда файл или видео повреждены.
но я хотел использовать только
Uri
и это хорошее решение для этого:
val mmr = MediaMetadataRetriever()
mmr.setDataSource(videoUri)
val thummbnailBitmap = mmr.frameAtTime
imageView.setImageBitmap(thummbnailBitmap)