android camera 通过onPreviewFrame采集视频

001 package com.example.camera;
002  
003 import java.io.File;
004 import java.io.FileOutputStream;
005 import java.io.IOException;
006 import java.text.SimpleDateFormat;
007 import java.util.Date;
008  
009 import android.app.Activity;
010 import android.graphics.Rect;
011 import android.graphics.YuvImage;
012 import android.hardware.Camera;
013 import android.hardware.Camera.Size;
014 import android.os.Bundle;
015 import android.os.Environment;
016 import android.view.SurfaceHolder;
017 import android.view.SurfaceView;
018  
019 public class MainActivity extends Activity implements SurfaceHolder.Callback,
020         Camera.PreviewCallback {
021  
022     private SurfaceView mSurfaceview = null// SurfaceView对象:(视图组件)视频显示
023     private SurfaceHolder mSurfaceHolder = null// SurfaceHolder对象:(抽象接口)SurfaceView支持类
024     private Camera mCamera = null// Camera对象,相机预览
025  
026     @Override
027     public void onCreate(Bundle savedInstanceState) {
028         super.onCreate(savedInstanceState);
029         setContentView(R.layout.main);
030         mSurfaceview = (SurfaceView) findViewById(R.id.surfaceview);
031         mSurfaceHolder = mSurfaceview.getHolder(); // 绑定SurfaceView,取得SurfaceHolder对象
032         mSurfaceHolder.addCallback(this); // SurfaceHolder加入回调接口
033         // mSurfaceHolder.setFixedSize(176, 144); // 预览大小設置
034         mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);// 設置顯示器類型,setType必须设置
035     }
036  
037     @Override
038     public void surfaceChanged(SurfaceHolder holder, int format, int width,
039             int height) {
040         if (mCamera == null) {
041             return;
042         }
043         mCamera.stopPreview();
044         mCamera.setPreviewCallback(this);
045         mCamera.startPreview();
046     }
047  
048     @Override
049     protected void onResume() {
050         super.onResume();
051         mCamera = Camera.open();
052     }
053  
054     @Override
055     protected void onPause() {
056         super.onPause();
057         if (mCamera != null) {
058             mCamera.release();
059             mCamera = null;
060         }
061     }
062  
063     @Override
064     public void surfaceCreated(SurfaceHolder holder) {
065         try {
066             if (mCamera != null) {
067                 mCamera.setPreviewDisplay(mSurfaceHolder);
068                 mCamera.startPreview();
069             }
070         catch (IOException e) {
071             e.printStackTrace();
072         }
073  
074     }
075  
076     @Override
077     public void surfaceDestroyed(SurfaceHolder holder) {
078  
079     }
080  
081     @Override
082     public void onPreviewFrame(byte[] data, Camera camera) {
083  
084         // 刚刚拍照的文件名
085         String fileName = "IMG_"
086                 new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date())
087                         .toString() + ".jpg";
088         File sdRoot = Environment.getExternalStorageDirectory();
089         String dir = "/Camera/";
090         File mkDir = new File(sdRoot, dir);
091         if (!mkDir.exists())
092             mkDir.mkdirs();
093         File pictureFile = new File(sdRoot, dir + fileName);
094         if (!pictureFile.exists()) {
095             try {
096                 pictureFile.createNewFile();
097                 Camera.Parameters parameters = camera.getParameters();
098                 Size size = parameters.getPreviewSize();
099                 YuvImage image = new YuvImage(data,
100                         parameters.getPreviewFormat(), size.width, size.height,
101                         null);
102                 FileOutputStream filecon = new FileOutputStream(pictureFile);
103                 image.compressToJpeg(
104                         new Rect(00, image.getWidth(), image.getHeight()),
105                         90, filecon);
106             catch (IOException e) {
107                 e.printStackTrace();
108             }
109         }
110     }
111 }

转自:http://my.oschina.net/eclipse88/blog/80115

参考:

http://www.cnblogs.com/mengyan/archive/2012/09/01/2666641.html

http://www.cnblogs.com/sight/archive/2012/04/17/2453671.html

http://www.cnblogs.com/ice4c/archive/2010/10/18/1854756.html

你可能感兴趣的:(android camera 通过onPreviewFrame采集视频)