MediareCorder를 사용하여 세분화 오류를 일으키지 않고 비디오를 녹화하려면 어떻게해야합니까?
-
10-07-2019 - |
문제
Android.media.mediarecorder를 사용하여 비디오를 녹화하려고합니다. repary ()를 호출 할 때 Android 런타임 세분화 결함이 무엇을하는지에 관계없이. 예는 다음과 같습니다.
public void onCreate(Bundle savedInstanceState)
{
Log.i("video test", "making recorder");
MediaRecorder recorder = new MediaRecorder();
contentResolver = getContentResolver();
try {
super.onCreate(savedInstanceState);
Log.i("video test", "--------------START----------------");
SurfaceView target_view = new SurfaceView(this);
Log.i("video test", "making surface");
Surface target = target_view.getHolder().getSurface();
Log.i("video test", target.toString());
Log.i("video test", "new recorder");
recorder = new MediaRecorder();
Log.i("video test", "set display");
recorder.setPreviewDisplay(target);
Log.i("video test", "pushing surface");
setContentView(target_view);
Log.i("video test", "set audio source");
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
Log.i("video test", "set video source");
recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
Log.i("video test", "set output format");
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
Log.i("video test", "set audio encoder");
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
Log.i("video test", "set video encoder");
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
Log.i("video test", "set max duration");
recorder.setMaxDuration(3600);
Log.i("video test", "set on info listener");
recorder.setOnInfoListener(new listener());
Log.i("video test", "set video size");
recorder.setVideoSize(320, 240);
Log.i("video test", "set video frame rate");
recorder.setVideoFrameRate(15);
Log.i("video test", "set output file");
recorder.setOutputFile(get_path(this, "foo.3gp"));
Log.i("video test", "prepare");
recorder.prepare();
Log.i("video test", "start");
recorder.start();
Log.i("video test", "sleep");
Thread.sleep(3600);
Log.i("video test", "stop");
recorder.stop();
Log.i("video test", "release");
recorder.release();
Log.i("video test", "-----------------SUCCESS------------------");
finish();
} catch (Exception e) {
Log.i("video test", e.toString());
recorder.reset();
recorder.release();
Log.i("video tets", "-------------------FAIL-------------------");
finish();
}
}
public static String get_path (Context context, String fname) {
String path = context.getFileStreamPath("foo").getParentFile().getAbsolutePath();
String res = path+"/"+fname;
Log.i("video test", "path: "+res);
return res;
}
class listener implements MediaRecorder.OnInfoListener {
public void onInfo(MediaRecorder recorder, int what, int extra) {
Log.i("video test", "Video Info: "+what+", "+extra);
}
}
해결책
이 문제는 카메라의 상태 머신 타이밍과 관련이있는 것으로 보입니다.
준비를 호출하기 전에 카메라는 '설정'을 위해 수백 밀리 초가 필요할 수 있습니다.
다음 게시물을 참조하십시오.
다른 팁
recorder.setVideoSize(176, 144);
recorder.setVideoFrameRate(20);
recorder.setAudioChannels(1);
recorder.setPreviewDisplay( mHolder.getSurface());//<- I believe this helped
이것은 나에게 도움이되었습니다. 디버그 중에 로그 캣을 봅니다
제휴하지 않습니다 StackOverflow