2011-05-26 78 views
0

我寫的代碼與媒體記錄器。視頻錄製功能,但它拋出IO異常,非法狀態例外,我搜查多次在谷歌,但沒有適當的解釋爲這一個我的代碼是視頻與媒體錄像機記錄

public class Simple extends Activity { 
    /** Called when the activity is first created. */ 
    Button button,button2; 
    MediaRecorder recorder; 
    Camera camera; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     button=(Button) findViewById(R.id.button1); 
     button2=(Button) findViewById(R.id.button2); 

    camera=Camera.open(); 
    Camera.Parameters params = camera.getParameters(); 
    camera.setParameters(params); 


    button.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      // TODO Auto-generated method stub 

      Toast.makeText(getBaseContext(), "Video Start", Toast.LENGTH_LONG).show(); 

      String mFileName = Environment.getExternalStorageDirectory().getAbsolutePath(); 
      mFileName += "/temp.3mp4"; 

      recorder=new MediaRecorder(); 


      recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); 
      recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 
      recorder.setVideoFrameRate(10); 
      recorder.setVideoSize(200, 300); 
      recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); 
      recorder.setMaxDuration(50000); 
      recorder.setMaxFileSize(5000000); 
      recorder.setOutputFile(mFileName); 
      try { 
       recorder.prepare(); 
      } catch (IllegalStateException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
       Toast.makeText(getBaseContext(),e.toString(), Toast.LENGTH_LONG).show(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
       Toast.makeText(getBaseContext(),e.toString(), Toast.LENGTH_LONG).show(); 
      } 
      } 
    }); 

    button2.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      Toast.makeText(getBaseContext(), "Video Stop", Toast.LENGTH_LONG).show(); 
      recorder.stop(); 
     } 
    }); 

} 

}

回答

1

這裏是錄製視頻的代碼......

recorder = new MediaRecorder(); 
     recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT); 
     recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
     recorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP); 
     mPreview = new Preview(VideoRecorder.this,recorder); 
     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
     setContentView(mPreview); 

recorder.start(); 

,這裏是預覽類....

class Preview extends SurfaceView implements SurfaceHolder.Callback 
{ 
    SurfaceHolder mHolder; 
    MediaRecorder tempRecorder; 
    public Preview(Context context,MediaRecorder recorder) { 
     super(context); 
     tempRecorder=recorder; 
     mHolder=getHolder(); 
     mHolder.addCallback(this); 
     mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
     // TODO Auto-generated constructor stub 
    } 

    public Surface getSurface() 
    { 
     return mHolder.getSurface(); 
    } 

    public void surfaceCreated(SurfaceHolder holder){ 
     tempRecorder.setOutputFile("/sdcard/recordvideooutput.3gpp"); 
     tempRecorder.setPreviewDisplay(mHolder.getSurface()); 
     try{ 
      tempRecorder.prepare(); 
     } catch (Exception e) { 
      String message = e.getMessage(); 
      tempRecorder.release(); 
      tempRecorder = null; 
     } 
    } 

    public void surfaceDestroyed(SurfaceHolder holder) 
    { 
     if(tempRecorder!=null) 
     { 
      tempRecorder.release(); 
      tempRecorder = null; 
     } 
    } 

    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) 
    { 

    } 
}