2014-03-04 161 views
1

這裏的視頻自動記錄程序,但它不能正常工作。我們需要30秒自動錄像並將其發送至已設置的電子郵件。如何自動記錄30秒視頻?

package com.example.videorecord; 

    import java.io.File; 
    import java.io.IOException; 
    import java.util.Date; 

    import android.app.Activity; 
    import android.hardware.Camera; 
    import android.hardware.Camera.Parameters; 
    import android.media.MediaRecorder; 
    import android.os.Bundle; 
    import android.os.Environment; 
    import android.util.Log; 
    import android.view.Menu; 
    import android.view.MenuItem; 
    import android.view.SurfaceHolder; 
    import android.view.SurfaceHolder.Callback; 
    import android.view.SurfaceView; 
    import android.widget.Toast; 

public class MainActivity extends Activity implements Callback { 

    @Override 
    protected void onDestroy() { 
     stopRecording(); 
     super.onDestroy(); 
    } 

    private SurfaceHolder surfaceHolder; 
    private SurfaceView surfaceView; 
    public MediaRecorder mrec = new MediaRecorder(); 
    private Camera mCamera; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     surfaceView = (SurfaceView) findViewById(R.id.surfaceView1); 
     mCamera = Camera.open(); 

     surfaceHolder = surfaceView.getHolder(); 
     surfaceHolder.addCallback(this); 
     surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 

     menu.add(0, 0, 0, "Start"); 
     return super.onCreateOptionsMenu(menu); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     if (item.getTitle().equals("Start")) { 
      try { 

       startRecording(); 
       item.setTitle("Stop"); 

      } catch (Exception e) { 

       String message = e.getMessage(); 
       Log.i(null, "Problem " + message); 
       mrec.release(); 
      } 

     } else if (item.getTitle().equals("Stop")) { 
      mrec.stop(); 
      mrec.release(); 
      mrec = null; 
      item.setTitle("Start"); 
     } 

     return super.onOptionsItemSelected(item); 
    } 

    protected void startRecording() throws IOException { 
     if (mCamera == null) 
      mCamera = Camera.open(); 

     String filename; 
     String path; 

     path = Environment.getExternalStorageDirectory().getAbsolutePath() 
       .toString(); 

     Date date = new Date(); 
     filename = "/rec" + date.toString().replace(" ", "_").replace(":", "_") 
       + ".mp4"; 

     // create empty file it must use 
     File file = new File(path, filename); 

     mrec = new MediaRecorder(); 

     mCamera.lock(); 
     mCamera.unlock(); 

     // Please maintain sequence of following code. 

     // If you change sequence it will not work. 
     mrec.setCamera(mCamera); 
     mrec.setVideoSource(MediaRecorder.VideoSource.CAMERA); 
     mrec.setAudioSource(MediaRecorder.AudioSource.MIC); 
     mrec.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 
     mrec.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP); 
     mrec.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
     mrec.setPreviewDisplay(surfaceHolder.getSurface()); 
     mrec.setOutputFile(path + filename); 
     mrec.prepare(); 
     mrec.start(); 

    } 

    protected void stopRecording() { 

     if (mrec != null) { 
      mrec.stop(); 
      mrec.release(); 
      mCamera.release(); 
      mCamera.lock(); 
     } 
    } 

    private void releaseMediaRecorder() { 

     if (mrec != null) { 
      mrec.reset(); // clear recorder configuration 
      mrec.release(); // release the recorder object 
     } 
    } 

    private void releaseCamera() { 
     if (mCamera != null) { 
      mCamera.release(); // release the camera for other applications 
      mCamera = null; 
     } 

    } 

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

    } 

    @Override 
    public void surfaceCreated(SurfaceHolder holder) { 

     if (mCamera != null) { 
      Parameters params = mCamera.getParameters(); 
      mCamera.setParameters(params); 
      Log.i("Surface", "Created"); 
     } else { 
      Toast.makeText(getApplicationContext(), "Camera not available!", 
        Toast.LENGTH_LONG).show(); 

      finish(); 
     } 
    } 

    @Override 
    public void surfaceDestroyed(SurfaceHolder holder) { 
     mCamera.stopPreview(); 
     mCamera.release(); 

    } 
} 
+1

http://stackoverflow.com/questions/22140395/how-to-automatically-record-30sec-video-and-send-via-email-in-a-single-button-cl/22141697#22141697 – HarshalK

回答

0

您可以使用CountDownTimer class

new CountDownTimer(30000, 1000) 
{ 

    public void onTick(long millisUntilFinished) 
    {} 

    public void onFinish() 
    { 
      // stop Video recording 
      // call a method which will send video via email. 
    } 
}.start(); 
+0

先生,這裏的視頻開始錄製,但看到一個黑屏,其中相機沒有響應,所以我該如何解決這個問題? – user3367503

+0

@ user3367503,你有攝像頭權限嗎? – Kedarnath

+0

是先生........................ – user3367503

0

你只需要在你的startRecording()方法,當mediaRecorder.stop()function'll被稱爲video'll保存在文件夾destinantion您已設置爲寫一個方法mediaRecorder.setMaxDuration(30000)對於錄像機。