android 视频默认图片格式,Android获取视频文件某一帧并设置图片
在项目中,有时候需要抓取视频文件的某一帧图像做为预览图片,那到底应该怎么获取这个图片呢?
Android为我们提供了一个统一的接口用来获取多媒体文件的相关信息:MediaMetadataRetriever;
创建MediaMetadataRetriever对象`
MediaMetadataRetriever mmr=new MediaMetadataRetriever();
设置资源位置
String path="/storage/sdcard1"+"/Movies"+"/XiaomiPhone.mp4";
绑定资源
mmr.setDataSource(path);
//获取第一帧图像的bitmap对象
Bitmap bitmap=mmr.getFrameAtTime();
//加载到ImageView控件上
img.setImageBitmap(bitmap);
上面是单独的他其实需要子线程进行加载
详细问:网络/本地视频第一帧图片:https://www.jianshu.com/p/bd308c8371dd
我写了一个缓存视屏图片的工具类
package com.Image_Utils;
import android.content.Context;
import android.graphics.Bitmap;
import android.media.MediaMetadataRetriever;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Environment;
import android.support.v4.content.FileProvider;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
/**
* Created by Administrator on 2018/9/7 0007.
*/
public class MediaUtils
{
public static final int MEDIA_TYPE_IMAGE = 1;
public static final int MEDIA_TYPE_VIDEO = 2;
public static File file;
/**
*创建用于保存图像或视频的文件URI
*/
public static Uri getOutputMediaFileUri(Context context, int type)
{
Uri uri = null;
//适配Android N
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
{
return FileProvider.getUriForFile(context, context.getApplicationContext().getPackageName() + ".provider", getOutputMediaFile(type));
} else
{
return Uri.fromFile(getOutputMediaFile(type));
}
}
/**
* 创建保存图像或视频的文件
*/
public static File getOutputMediaFile(int type)
{
// 为了安全起见,您应该检查SD卡是否已安装。
//在执行此操作之前,使用Enguly.GutExalStReAgAgestEATE()。
File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES), "image");
// 如果希望创建的图像共享,则此位置最有效。
// 在应用程序之间并在卸载应用程序后继续执行。
// 如果存储目录不存在,则创建存储目录
if (!mediaStorageDir.exists())
{
if (!mediaStorageDir.mkdirs())
{
return null;
}
}
// 创建媒体文件名
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
File mediaFile;
if (type == MEDIA_TYPE_IMAGE)
{
mediaFile = new File(mediaStorageDir.getPath() + File.separator +
"IMG_" + timeStamp + ".jpg");
} else if (type == MEDIA_TYPE_VIDEO)
{
mediaFile = new File(mediaStorageDir.getPath() + File.separator +
"VID_" + timeStamp + ".mp4");
} else
{
return null;
}
file = mediaFile;
return mediaFile;
}
/**
* 获取视频的第一帧图片
*/
public static void getImageForVideo(String videoPath, OnLoadVideoImageListener listener)
{
LoadVideoImageTask task = new LoadVideoImageTask(listener);
task.execute(videoPath);
}
public static class LoadVideoImageTask extends AsyncTask
{
private OnLoadVideoImageListener listener;
public LoadVideoImageTask(OnLoadVideoImageListener listener)
{
this.listener = listener;
}
@Override
protected File doInBackground(String... params)
{
MediaMetadataRetriever mmr = new MediaMetadataRetriever();
String path = params[0];
if (path.startsWith("http"))
//获取网络视频第一帧图片
mmr.setDataSource(path, new HashMap());
else
//本地视频
mmr.setDataSource(path);
Bitmap bitmap = mmr.getFrameAtTime();
//保存图片
File f = getOutputMediaFile(MEDIA_TYPE_IMAGE);
if (f.exists())
{
f.delete();
}
try
{
FileOutputStream out = new FileOutputStream(f);
if(bitmap==null){
return null;
}
bitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
out.flush();
out.close();
} catch (FileNotFoundException e)
{
e.printStackTrace();
} catch (IOException e)
{
e.printStackTrace();
}
mmr.release();
return f;
}
@Override
protected void onPostExecute(File file)
{
super.onPostExecute(file);
if (listener != null)
{
listener.onLoadImage(file);
}
}
}
public interface OnLoadVideoImageListener
{
void onLoadImage(File file);
}
}
使用
MediaUtils.getImageForVideo(contentlistBean.getVideo_uri(), new MediaUtils.OnLoadVideoImageListener() {
@Override
public void onLoadImage(File file) {
mMVideoUriItem.thumbImageView.setImageBitmap(BitmapFactory.decodeFile(file.getPath()));
}
});
效果图
image.png
android 视频默认图片格式,Android获取视频文件某一帧并设置图片相关推荐
- java 将avi视频转换为mp4格式并获取视频文件信息
引入jar包 <!-- https://mvnrepository.com/artifact/ws.schild/jave-all-deps --><dependency>&l ...
- 【FFmpeg】java实现利用ffmpeg视频上传转码同时截取一帧保存为同名图片,并获取视频分辨率
〇.前情提要 完成了视频上传,接下来是给上传的视频保存一张同名的jpg文件在同样文件夹中,并且获取到视频的分辨率. macOS Catalina 10.15.1 ffmpeg version 4.3. ...
- android开机图片格式,Android平台启动图使用.9.png图片
概述 目前HBuilder|HBuilderX中仅定义几种标准分辨率的启动图配置,而实际上存在很多不同分辨率的手机,导致启动图会进行拉伸或压缩引起变形,Android平台为了解决此问题就出现了可以适配 ...
- 私人笔记 -- 将图片插入到指定的单元格位置,并设置图片的宽度和高度
/// <summary> /// 将图片插入到指定的单元格位置,并设置图片的宽度和高度. /// 注意:图片必须是绝对物理路径 /// </summary> /// < ...
- android 相册选择视频和图片格式,Android获取文件类型是图片还是视频
我们开发从相册分享图片到App的功能,开发完成后发现一个问题:我们设置的是用户可以选择多张图片到app,但是有一种情况是有的手机可以分享一张图片和一个视频,尴尬的是我们不支持视频分享.这就需要区分用户 ...
- Android之使用ThumbnailUtils类来获取视频第一帧缩略图
一.首先,来介绍ThumbnailUtils类,此类位于android.media包下,此类有一个公有的无参构造函数,有三个静态的公有方法,一个用来获取视频第一帧得到的Bitmap,另外两个方法用 ...
- android开发用百度识别图片格式,Android开发学习之路-机器学习库(图像识别)、百度翻译...
对于机器学习也不是了解的很深入,今天无意中在GitHub看到一个star的比较多的库,就用着试一试,效果也还行.比是可能比不上TensorFlow的,但是在Android上用起来比较简单,毕竟Tens ...
- android开发图片格式,Android程序开发如何处理图像格式类及图像转换
在Android程序开发过程中,明确哪些图像格式类(ImageFormat.PixelFormat及BitmapConfig等)及图像(JPG.PNG及BMP等)的转换方式非常重要,在以后的程序开发过 ...
- android webp转换jpg格式,Android使用webp格式图片的步骤
webp是Android推荐使用的一种图片格式,内存占用很小.使用webp图片是app瘦身和内存优化的很好的方式之一. 下面是webp的使用步骤介绍: 1.下载webp工具,这个google提供给我们 ...
最新文章
- Python学习之使用Python生成PDF报告
- python 列表推导式 - 列表字典取value
- 利用cmake查看OpenCV的源码的方法
- Xamarin.Android 使用 Encoding.GetEncoding(GB2312) 报错解决方案
- 揭开“云杀毒”的真面目
- 如何上传本地文件到github又如何删除自己的github仓库
- using(){},Close(),Dispose()的区别
- 11 、图解2个node环境下replica shard是如何分配的
- Java基础语法实例(2)——实习第二天
- cmd下载ftp文件
- python的类,复现assert和eval成功失败原因
- 还在为word排版而发愁?word的实验报告模板word数学建模模板免费领~(开头直接放百度网盘链接,直接拿去用就行)
- CRC冗余校验的真正原理之模2除法
- word怎样删除向下的箭头“↓”
- Git如何合并分支到主干及合并主干到分支
- Linux下rsh服务配置
- BurpSuite抓包出现建立安全连接失败(Software is Preventing Firefox From Safely Connecting to This Si)
- YOLOv7来临:论文解读附代码解析
- vue tsx render函数 transition动画不生效
- windows+ffmpeg+qsv实现inter核显加速视频解码编码
热门文章
- 解决Jupyter notebook安装后不自动跳转网页的方法
- 领域模型中分散的事务如何集中统一处理(C#解决方案)
- layui表格点击排序按钮后,表格绑定事件失效解决方法
- LSTM 时间序列数据的异常检测
- vue 上传图片视频组件,可拍照选择照片,解决苹果手机拍照旋转问题
- 项目pom.xml第一行报错解决方案
- 深入全面探究有未经处理的异常: 0xC00000FD: Stack overflow(栈溢出)问题!
- C# 出现System.TypeInitializationException类型初始值设定项引发异常
- SQL Server 2008还原数据库时出现“备份集中的数据库备份与现有的数据库不同”的解决方法
- 阿里云ECS使用SSH连接CentOS 6.9经常断线的问题解决:OperationTimedOut