首先是Camera类,在5.0上已经被废弃,不推荐使用但还是支持的。最新的是Camera2类,我还没有研究,据说用法完全不一样,反正也是一个坑跳入另外一个坑。

上面是简介和需要的权限,记得加上权限。
步骤在下面图里:
说了大体的流程去使用这个类,三个标important的条目,按照步骤走就好。需要注意的就是第5条,Pass a fully initialized SurfaceHolder,需要一个已经完全初始化完毕的surface,也就是你需要等surface初始化完毕之后才能调用setPreviewDisplay(SurfaceHolder)
所以最好把openCamera的工作放到surfaceHolder的回调里面去:like here:
@Override
public void surfaceCreated(SurfaceHolder holder) { System.out.println("surfaceCreated");
camera = Camera.open();
}

然后我们要做的是对Camera进行configure

private void initCamera() {

parameters = camera.getParameters();
parameters.setFlashMode("off"); // 无闪光灯
parameters.setWhiteBalance(Camera.Parameters.WHITE_BALANCE_AUTO);
parameters.setSceneMode(Camera.Parameters.SCENE_MODE_AUTO);
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
parameters.setPreviewFormat(ImageFormat.YV12);
parameters.setPictureSize(camWidth, camHeight);
parameters.setPreviewSize(camWidth, camHeight);
//这两个属性 如果这两个属性设置的和真实手机的不一样时,就会报错
camera.setParameters(parameters);
// 横竖屏镜头自动调整
if (this.getResources().getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE) {
parameters.set("orientation", "portrait"); //
parameters.set("rotation", ); // 镜头角度转90度(默认摄像头是横拍)
camera.setDisplayOrientation(); // 在2.2以上可以使用
} else// 如果是横屏
{
parameters.set("orientation", "landscape"); //
camera.setDisplayOrientation(); // 在2.2以上可以使用
} byte[] buf = new byte[camWidth * camHeight * / ];
camera.addCallbackBuffer(buf);
camera.setPreviewCallback(this);
}
这些东西我是在surfaceChanged里面调用开启的:
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { System.out.println("surfaceChanged");
initCamera();
try {
camera.setPreviewDisplay(holder);
camera.startPreview();
System.out.println("startPreview");
} catch (IOException e) {
e.printStackTrace();
}
}

上面我们对camera做了初始化并设置了setPreviewCallback,所以我们对图像的处理或者视频的处理就可以在Camera.PreviewCallback它的回调

@Override
public void onPreviewFrame(byte[] data, Camera camera) { if (data == null) {
return;
}
System.out.println("onPreviewFrame");
int ret = avcCodec.offerEncoder(data, h264);
}
里面做处理,之前设置了camera.setPreviewCallbackWithBuffer();
结果onPreviewFrame只在open的时候调用一次,找了一天的原因。。。。。。。。。。。。才发现是这儿。 
先这样,后续做encode再补充。
 
github resp added.
https://github.com/yocn/CameraPreview

surfaceView和Camera配合进行摄像头的预览的更多相关文章

  1. 【Android】魅族Flyme OS 3摄像头无法预览的问题

    错误代码: 12-12 14:28:34.692: E/AndroidRuntime(1524): java.lang.RuntimeException: startPreview failed 12 ...

  2. Android Camera API/Camera2 API 相机预览及滤镜、贴纸等处理

    Android Lollipop 添加了Camera2 API,并将原来的Camera API标记为废弃了.相对原来的Camera API来说.Camera2是又一次定义的相机 API,也重构了相机 ...

  3. android Camera拍照 及 MediaRecorder录像 预览图像差90度

    Camera拍照: 今天做照相机程序,结果写好了发现出问题了,预览的图像差90度.相关源代码如下: Camera.Parameters params = camera.getParameters(); ...

  4. Android 举例说明自己的定义Camera图片和预览,以及前后摄像头切换

    如何调用本地图片,并调用系统拍摄的图像上一博文解释(http://blog.csdn.net/a123demi/article/details/40003695)的功能. 而本博文将通过实例实现自己定 ...

  5. Android摄像头:只拍摄SurfaceView预览界面特定区域内容(矩形框)---完整(原理:底层SurfaceView+上层绘制ImageView)

    Android摄像头:只拍摄SurfaceView预览界面特定区域内容(矩形框)---完整实现(原理:底层SurfaceView+上层绘制ImageView) 分类: Android开发 Androi ...

  6. android camera 摄像头预览画面变形

    问题:最近在处理一下camera的问题,发现在竖屏时预览图像会变形,而横屏时正常.但有的手机则是横竖屏都会变形. 结果:解决了预览变形的问题,同时支持前后摄像头,预览无变形,拍照生成的jpg照片方向正 ...

  7. Camera实现预览、拍照

    1.利用Intent方法实现拍照并保存 在菜单或按钮的选择操作中调用如下代码,开启系统自带Camera APP,并传递一个拍照存储的路径给系统应用程序,具体如下: imgPath = "/s ...

  8. Android Camera开发:使用GLSurfaceView预览Camera 基础拍照

    GLSurfaceView是OpenGL中的一个类,也是可以预览Camera的,而且在预览Camera上有其独到之处.独到之处在哪?当使用Surfaceview无能为力.痛不欲生时就只有使用GLSur ...

  9. WebRTC中Android Demo中的摄像头从采集到预览流程

    APPRTC-Demo调用流程 1.CallActivity#onCreate 执行startCall开始连接或创建房间 2.WebSocketClient#connectToRoom 请求一次服务器 ...

随机推荐

  1. CentOS 6.4编译安装淘宝web服务器Tengine

    Tengine 是由淘宝核心系统部基于Nginx开发的Web服务器,它在Nginx的基础上,针对大访问量网站的需求,添加了很多功能和特性.Tengine的性能和稳定性已经在大型的网站如淘宝网,淘宝商城 ...

  2. google zxing 二维码扫描(android client分析)

    一.总体架构 二.架构分析 1. com.google.zxing.client.android AmbientLightManager 环境光线管理 Detects ambient light an ...

  3. bzoj3140: [Hnoi2013]消毒

    Description 最近在生物实验室工作的小T遇到了大麻烦. 由于实验室最近升级的缘故,他的分格实验皿是一个长方体,其尺寸为a*b*c,a.b.c 均为正整数.为了实验的方便,它被划分为a*b*c ...

  4. /proc/sys/net/ipv4/ip_forward

    ip地址分公有地址和私有地址,public address是由INIC(internet network information center)负责,这些ip地址分配给注册并向INIC提出申请的组织机 ...

  5. 优化MYSQL FILESORT

    用Explain分析SQL语句的时候,经常发现有的语句在Extra列会出现Using filesort,根据mysql官方文档对他的描述: 引用 MySQL must do an extra pass ...

  6. 转:简单介绍 P3P 技术

    原文来自于:http://blog.csdn.net/ghj1976/article/details/4889219 以 Internet Explorer 为例,默认情况下,IE的隐私策略如下图所设 ...

  7. BZOJ 1012 最大数

    Description 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作.语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值.限制:L不超过当前数列的长度. 2. ...

  8. CentOS 5升级Python版本(2.4>2.7)

    安装SALT时,需要这样作,公司有一批REDHAT5的,弄起来... 然后却是: Missing Dependency: python(abi) = 2.6 is needed by package ...

  9. zoj 1372

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1372 #include<iostream> #include& ...

  10. HOWTO:保存nohup日志

    默认情况下,nohup的日志将保存在一个名为nohup.out的文件中.随着时间的推移,nohup.out文件会变得越来越大,直到某一天程序莫名的崩溃.这种情况是可以预防的,有很多策略都可以解决这个问 ...