qwe*_*ret 6 video time android
我已经用它来创建我的视频缩略图.代码如下所示:
videoGalleryThumbnails.add(ThumbnailUtils.extractThumbnail(ThumbnailUtils.createVideoThumbnail(
videoFile.getAbsolutePath(), MediaStore.Images.Thumbnails.MINI_KIND), 500, 200));
Run Code Online (Sandbox Code Playgroud)
但创建的缩略图是非常糟糕的时间.这恰好是视频是黑色的.现在我没有使用完全黑色的缩略图.
如何在特定时间拍摄视频缩略图?例如在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
}
Run Code Online (Sandbox Code Playgroud)
如果我用顶部的第一个代码替换标记为"从这里"到"到这里"的代码,它就可以工作.我还尝试了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);
Run Code Online (Sandbox Code Playgroud)
我不知道,如果确实需要OPTION_CLOSEST_SYNC,但看起来这是更好的编程方式.
感谢William Riley指出我正确的方向.