Record video

import java.io.IOException;

import java.util.ArrayList;

import java.util.List;

import android.app.Activity;

import android.hardware.Camera;
import android.hardware.Camera.Size;

import android.media.MediaRecorder;
import android.os.Bundle;

import android.util.Log;

import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;

import android.view.View.OnClickListener;
import android.widget.ImageButton;

public class prova extends Activity implements SurfaceHolder.Callback{

   private SurfaceView mSurfaceView;
   private SurfaceHolder mSurfaceHolder;
   private Camera mCamera;
   private boolean mPreviewRunning;

   private static final String TAG = "RECORD";

   public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        mSurfaceView = (SurfaceView)findViewById(R.id.camera_surface);
        mSurfaceHolder = mSurfaceView.getHolder();      //recupero l'holder della surfaceview
        mSurfaceHolder.addCallback(this);       //faccio la bind alla nostra activity
        mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);        //tipo di surface, suggerito nei tutorial ufficiali

        final ImageButton buttonPictureR = (ImageButton) findViewById(R.id.camera_surface_buttonR);
        final ImageButton buttonPictureS = (ImageButton) findViewById(R.id.camera_surface_buttonS);
                buttonPictureR.setOnClickListener(new OnClickListener(){
                        public void onClick(View v) {

                           startRecording();
                           buttonPictureR.setVisibility(4);
                         buttonPictureS.setVisibility(0);


                        }
                });


                   buttonPictureS.setOnClickListener(new OnClickListener(){
                        public void onClick(View v) {

                              stopRecording();
                               buttonPictureR.setVisibility(0);
                             buttonPictureS.setVisibility(4);

                        }
                });                

   }

   public void surfaceCreated(SurfaceHolder holder) {

       mCamera = Camera.open();

    }

   public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
        if (mPreviewRunning)
                mCamera.stopPreview();

        //setto le preferenze
        Camera.Parameters p = mCamera.getParameters();  //prendo le preferenze della camera

        p.setPreviewSize(arg2, arg3);
        //p.setPreviewFormat(PixelFormat.JPEG);
        ArrayList list = (ArrayList) p.getSupportedPictureSizes();  //recuepro le risoluzioni supportate dalla camera
        List list2 = p.getSupportedFocusModes();  //recuepro le risoluzioni supportate dalla camera
        int picture_width = list.get(0).width;
        int picture_height = list.get(0).height;
        p.setFocusMode(list2.get(0));

        p.setPictureSize(picture_width, picture_height);

        // salvo le pref
        mCamera.setParameters(p);
        try {

           System.out.println("sono fuori");

           //lancio la preview
           mCamera.setPreviewDisplay(arg0);        
            mCamera.startPreview();
            mPreviewRunning = true;
        } catch (IOException e) {
           System.out.println("sono dentro");
                //gestione errore
        }

   }

   public void surfaceDestroyed(SurfaceHolder holder) {

       mCamera.stopPreview();
       mPreviewRunning = false;
       mCamera.release();

    }

   private MediaRecorder mediaRecorder;
   private final int MAX_TIME = 20000;

   public boolean startRecording(){
      try {

         mediaRecorder = new MediaRecorder();
         mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
         mediaRecorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
         mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
         mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
         mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
         mediaRecorder.setMaxDuration((int) MAX_TIME); 
         mediaRecorder.setVideoSize(320, 240);
         mediaRecorder.setVideoFrameRate(20); 
         mediaRecorder.setOutputFile("/sdcard/recordvideooutput.3gp");

         mediaRecorder.prepare();
         mediaRecorder.start();

         return true;
      } catch (IllegalStateException e) {
         Log.e(TAG,e.getMessage());
         e.printStackTrace();
         return false;
      } catch (IOException e) {
         Log.e(TAG,e.getMessage());
         e.printStackTrace();
         return false;
      }
   }

   public void stopRecording(){
      mediaRecorder.stop();
      mediaRecorder.release(); // Now the object cannot be reused
   }
}


判断SD卡是否加载

if (android.os.Environment.getExternalStorageState() != android.os.Environment.MEDIA_MOUNTED)


public class VideoActivity extends Activity {

private SurfaceView preview;
private SurfaceHolder previewHolder;
private String locationName;
private String filepath;
private File video;

public void onCreate(Bundle videocawk) {
    super.onCreate(videocawk);
    setContentView(R.layout.video_layout);
    setSurface();
    locationName = getIntent().getStringExtra("locationName");
    filepath = getFilePath(locationName);
    try {
        MediaRecorder r = getMediaRecorder(filepath, previewHolder
                .getSurface());
        setSurfaceCallback(preview,r);
        setButtonListeners(r);
    } catch (IllegalStateException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

private String getFilePath(String locName) {
    String dir = Environment.getExternalStorageDirectory().getAbsolutePath();
    String add = "/test/data/video/";
    String name = locName + "--1";
    String total = dir + add + name;
    video = new File(total);
    return total;
}

private void setSurface() {
    preview = (SurfaceView) findViewById(R.id.preview);
    previewHolder = preview.getHolder();
    previewHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}

private void setButtonListeners(final MediaRecorder r) {
    Button start = (Button) findViewById(R.id.start_video);
    Button end = (Button) findViewById(R.id.stop_video);

    start.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            startRecording(r);

        }
    });

    end.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            stopRecording(r);
            setPassPrefs();
            startActivity(setPassPrefs());
            finish();

        }
    });

}

private void setSurfaceCallback(SurfaceView s, final MediaRecorder r)
{


SurfaceHolder.Callback surfaceCallback = new SurfaceHolder.Callback() {
    public void surfaceCreated(SurfaceHolder holder) {

        try {
            r.setPreviewDisplay(previewHolder.getSurface());
        } catch (Throwable t) {
            Log.e("PictureDemo-surfaceCallback",
                    "Exception in setPreviewDisplay()", t);
            Toast.makeText(VideoActivity.this, t.getMessage(),
                    Toast.LENGTH_LONG).show();
        }
    }

    public void surfaceChanged(SurfaceHolder holder, int format, int width,
            int height) {

    }

    public void surfaceDestroyed(SurfaceHolder holder) {
        r.stop();
        r.release();

    }
};

previewHolder.addCallback(surfaceCallback); 
}

private Intent setPassPrefs() {
    AttachedImageAdapter adapter = new AttachedImageAdapter(locationName,
            VideoActivity.this);
    adapter.setVideoPath(filepath);
    Intent i = new Intent(VideoActivity.this, EnterTag.class);
    i.putExtras(getIntent());
    return i;

}

private void startRecording(MediaRecorder r) {
    r.start();
}

private void stopRecording(MediaRecorder r) {
    r.stop();
}

private MediaRecorder getMediaRecorder(String filepath, Surface s)
        throws IllegalStateException, IOException {
    MediaRecorder m_recorder = new MediaRecorder();
    m_recorder.setPreviewDisplay(s);
    m_recorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
    m_recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
    m_recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
    m_recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
    m_recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
    m_recorder.setMaxDuration(20000); // length of video in MS
    m_recorder.setVideoSize(320, 240);
    m_recorder.setVideoFrameRate(15);
    m_recorder.setOutputFile(video.getPath());
    m_recorder.prepare();

    return m_recorder;
}
}

你可能感兴趣的:(android,OS)