本人也是初学者,但经过长时间的努力,弄出了点成果。在这里总结一下,免得以后会忘掉。现在实现的功能是拍摄视频,并对视频进行处理。将视频提取出指定数目的图片。
在保存视频的时候,会遇到编码格式的问题,楼主之前也被这个问题困扰了好久,对于不同的机型,编码格式是不同的。所以我们在保存的时候应该获取使用手机的编码格式:
//获取当前手机视频的编码格式
profile = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH);
codec = profile.videoCodec;
得到的codec是int类型,对应的是H263、H264、Mp4编码格式。设置编码格式的时候就可以直接用:
// 设置视频文件的输出格式(必须在设置声音编码格式、图像编码格式之前设置)
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
// 设置图像编码的格式
mRecorder.setVideoEncoder(codec);
安卓本身提供了对视频提取帧的方法:
Bitmap bitmap = retriever.getFrameAtTime((23-i) * 125 * 1000,MediaMetadataRetriever.OPTION_CLOSEST);
这是根据时间来对视频提取帧数。得到的是bitmap可用输出流保存为JPEG或者PNG的格式:
File jpgFile = new File(fileFolder, i + ".png");
FileOutputStream fos = null;
try {
fos = new FileOutputStream(jpgFile);
// 第一个参数:格式 第二个参数:品质 第三个参数:
bitmap.compress(CompressFormat.PNG, 100, fos);
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
如果是PNG,那后面的参数100基本舍不设置都没多大影响。如果是JPEG,则后面的参数代表的是保存图片的质量。100表示原图片品质,越小品质越差。我在整个线程中没有用到按钮点击,所以当视频拍摄完毕之后,需要自动的去处理图片,就可以写一个延迟的线程。等拍摄完毕自动处理视频,将图片保存到SD卡中。