请教各位关于用camera类做一个关于预览SurfaceView,然后通过 public void onPreviewFrame(byte[] data, Camera camera)获取data转换为RGB值(只需要获取数据流不需要转化为图片)。在这个过程中我的代码总是在手机上有闪退的现象,我不太知道 public void surfaceCreated,public void surfaceChanged,public void surfaceDestroyed;具体是怎么用的。能麻烦您写个Demo吗?谢谢

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

SurfaceView view = (SurfaceView) findViewById(R.id.surface_view);

view.getHolder().addCallback(this);

//view.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

uStart=(Button) findViewById(R.id.start);

uStart.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

if(camera!=null){

if(isPreview)

camera.stopPreview();

camera.release();

camera=null;

System.out.println("----结束-----");

}

}

});

}

public void surfaceCreated(SurfaceHolder holder) {

}

public void surfaceChanged(SurfaceHolder holder, int format, int width,

int height) {

try{

camera = Camera.open();

camera.setPreviewDisplay(holder);

Parameters params = camera.getParameters();

params.setPreviewSize(300, 200);

camera.setDisplayOrientation(90);

camera.setParameters(params);

camera.startPreview() ;

camera.setPreviewCallback(this);

}catch(Exception e){

e.printStackTrace();

}

isPreview=true;

}

public void surfaceDestroyed(SurfaceHolder holder) {

if(camera != null) camera.release() ;

camera = null ;

}

public void onPreviewFrame(byte[] data, Camera camera) {

Log.i("jefry", "vedio data come ...");

System.out.println("--------运行---------");

}

}

/*int w=camera.getParameters().getPreviewSize().width;

int h=camera.getParameters().getPreviewSize().height;

save(w,h,data);

}

public int decodeYUV420SP(int[] rgb, byte[] yuv420sp, int width, int height)

{

final int frameSize = width * height;

for (int j = 0, yp = 0; j < height; j++) {

int uvp = frameSize + (j >> 1) * width, u = 0, v = 0;

for (int i = 0; i < width; i++, yp++) {

int y = (0xff & ((int) yuv420sp[yp])) - 16;

if (y < 0) y = 0;

if ((i & 1) == 0) {

v = (0xff & yuv420sp[uvp++]) - 128;

u = (0xff & yuv420sp[uvp++]) - 128;

}

int y1192 = 1192 * y;

int r = (y1192 + 1634 * v);

int g = (y1192 - 833 * v - 400 * u);

int b = (y1192 + 2066 * u);

if (r < 0) r = 0; else if (r > 262143) r = 262143;

if (g < 0) g = 0; else if (g > 262143) g = 262143;

if (b < 0) b = 0; else if (b > 262143) b = 262143;

rgb[yp] = 0xff000000 | ((r << 6) & 0xff0000) | ((g >> 2) & 0xff00) | ((b >> 10) & 0xff);

// for(int i=0;i

System.out.println("**********"+rgb[i]);

}

}

writeDataToSD(rgb);

return rgb[width];

}

public void save(int w,int h,byte[] data){

//预览编码为YUV420SP的视频流,需转换为RGB编码

int[] RGB=new int[w*h];

int[] RGBData = new int[w* h];

byte[] mYUVData = new byte[data.length];

System.arraycopy(data,0, mYUVData, 0,data.length);

//RGB[w]=decodeYUV420SP(RGBData,mYUVData,w,h);

for(int i=0;i

System.out.println(RGB[i]);

}

public void writeDataToSD(int[] data){

String dir=Environment.getExternalStorageDirectory().getParent()+"/"+"帧数据流"+"/";

myDir = new File(dir);

if(!myDir.exists()){

//mkdirs()可以创建多级目录

myDir.mkdirs();

}

file=new File(myDir.getAbsoluteFile(),"preview.txt");

if(!file.exists()){

try{

流的对象

RandomAccessFile raf = new RandomAccessFile(file, "rw");

//将文件记录指针移动到最后

raf.seek(file.length());

for(int i = 0;i

// 开始写入数据

raf.writeFloat(data[i]);

}

// 关闭流的使用

raf.close();

}catch(Exception ex){

Toast.makeText(MainActivity.this, "文件写入失败", 1000).show();

}

}

}

}

*/

android camera 预览 数据流,camera,SurfaceView实时预览获取帧数据,在手机上总是闪退...相关推荐

  1. h5+app Android上架华为应用市场被拒原因“拒绝获取手机权限后app会闪退“以及隐私政策问题

    h5+app Android上架华为应用市场被拒原因"拒绝获取手机权限后app会闪退" 华为应用市场报错:拒绝获取手机权限后app会闪退,此问题解决方案如下: 在manifest. ...

  2. 【Android】高德地图在Debug模式下运行正常但是打Release包时则闪退解决办法

    [Android]高德地图在Debug模式下运行正常但是打Release包时则闪退解决办法 来源: https://blog.csdn.net/weixin_39370093/article/deta ...

  3. Android Camera设置setPreviewCallback实现onPreviewFrame接口实时截取每一帧视频流数据

    1 概述 通过Android Camera拍摄预览中设置setPreviewCallback实现onPreviewFrame接口,实时截取每一帧视频流数据 2 知识点 ① Android Camera ...

  4. Android CameraX的PreviewView Ar背景实景实时预览

    经常在AR开发过程中有这种需求:需要实时预览实景视频,如下图所示. 代码实现思路使用Android CameraX的PreviewView来实现,下面试代码,仅包含视频预览部分: 一.activity ...

  5. php更新用户数据为空,php – Instagram实时更新标签 – 获取空数据,为什么?

    Heloo, 我正在开发一个项目,我需要从Instagram获得某些标签的实时更新. 这是我创建订阅的代码 $client_id = 'MOJID'; $client_secret = 'MOJIDS ...

  6. 抓取android系统日志_记录一次定位app闪退故障

    在测试android客户端兼容性时,发现app闪退,上海的小伙伴需要闪退时的系统日志:故把快生锈的adb知识拿出来show一把: 1.下载adb工具包(adb的全称为Android Debug Bri ...

  7. 海康威视摄像机Java SDK拉流(二)开启关闭实时预览

    上一篇:海康威视Java SDK拉流(一)初始化SDK 本篇介绍海康威视摄像机通过SDK开启关闭实时预览接口 下篇介绍实时预览的回调函数及解码库 测试环境: 系统:Centos 7 SDK:设备网络S ...

  8. 用户收货地址h5页面_如何实现H5可视化编辑器的实时预览和真机扫码预览功能...

    前言所见即所得的设计理念在WEB IDE领域里一直是备受瞩目的功能亮点, 也能极大的提高 web coder的编程体验和编程效率. 笔者接下来就将对H5可视化编辑器的实时预览和真机扫码预览功能做一次方 ...

  9. textedit实时显示位置_加什么地形就看什么等高线!等高线实时预览就是这么爽...

    做规划.做设计.选场地.水文分析.玩户外,哪个都不离开等高线地图. 目前能找到的等高线地图(OpenCycleMap.Garmin矢量地图等)都不太好用:加载速度慢.渲染效果不太好.无法对地形进行渲染 ...

最新文章

  1. Michael Jordan:人工智能研究的目标变了,不再是构建单个智能
  2. 潘建伟团队又创世界纪录!实现500公里量级现场光纤量子通信
  3. 专业写博一天------ArrayList 线程安全
  4. Delphi的类与继承
  5. java 爬虫 保存cookies_写爬虫,免不了要研究JavaScript设置cookies的问题
  6. Go知识点:slice、map、func、struct、method、interface、channel、goroutine
  7. ConcurrentLinkedHashMap v 1.0.1发布
  8. 记录一次可能的order by注入
  9. 如何使用 Java AWT 创建一个简易计算器
  10. RecycleView的Item Decoration间隔样式
  11. STM32工作笔记005---STM32芯片解读
  12. Java7 一些新特性及脚本语言支持API--笔记
  13. 记录报错:java.lang.NullPointerException org.apache.jsp.test_jsp._jspInit(test_jsp.java:23)
  14. javascript oo实现
  15. 苹果好还是华为好_苹果手机好还是华为手机好?专业手机测评师给出答复!
  16. 清除Mac OS X文件系统的附加属性@
  17. python 赋值_关于 python 分片赋值
  18. 软件开发人月成本估算方法
  19. 论文的英文文献在哪找(除了知网)?
  20. 【车牌识别】基于模板匹配算法实现车牌识别matlab源码

热门文章

  1. Feign 的实现原理
  2. 2022-2023山东大学软件学院计算机网络期末试题回忆及复习建议
  3. CANOE入门:DBC文件初识
  4. 中国在高科技产业上的崛起让韩国如芒在背
  5. 【动态规划】货币面值
  6. 关于maven的java面试题汇总
  7. python--面向对象程序设计
  8. 在Linux中ipcs命令,Linux下ipcs指令的用法详解。
  9. kindle fire1代_如何在Kindle Fire的电子邮件应用程序上为自定义域设置Gmail
  10. 印象笔记与有道云笔记