このエラーがあります。誰かが私を助けてくれませんか、それはタッチリスナーに関するものだと思います...指を離したときにエラーが発生しています。
04-25 20:07:00.263: D/FB Sessions(18429): false
04-25 20:07:04.533: I/MediaRecorderJNI(18429): prepare: surface=0x189250 (identity=1813)
04-25 20:07:10.493: E/MediaRecorder(18429): stop failed: -1007
04-25 20:07:10.493: D/AndroidRuntime(18429): Shutting down VM
04-25 20:07:10.493: W/dalvikvm(18429): threadid=1: thread exiting with uncaught exception (group=0x40018608)
04-25 20:07:10.503: E/AndroidRuntime(18429): FATAL EXCEPTION: main
04-25 20:07:10.503: E/AndroidRuntime(18429): Java.lang.RuntimeException: stop failed.
04-25 20:07:10.503: E/AndroidRuntime(18429): at Android.media.MediaRecorder.stop(Native Method)
04-25 20:07:10.503: E/AndroidRuntime(18429): at com.crewbase.rec.RecordActivity.stopRecording(RecordActivity.Java:151)
04-25 20:07:10.503: E/AndroidRuntime(18429): at com.crewbase.rec.RecordActivity.access$2(RecordActivity.Java:150)
04-25 20:07:10.503: E/AndroidRuntime(18429): at com.crewbase.rec.RecordActivity$1.onTouch(RecordActivity.Java:79)
04-25 20:07:10.503: E/AndroidRuntime(18429): at Android.view.View.dispatchTouchEvent(View.Java:3897)
04-25 20:07:10.503: E/AndroidRuntime(18429): at Android.view.ViewGroup.dispatchTouchEvent(ViewGroup.Java:942)
04-25 20:07:10.503: E/AndroidRuntime(18429): at Android.view.ViewGroup.dispatchTouchEvent(ViewGroup.Java:942)
04-25 20:07:10.503: E/AndroidRuntime(18429): at Android.view.ViewGroup.dispatchTouchEvent(ViewGroup.Java:942)
04-25 20:07:10.503: E/AndroidRuntime(18429): at Android.view.ViewGroup.dispatchTouchEvent(ViewGroup.Java:942)
04-25 20:07:10.503: E/AndroidRuntime(18429): at com.Android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.Java:1737)
04-25 20:07:10.503: E/AndroidRuntime(18429): at com.Android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.Java:1153)
04-25 20:07:10.503: E/AndroidRuntime(18429): at Android.app.Activity.dispatchTouchEvent(Activity.Java:2096)
04-25 20:07:10.503: E/AndroidRuntime(18429): at com.Android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.Java:1721)
04-25 20:07:10.503: E/AndroidRuntime(18429): at Android.view.ViewRoot.deliverPointerEvent(ViewRoot.Java:2200)
04-25 20:07:10.503: E/AndroidRuntime(18429): at Android.view.ViewRoot.handleMessage(ViewRoot.Java:1884)
04-25 20:07:10.503: E/AndroidRuntime(18429): at Android.os.Handler.dispatchMessage(Handler.Java:99)
04-25 20:07:10.503: E/AndroidRuntime(18429): at Android.os.Looper.loop(Looper.Java:130)
04-25 20:07:10.503: E/AndroidRuntime(18429): at Android.app.ActivityThread.main(ActivityThread.Java:3835)
04-25 20:07:10.503: E/AndroidRuntime(18429): at Java.lang.reflect.Method.invokeNative(Native Method)
04-25 20:07:10.503: E/AndroidRuntime(18429): at Java.lang.reflect.Method.invoke(Method.Java:507)
04-25 20:07:10.503: E/AndroidRuntime(18429): at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:858)
04-25 20:07:10.503: E/AndroidRuntime(18429): at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:616)
04-25 20:07:10.503: E/AndroidRuntime(18429): at dalvik.system.NativeStart.main(Native Method)
そして、それは私がこのコードを実行しようとすると起こっています:
タッチリスナーから:
/// Preview is SurfaceView in my view
preview.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
prepareRecording();
break;
case MotionEvent.ACTION_MOVE:
//Log.d(TAG, String.format("ACTION_MOVE | x:%s y:%s",
break;
case MotionEvent.ACTION_UP:
stopRecording();
break;
}
return true;
}
});
そしてこれら二つの方法:
private void prepareRecording() {
try {
camera.unlock();
recorder = new MediaRecorder();
recorder.setCamera(camera);
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
File tempFile = new File(Environment.getExternalStorageDirectory(), "/rec/temp/video_" + String.valueOf(videoCount) + ".mp4");
recorder.setOutputFile(tempFile.getPath());
recorder.setVideoFrameRate(25);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT);
recorder.setPreviewDisplay(holder.getSurface());
recorder.prepare();
recorder.start();
} catch (IllegalStateException e) {
Log.e("REDORDING :: ",e.getMessage());
e.printStackTrace();
} catch (IOException e) {
Log.e("REDORDING :: ",e.getMessage());
e.printStackTrace();
}
}
private void stopRecording() {
recorder.stop();
camera.lock();
}
ドキュメント を見てください:
Stop()が呼び出されたときに有効なオーディオ/ビデオデータが受信されなかった場合、RuntimeExceptionが意図的にアプリケーションにスローされることに注意してください。これは、start()の直後にstop()が呼び出された場合に発生します。この場合、アプリケーションは出力ファイルをクリーンアップする(たとえば、出力ファイルを削除する)ためのアクションを実行できます。これが発生すると、出力ファイルが適切に構築されないためです。
つまり、Dalvikは意図的に例外をスローします。アプリの後でクリーンアップするには、それを処理する必要があります。次のように処理する必要があります。
private void stopRecording() {
try{
recorder.stop();
}catch(RuntimeException stopException){
//handle cleanup here
}
camera.lock();
}
AMR_WB
でオーディオを録音しているときに同様のエラー-1007が発生しましたが、問題は、サンプリングレートを設定するのを忘れたことにあることがわかりました。
mediaRecorder.setAudioSamplingRate(16000);