使用MediaRecorder就灵活的多,当前Android系统支持的视频/音频编码格式都可以进行定制,灵活组合编码格式。
抛砖引玉,先扯下预览功能
- import java.io.IOException;
- import android.content.Context;
- import android.hardware.Camera;
- import android.util.Log;
- import android.view.SurfaceHolder;
- import android.view.SurfaceHolder.Callback;
- import android.view.SurfaceView;
- public class CameraPreview extends SurfaceView implements Callback {
- private static final String TAG = "TAG-CameraPreview";
- private SurfaceHolder mHolder;
- private Camera mCamera;
- public CameraPreview(Context context, Camera camera) {
- super(context);
- mCamera = camera;
- // 安装一个SurfaceHolder.Callback
- mHolder = getHolder();
- mHolder.addCallback(this);
- // 针对低于3.0的Android
- mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
- }
- public void surfaceCreated(SurfaceHolder holder) {
- // 把预览画面的位置通知摄像头
- try {
- mCamera.setPreviewDisplay(holder);
- mCamera.startPreview();
- } catch (IOException e) {
- Log.d(TAG, "Error setting camera preview: " + e.getMessage());
- }
- }
- public void surfaceDestroyed(SurfaceHolder holder) {
- // TODO
- }
- public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
- if (mHolder.getSurface() == null){
- // 预览surface不存在
- return;
- }
- // 更改时停止预览
- try {
- mCamera.stopPreview();
- } catch (Exception e){
- }
- // 在此进行缩放、旋转和重新组织格式
- // 以新的设置启动预览
- try {
- mCamera.setPreviewDisplay(mHolder);
- mCamera.startPreview();
- } catch (Exception e){
- Log.d(TAG, "Error starting camera preview: " + e.getMessage());
- }
- }
- }
预览功能就是在拍视频或者照片的时候屏幕上的“预览”,我试了好多次,貌似Android设备不能不设置预览就进行间谍式的拍摄......