1.获取本地视频的第一帧图片
MediaMetadataRetriever media = new MediaMetadataRetriever();
media.setDataSource(videoPath);// videoPath 本地视频的路径
Bitmap bitmap = media.getFrameAtTime(1, MediaMetadataRetriever.OPTION_CLOSEST_SYNC );
mIvBigShow.setImageBitmap(bitmap);//对应的ImageView赋值图片
2.获取网络视频的第一帧图片
封装的一个方法,直接调用,传入网络视频地址就可以
public static Bitmap createVideoThumbnail(String filePath, int kind)
{
Bitmap bitmap = null;
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
try
{
if (filePath.startsWith("http://")
|| filePath.startsWith("https://")
|| filePath.startsWith("widevine://"))
{
retriever.setDataSource(filePath, new Hashtable<String, String>());
}
else
{
retriever.setDataSource(filePath);
}
bitmap = retriever.getFrameAtTime(0, MediaMetadataRetriever.OPTION_CLOSEST_SYNC); //retriever.getFrameAtTime(-1);
}
catch (IllegalArgumentException ex)
{
// Assume this is a corrupt video file
ex.printStackTrace();
}
catch (RuntimeException ex)
{
// Assume this is a corrupt video file.
ex.printStackTrace();
}
finally
{
try
{
retriever.release();
}
catch (RuntimeException ex)
{
// Ignore failures while cleaning up.
ex.printStackTrace();
}
}
if (bitmap == null)
{
return null;
}
if (kind == MediaStore.Images.Thumbnails.MINI_KIND)
{//压缩图片 开始处
// Scale down the bitmap if it's too large.
int width = bitmap.getWidth();
int height = bitmap.getHeight();
int max = Math.max(width, height);
if (max > 512)
{
float scale = 512f / max;
int w = Math.round(scale * width);
int h = Math.round(scale * height);
bitmap = Bitmap.createScaledBitmap(bitmap, w, h, true);
}//压缩图片 结束处
}
else if (kind == MediaStore.Images.Thumbnails.MICRO_KIND)
{
bitmap = ThumbnailUtils.extractThumbnail(bitmap,
96,
96,
ThumbnailUtils.OPTIONS_RECYCLE_INPUT);
}
return bitmap;
}
调用方法
mIvBigShow.setImageBitmap(createVideoThumbnail(videoPath,MediaStore.Images.Thumbnails.MINI_KIND));