Warum zeigen Fehler IllegalStateException, wenn die Einstellung MediaRecorder?
Mein code-Einstellung MediaRecorder, es zeigt Fehler bei der Zeile set Qualität
mMediaRecorder = new MediaRecorder();
//Step 1: Unlock and set camera to MediaRecorder
mCamera.stopPreview();
mCamera.unlock();
mMediaRecorder.setCamera(mCamera);
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mMediaRecorder.setProfile(CamcorderProfile .get(CamcorderProfile.QUALITY_HIGH));
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
//Step 4: Set output file
mMediaRecorder.setOutputFile(getOutputMediaFile(MEDIA_TYPE_VIDEO).toString());
//Step 5: Set the preview output
mMediaRecorder.setPreviewDisplay(mPreview.getHolder().getSurface());
//Step 6: Prepare configured MediaRecorder
try {
mMediaRecorder.prepare();
Log.d("DEBUG", "IllegalStateException preparing MediaRecorder: "
+ e.getMessage());
releaseMediaRecorder();
return false;
} catch (IOException e) {
Log.d("DEBUG",
"IOException preparing MediaRecorder: " + e.getMessage());
releaseMediaRecorder();
return false;
}
Ex:
java.lang.IllegalStateException
Stacktrace:
java.lang.IllegalStateException
at android.media.MediaRecorder.setOutputFormat(Native Method)
at android.media.MediaRecorder.setProfile(MediaRecorder.java:366)
at jp.osaka.E028.prepareVideoRecorder(E028.java:1441)
at jp.osaka.E028.access$16(E028.java:1403)
at jp.osaka.E028$6.onClick(E028.java:344)
at android.view.View.performClick(View.java:3517)
at android.view.View$PerformClick.run(View.java:14155)
at android.os.Handler.handleCallback(Handler.java:605)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4503)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:809)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:576)
at dalvik.system.NativeStart.main(Native Method)
Warum zeigen Fehler IllegalStateException, wenn die Einstellung MediaRecorder?
- Posten Sie Ihre stacktrace, bitte.
- stacktrace=null
- Sie müssen ändern
e.getMessage()
zue.fillInStackTrace()
. Dann posten Sie Ihre stacktrace hier! - ich Frage aktualisiert
- Ich habe eine Antwort unten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Tatsächlich
mMediaRecorder.setOutputFormat()
zweimal: das Eine mal ausdrücklich und danachmMediaRecorder.setProfile()
versucht, es wieder zu tun, wie Sie sehen können, in Ihren stacktrace.Den Android Media-Recorder hat eine sehr niedrige Robustheit für Dinge wie, dass.
So entfernen Sie die Zeile, die sagt
und der Fehler sollte Weg gehen. Und btw. entfernen
was
mMediaRecorder.setProfile()
bereits als gut getan.recorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH))
hat bereits den AudioEncoder-und VideoEncoder für Sie bereits.Müssen Sie möglicherweise lassen Sie die Kamera ein Objekt vor dem MediaRecorder beginnen, mit so etwas wie:
Rufen Sie das obige Verfahren, bevor Sie beginnen Ihre MediaRecorder Methoden.
WICHTIG: Auch die Methoden, die unten genannt werden MUSS in dieser Reihenfolge:
Wichtigen bits sind hier
setVideoEncoder
undsetAudioEncoder
genannt letzten.mMediaRecorder.start();
. Ich kann nicht sehen, aus Ihrem post, dass Sie diese Methode erklärt. Aber es wird nicht funktionieren ohne Sie.try/catch
und sehen, welche Fehler zurückgegeben (falls vorhanden). Die drei Methoden, die Sie erwähnt wird, hängt von der Android-API und ob Ihr Gerät physisch unterstützen die Modi erklärt innerhalb dieser Methoden. Sie können am Ende darunter noch eine third-party Bibliothek zu tun, was Sie wollen, z.B. ffmpeg.<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
und<uses-permission android:name="android.permission.RECORD_AUDIO" />
CamcorderProfile
, dann stellen Sie Ihr die folgenden Methoden in der angegebenen Reihenfolge: 1) setOutputFormat, 2) setVideoSize, 3) setVideoEncoder und 4) setAudioEncoder. Hinweis: DiesetVideoSize
Methode MUSS aufgerufen werden, bevor diesetVideoEncoder
Methode. Siehe meine aktualisierte Antwort oben. Hinweis: Diese information kann nicht in den docs.