2016-06-28 11 views
0

Als ich setVideoSource auf einem MediaRecorder Objekt aufrufen, es wirft ein Illegal. Ich habe diese geprüft:setVideoSource werfen Runtimeexception (war: Illegal)

(Android SDk 2.1) Getting error when I use setAudioSource and setVideoSource

Why following code shows setVideoSource failed exception setvideosource-failed-Ausnahme

MediaPlayer.prepare() throws IllegalStateException on Android L

Aber die Lösungen vorgeschlagen haben, entweder nicht unangemessen geholfen oder gewesen.

Der Code sieht so aus:

private void initRecorder() { 
    Log.i(TAG, "InitRecorder"); 
    if(mRecorder == null) { 
     mRecorder = new MediaRecorder(); 
     mRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT); 
     mRecorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT); 
     mRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT); 
     mRecorder.setVideoSize(640, 480); 
     mRecorder.setVideoFrameRate(30); 
     mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT); 
     mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); 
     CamcorderProfile cpHigh = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH); 
     mRecorder.setProfile(cpHigh); 
     mRecorder.setOutputFile("/sdcard/video.mp4"); 
     mRecorder.setMaxDuration(50000); // 50 seconds 
     mRecorder.setMaxFileSize(5000000); // Approximately 5 megabytes 
    } 
} 

Ich bin sicher, dass setOutputFormat nicht vor setVideoSource aufgerufen wird, werden die richtigen Berechtigungen beantragt und erteilt werden, und es ist nur ein Videorecorder-Objekt in der Existenz.

Ich verwende Android SDK 23 auf einem Moto G mit Marshmallow installiert.

Hat jemand irgendwelche Ideen? Es wäre nützlich, mehr Informationen von der Ausnahme zu bekommen, aber irgendwie lässt Android Studio mich nicht dazu kommen. Ich denke, eine verwandte Frage wäre, wie kann ich eine Ausnahme an dem Punkt untersuchen, an dem sie geworfen wird? Ist es wahrscheinlich, dass mehr Informationen enthalten sind als nur die Tatsache, dass es sich um eine IllegalStateException handelt?

Die Ausnahme hat sich jetzt in eine RunTimeException geändert, was verwirrend ist. Ich habe alle Änderungen rückgängig gemacht, die ich daran vorgenommen habe. Daher sollte die IllegalStateException ausgelöst werden, aber die RunTimeException ist jetzt festgefahren. Hmm ...

Hier ist das Fehlerprotokoll:

06-28 13:10:14.989 30933-30933/com.dogtail W/ActivityThread: Application com.dogtail is waiting for the debugger on port 8100... 
06-28 13:10:14.990 30933-30933/com.dogtail I/System.out: Sending WAIT chunk 
06-28 13:10:15.142 30933-30939/com.dogtail I/art: Debugger is active 
06-28 13:10:15.190 30933-30933/com.dogtail I/System.out: Debugger has connected 
06-28 13:10:15.191 30933-30933/com.dogtail I/System.out: waiting for debugger to settle... 
06-28 13:10:15.391 30933-30933/com.dogtail I/System.out: waiting for debugger to settle... 
06-28 13:10:15.591 30933-30933/com.dogtail I/System.out: waiting for debugger to settle... 
06-28 13:10:15.791 30933-30933/com.dogtail I/System.out: waiting for debugger to settle... 
06-28 13:10:15.992 30933-30933/com.dogtail I/System.out: waiting for debugger to settle... 
06-28 13:10:16.192 30933-30933/com.dogtail I/System.out: waiting for debugger to settle... 
06-28 13:10:16.392 30933-30933/com.dogtail I/System.out: waiting for debugger to settle... 
06-28 13:10:16.592 30933-30933/com.dogtail I/System.out: debugger has settled (1312) 
06-28 13:10:16.636 30933-30933/com.dogtail W/System: ClassLoader referenced unknown path: /data/app/com.dogtail-1/lib/arm 
06-28 13:10:17.599 30933-30933/com.dogtail W/System: ClassLoader referenced unknown path: /data/app/com.dogtail-1/lib/arm 
06-28 13:10:17.681 30933-30933/com.dogtail I/APPLICATION: onCreate 
06-28 13:10:17.934 30933-31061/com.dogtail I/Adreno-EGL: <qeglDrvAPI_eglInitialize:379>: QUALCOMM Build: 10/09/15, 6cbbf7d, I3193f6e94a 
06-28 13:10:17.936 30933-31061/com.dogtail I/OpenGLRenderer: Initialized EGL, version 1.4 
06-28 13:10:20.588 30933-30933/com.dogtail I/VideoRecorder: OnCreate 
06-28 13:10:20.588 30933-30933/com.dogtail I/VideoRecorder: InitRecorder 
06-28 13:10:20.598 30933-30933/com.dogtail E/AndroidRuntime: FATAL EXCEPTION: main 
                  Process: com.dogtail, PID: 30933 
                  java.lang.RuntimeException: Unable to start activity ComponentInfo{com.dogtail/com.dogtail.VideoRecorder}: java.lang.RuntimeException: setVideoSource failed. 
                   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2426) 
                   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2490) 
                   at android.app.ActivityThread.-wrap11(ActivityThread.java) 
                   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1354) 
                   at android.os.Handler.dispatchMessage(Handler.java:102) 
                   at android.os.Looper.loop(Looper.java:148) 
                   at android.app.ActivityThread.main(ActivityThread.java:5443) 
                   at java.lang.reflect.Method.invoke(Native Method) 
                   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) 
                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
                   Caused by: java.lang.RuntimeException: setVideoSource failed. 
                   at android.media.MediaRecorder.setVideoSource(Native Method) 
                   at com.dogtail.VideoRecorder.initRecorder(VideoRecorder.java:45) 
                   at com.dogtail.VideoRecorder.onCreate(VideoRecorder.java:30) 
                   at android.app.Activity.performCreate(Activity.java:6245) 
                   at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1130) 
                   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2379) 
                   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2490)  
                   at android.app.ActivityThread.-wrap11(ActivityThread.java)  
                   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1354)  
                   at android.os.Handler.dispatchMessage(Handler.java:102)  
                   at android.os.Looper.loop(Looper.java:148)  
                   at android.app.ActivityThread.main(ActivityThread.java:5443)  
                   at java.lang.reflect.Method.invoke(Native Method)  
                   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)  
                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)  
+0

Bitte fügen Sie Ihr Fehlerprotokoll – USKMobility

Antwort

0

Sie verwenden setOutputFormat und setProfile beide.

Entfernen folgende Zeile

mRecorder.setOutputFormat (MediaRecorder.OutputFormat.DEFAULT) ;.

Und Fehler gehen weg

Sie sollten auch Linien entfernen

mRecorder.setVideoEncoder (MediaRecorder.VideoEncoder.DEFAULT); mRecorder.setAudioEncoder (MediaRecorder.AudioEncoder.DEFAULT);

Weil mRecorder.setProfile (cpHigh); Diese Eigenschaft wurde bereits standardmäßig hinzugefügt.

+0

die Ausnahme wird auf die setVideoSource Zeile, die vor dem SetOutputFormat geworfen wird, so glaube ich nicht, dass es ist ... –

+0

setOutputFormat Eigenschaft zweimal hinzugefügt, setProfile auch diese Eigenschaft hinzugefügt.Android Media Framework ist nicht zu intelligent – USKMobility

+0

aber die Ausnahme wird geworfen, bevor SetOutputFormat überhaupt aufgerufen wird? –

Verwandte Themen