2013-04-21 35 views
6

Ai có thể chỉ ra lỗi tôi đang làm không? Tôi đang cố gắng ghi lại một đoạn video ngắn, nhưng bằng cách nào đó nó tìm thấy một cách để sụp đổ.Lỗi bản ghi video Android

Source Code:

public class Start_recording extends Activity implements SurfaceHolder.Callback 
{ 
    MediaRecorder recorder; 
    SurfaceHolder surfaceHolder; 
    SurfaceView myVideoView; 
    Camera camera; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     Intent intent = getIntent(); 
     String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE); 
     camera = Camera.open(); 
     camera.unlock(); 
     recorder = new MediaRecorder(); 
     setContentView(R.layout.activity_main_rst); 
     myVideoView = (SurfaceView)findViewById(R.id.surface_camera); 
     surfaceHolder = myVideoView.getHolder(); 
     surfaceHolder.addCallback(this); 
     initMediaRecorder(); 
     boolean exists = (new File(android.os.Environment.getExternalStorageDirectory() + "/Record/")).exists(); 

     if (!exists) 
     { 
      new File(android.os.Environment.getExternalStorageDirectory() + "/Record/").mkdirs(); 
     } 

     try 
     { 
      recorder.prepare(); // This is the line of error. 
      recorder.start(); 
      Thread.sleep(36000); 
      recorder.stop(); 
      setupActionBar(); 
     } 
     catch(Exception e) 
     { 
      Log.v("Error is there : ",e.toString()); 
      e.printStackTrace(); 
     } 
    } 

    public void initMediaRecorder() 
    { 
     try 
     { 


      recorder.setPreviewDisplay(surfaceHolder.getSurface()); 
      recorder.setCamera(camera); 
      recorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER); 
      recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); 
      recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
      recorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP); 
      recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
      recorder.setOutputFile(android.os.Environment.getExternalStorageDirectory()+"/Record/test.3gp"); 
      recorder.setMaxDuration(300000); 
     } 
     catch(Exception f) 
     { 
      Log.v("Exception here : ",f.toString()); 
      f.printStackTrace(); 
     } 
    } 
} 

Lỗi:

E/MediaRecorderJNI(1575): Application lost the surface 
V/Error is there :(1575): java.io.IOException: invalid preview surface 
W/System.err(1575): java.io.IOException: invalid preview surface 
W/System.err(1575):  at android.media.MediaRecorder._prepare(Native Method) 
W/System.err(1575):  at android.media.MediaRecorder.prepare(MediaRecorder.java:666) 
W/System.err(1575):  at com.example.project.Start_recording.onCreate(Start_recording.java:51) 

Tôi đã thêm các điều khoản chính xác trong tập tin Manifest và cũng đặt setPreviewDisplay(). Nhưng tôi nhận được bề mặt xem trước không hợp lệ.Vui lòng sửa tôi.

Trả lời

0

Người dùng phải sử dụng SurfaceHolder.Callback để bắt đầu ghi chỉ sau khi bề mặt thực sự được tạo.

Các vấn đề liên quan