setVideoSource投掷的RuntimeException(状态:IllegalStateException异常)

问题描述:

当我打电话setVideoSource一个MediaRecorder物体上时,它会引发IllegalStateException异常。我已经检查了这些:setVideoSource投掷的RuntimeException(状态:IllegalStateException异常)

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

Why following code shows setVideoSource failed exception setvideosource-失败的异常

MediaPlayer.prepare() throws IllegalStateException on Android L

但建议要么没有帮助或过不适当的解决方案。

代码如下:

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 
    } 
} 

我敢肯定,setOutputFormat不会被调用setVideoSource之前,被要求并给予正确的权限,并且在存在只是一个录像机对象。

我在安装Marshmallow的Moto G上使用Android SDK 23。

有没有人有任何想法?从异常中获取更多信息会很有用,但Android Studio不会让我知道它。我猜想一个相关的问题是我怎么能在抛出的时候检查一个异常呢?它是否可能包含更多信息而不仅仅是IllegalStateException?

现在异常已更改为RunTimeException,这是令人困惑的。我已经退出了对它所做的任何更改,因此应该抛出IllegalStateException,但现在它几乎停滞在RunTimeException上。嗯......

以下是错误日志:

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

请加上你的错误日志 – USKMobility

您正在使用setOutputFormat和setProfile两者。

删除下面的行

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

和错误走开

你也应该删除线

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

因为mRecorder.setProfile(cpHigh);已经默认添加了这些属性。

+0

这个异常正在抛出在setVideoProduct行之前的setOutputFormat,所以我不认为这就是它... –

+0

setOutputFormat属性添加了两次,setProfile也添加了这个属性。Android的媒体框架是不是太聪明 – USKMobility

+0

但在setOutputFormat被调用之前抛出异常? –