我已经可以从我的视频创建缩略图了。
代码如下所示:
videoGalleryThumbnails.add(ThumbnailUtils.extractThumbnail(ThumbnailUtils.createVideoThumbnail(
videoFile.getAbsolutePath(), MediaStore.Images.Thumbnails.MINI_KIND), 500, 200));
但创建缩略图的时机非常糟糕。正是在视频变黑的时候。现在我没有使用全黑的缩略图。
如何在特定时间拍摄视频的缩略图?例如。 00:31 还是 01:44?
还是不可能?
我也尝试使用 MediaMetadataRetriever,但我只得到一个白色图像。代码看起来像这样
File tempVideoList[] = (Environment.getExternalStoragePublicDirectory(PATH_VIDEO_GALLERY))
.listFiles();
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
Bitmap myBitmap=null;
for (File videoFile : tempVideoList) {
if (videoFile.isFile()) {
//from here
try {
retriever.setDataSource(videoFile.getAbsolutePath());
myBitmap = retriever.getFrameAtTime(11); //at 11th second
} catch (Exception ex) {
Log.i("MyDebugCode", "MediaMetadataRetriever got exception:" + ex);
}
videoGalleryThumbnails.add(myBitmap);
//to here
}
如果我用顶部的第一个代码替换标记为“从这里”到“到这里”的代码,它就可以工作。
我还尝试了 MediaMetadataRetriever.OPTION_CLOSEST 和 OPTION_CLOSEST_SYNC 和 OPTION_NEXT_SYNC。
好,我知道了。
MediaMetadataRetriever 绝对是正确的选择。问题是,它以微秒而不是秒来计算时间。解决方案如下所示:
try {
retriever.setDataSource(videoFile.getAbsolutePath());
int timeInSeconds = 30;
myBitmap = retriever.getFrameAtTime(timeInSeconds * 1000000,
MediaMetadataRetriever.OPTION_CLOSEST_SYNC);
} catch (Exception ex) {
Log.i("MyDebugCode", "MediaMetadataRetriever got exception:" + ex);
}
videoGalleryThumbnails.add(myBitmap);
我不知道是否确实需要 OPTION_CLOSEST_SYNC,但看起来这是更好的编程方式。
感谢威廉·莱利为我指明了正确的方向。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)