照相机(Camera)与视频录制(MediaRecorder)
来源:互联网 发布:java rc4加密 编辑:程序博客网 时间:2024/04/26 15:58
虽然手机中有自带的拍照与录像功能,但是免不了的我们在软件开发中的需要用到这两个功能。往往我们很容易忽略
这两个功能是如何实现的。像现在很多软件有人脸识别功能,只要一打开软件照相功能就自启动。当然在手机中同一时刻相机
只能被一个软件启动,这是我们该注意的细节。像这样好玩的东西当然不能错过。
相机功能比较好实现,关键要记住它不同的参数。
首先 我们用一个特定的控件SurfaceView来装载人像。
然后SurfaceView接受摄像头界面变化的信息:
surfaceView.getHolder().addCallback();
接下来重写三个方法:
sv_main_surface.getHolder().addCallback(new SurfaceHolder.Callback() {
@Override
// 预览界面被创建时调用,一般在这里打开照相机和设置照相机的一些参数
public void surfaceCreated(SurfaceHolder surfaceHolder) {
//打开照相机
camera = Camera.open();
//设置参数
Camera.Parameters parameters=camera.getParameters();
// 设置照片的输出格式
parameters.setPictureFormat(PixelFormat.JPEG);
// 设置照片的质量
parameters.set("jpeg-quality",85);
// 给照相机设置参数
camera.setParameters(parameters);
//将画面展示到SurfaceView
try {
camera.setPreviewDisplay(sv_main_surface.getHolder());
} catch (IOException e) {
e.printStackTrace();
}
//开启预览效果
camera.startPreview();
}
@Override
// 当预览界面的格式和大小发生改变时,触发
public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {
}
@Override
//当预览界面关闭时,触发
public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
//一般在这里执行销毁照相机的操作,释放内存
if(camera!=null){
camera.stopPreview();
camera.release();
camera=null;
}
}
});
最后就是保存成像的图片:
camera.takePicture(null, null, new Camera.PictureCallback() {
@Override
public void onPictureTaken(byte[] bytes, Camera camera) {
//技术:图片压缩技术
Bitmap bitmap=BitmapFactory.decodeByteArray(bytes,0,bytes.length);
try {
FileOutputStream fos=new FileOutputStream("/mnt/sdcard/Wwoo0"+System.currentTimeMillis()+".png");
bitmap.compress(Bitmap.CompressFormat.PNG,85,fos);
camera.stopPreview();
camera.startPreview();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
});
相机功能就大概可以实现了。接下来是视频录制,这个原理也差不多,同样的记住不同的参数是关键。
第一步也是用一个SurfaceView显示视频动画
然后使用MediaRecorder类进行视频录制,实例化一个MediaRecorder视频录制器,然后由一个开始
按钮控制开始参数设置:
mediaRecorder.reset();
//从照相机采集视频
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
//设置格式
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263);
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
//设置保存路径
mediaRecorder.setOutputFile("/mnt/sdcard/Wwoo0"+System.currentTimeMillis()+".mp4");
mediaRecorder.setPreviewDisplay(sv_recorder_surface.getHolder().getSurface());
try {
//预期准备
mediaRecorder.prepare();
//开始刻录
mediaRecorder.start();
} catch (IOException e) {
e.printStackTrace();
}
自然由一个结束按钮控制录制结束
public void stop(View view){
if(mediaRecorder!=null){
mediaRecorder.stop();
mediaRecorder.release();
mediaRecorder=null;
}
}
那么一个照相与一个录制功能也就快实现了,之所以是快呢,还有配置清单文件部分没有完成
<!-- 打开照相机的权限 -->
<uses-permission android:name="android.permission.CAMERA" />
<!--文件写进内存卡权限-->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<!--读内存卡文件权限-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!--打开录像机权限-->
<uses-permission android:name="android.permission.RECORD_AUDIO"></uses-permission>
- 照相机(Camera)与视频录制(MediaRecorder)
- Android:照相机(camera)与视频录制(Recorder)的实现
- Android Camera学习记录(一) 视频录制MediaRecorder
- android使用mediarecorder和camera录制视频
- 视频录制(一)—mediaRecorder介绍
- Camera preview变形和MediaRecorder录制视频太短崩的问题
- 安卓使用surfaceview+Camera+MediaRecorder实现视频录制
- 基于camera+SurfaceView+MediaRecorder的录制微视频
- Android 中使用MediaRecorder进行录像详解(视频录制)
- Android 中使用MediaRecorder进行录像详解(视频录制)
- Android 中使用MediaRecorder进行录像详解(视频录制)
- Android 中使用MediaRecorder进行录像详解(视频录制)
- Android 中使用MediaRecorder进行录像详解(视频录制)
- Android 中使用MediaRecorder进行录像详解(视频录制)
- Android 中使用MediaRecorder进行录像详解(视频录制)
- Android 中使用MediaRecorder进行录像详解(视频录制)
- Android 中使用MediaRecorder进行录像详解(视频录制)
- android MediaRecorder录制视频(可暂停、继续)
- IOS中label的自适应高度(四种方法)
- 迭代器简单介绍
- 简易的自定义播放器
- FreeMarker 入门篇
- easyUI属性及相应示例
- 照相机(Camera)与视频录制(MediaRecorder)
- 计算结构体的大小
- 史上最全的CSS hack方式一览
- ViBe算法原理和代码解析
- JavaScript编码问题
- 通过JavaScript 柯里化求加法运算引发的对JavaScript类型转换的思考
- 系统移植与NAND FLASH
- 【bzoj4034】树上操作 树链剖分+线段树
- Invalid action class configuration that references an unknown class named [XX]