2011-06-13 3 views
0

현재 인트로를 사용하지 않고 Android에서 간단한 비디오 레코더를 만들려고합니다. 내 코드는Android 비디오 레코더를 만들 때 setMaxDuration을 생성하지 못했습니다.

 
import java.io.IOException;

import android.app.Activity; import android.media.MediaRecorder; import android.net.NetworkInfo; import android.os.Bundle; import android.util.Log; import android.view.SurfaceHolder; import android.view.SurfaceView;

public class CameraActivity extends Activity implements SurfaceHolder.Callback { public enum State { UNKNOWN, CONNECTED, NOT_CONNECTED }

SurfaceView cameraView; SurfaceHolder holder; public boolean mListening; public Object mState; public NetworkInfo mNetworkInfo; public boolean mSending; boolean recording = false; public static final String TAG = "VIDEOCAPTURE"; private MediaRecorder recorder; protected void captureVideo() { if (recording) { recorder.stop(); // recorder.release(); recording = false; Log.v(TAG, "Recording Stopped"); // Let's initRecorder so we can record again initRecorder(); prepareRecorder(); } else { recording = true; recorder.start(); Log.v(TAG, "Recording Started"); } } private void initRecorder() { recorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT); recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT); recorder.setOutputFile("/sdcard/videocapture_example.mp4"); recorder.setMaxDuration(50000); // 50 seconds recorder.setMaxFileSize(5000000); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); recorder = new MediaRecorder(); initRecorder(); setContentView(R.layout.main); cameraView = (SurfaceView) this.findViewById(R.id.CameraView); holder = cameraView.getHolder(); holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); holder.addCallback(this); } private void prepareRecorder() { recorder.setPreviewDisplay(holder.getSurface()); try { recorder.prepare(); } catch (IllegalStateException e) { e.printStackTrace(); finish(); } catch (IOException e) { e.printStackTrace(); finish(); } } @Override public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { } @Override public void surfaceCreated(SurfaceHolder holder) { Log.v(TAG, "surfaceCreated"); prepareRecorder(); } @Override public void surfaceDestroyed(SurfaceHolder holder) { // camera.stopPreview(); // camera.release(); Log.v(TAG, "surfaceDestroyed"); if (recording) { recorder.stop(); recording = false; } recorder.release(); finish(); }

}

을 따르고 그러나 내가 로그 캣에서, 에뮬레이터 내에서이 코드를 배포 할 때이 같은 몇 가지 오류를 얻었다.

java.lang.RuntimeException가 : 활동 ComponentInfo를 시작할 수 없습니다 ...

java.lang.RuntimeException가 : setMaxDuration에 실패했습니다. android.media.MediaRecorder.setMaxDuration (기본 메소드)

내 코드가 잘못되었습니다.

+0

'initRecorder' 함수에서 출력 형식'setOutputFormat'을 설정해보십시오. – bluefalcon

+0

@bluefalcon "https://developer.android.com/reference/android/media/MediaRecorder.html"에있는'initRecorder'에 대해서는 아무 것도 없습니다. 또한. 더 설명해주세요. –

답변