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)
您正在使用setOutputFormat和setProfile两者。
删除下面的行
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);.
和错误走开
你也应该删除线
mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT); mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
因为mRecorder.setProfile(cpHigh);已经默认添加了这些属性。
这个异常正在抛出在setVideoProduct行之前的setOutputFormat,所以我不认为这就是它... –
setOutputFormat属性添加了两次,setProfile也添加了这个属性。Android的媒体框架是不是太聪明 – USKMobility
但在setOutputFormat被调用之前抛出异常? –
请加上你的错误日志 – USKMobility