1

正面モードでカメラを開いて録画を開始すると、エラーが発生します。アプリがクラッシュします。

私のコードはこれです:

import java.io.IOException;
import java.lang.reflect.InvocationTargetException;

import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.graphics.PixelFormat;
import android.hardware.Camera;
import android.hardware.Camera.CameraInfo;
import android.media.CamcorderProfile;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.util.Log;
import android.view.Surface;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity implements SurfaceHolder.Callback{

     Camera camera;
     SurfaceView surfaceView;
     SurfaceHolder surfaceHolder;
     boolean previewing = false;
     MediaRecorder m_recorder;
     int MAX_TIME=5;
 String m_path;
 String stringPath = "/sdcard/samplevideo.3gp";
 MediaRecorder videoRecorder;
 Surface surface;
 MediaRecorder mrec;
     /** Called when the activity is first created.**/
       @Override
       public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
   setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
   Button buttonStartCameraPreview = (Button)findViewById(R.id.startcamerapreview);
   Button buttonStopCameraPreview = (Button)findViewById(R.id.stopcamerapreview);

   getWindow().setFormat(PixelFormat.UNKNOWN);
   surfaceView = (SurfaceView)findViewById(R.id.surfaceview);
   surfaceHolder = surfaceView.getHolder();
   surfaceHolder.addCallback(this);
   surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
   buttonStartCameraPreview.setOnClickListener(new Button.OnClickListener(){

   @Override
   public void onClick(View v)
   {
     if(!previewing){
     Camera.CameraInfo cameraInfo = new Camera.CameraInfo();

     for (int camNo = 0; camNo < Camera.getNumberOfCameras(); camNo++) {
         CameraInfo camInfo = new CameraInfo();
         Camera.getCameraInfo(camNo, camInfo);

         //Toast.makeText(MainActivity.this, camNo, Toast.LENGTH_LONG).show();
         if (camInfo.facing==(Camera.CameraInfo.CAMERA_FACING_FRONT)) {
             camera = Camera.open(1);
         }
      }
 try{          
     camera.setDisplayOrientation(90);
     camera.setPreviewDisplay(surfaceHolder);
    }catch (IOException e1) {
     // TODO Auto-generated catch block
     e1.printStackTrace();
    }
 if (camera != null){
   try
   {
   camera.setPreviewDisplay(surfaceHolder);
   camera.startPreview();
   previewing = true;

    } catch (IOException e) {
     // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }

 System.out.println("before MediaRecorder");
      mrec = new MediaRecorder(); // Works well
     System.out.println("after MediaRecorder");
     camera.unlock();
     System.out.println("after Unlock");   
     mrec.setCamera(camera);
     System.out.println("setcamera"); 
     mrec.setPreviewDisplay(surfaceHolder.getSurface());
     System.out.println("setcamera1"); 
     mrec.setVideoSource(MediaRecorder.VideoSource.CAMERA);
     System.out.println("setcamera2"); 
     mrec.setAudioSource(MediaRecorder.AudioSource.MIC); 

     mrec.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH));
     mrec.setPreviewDisplay(surfaceHolder.getSurface());

     mrec.setOutputFile("/sdcard/recordvideooutput.3gpp"); 

     try {
         System.out.println("before prepare"); 
        mrec.prepare();

        System.out.println("after prepare");
    } catch (IllegalStateException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
     //
}
   }});

 buttonStopCameraPreview.setOnClickListener(new Button.OnClickListener(){

   @Override
   public void onClick(View v) {
   try {
       camera.reconnect();
       camera.unlock();
} catch (Exception e) {
    // TODO: handle exception
}

   mrec.start();
// TODO Auto-generated method stub
/*if(camera != null && previewing){
 camera.stopPreview();
 camera.release();
 camera = null;

 previewing = false;
}*/
   }});

   }



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

 }

 @Override
 public void surfaceCreated(SurfaceHolder holder) {

 }

 @Override
 public void surfaceDestroyed(SurfaceHolder holder) {


 }
}

私が間違っていた場所を教えてください。また、フロント カメラを使用してビデオを録画するためのコード全体を提供していただければ、さらに役に立ちます。

ありがとうございます。

4

0 に答える 0