当我对一个setVideoSource MediaRecorder对象调用时,它会抛出一个IllegalStateException.我查过这些:
(Android SDk 2.1) Getting error when I use setAudioSource and setVideoSource
Why following code shows setVideoSource failed exception设置视频资源-失败-例外
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之前被调用的,正确的权限是被请求和授予的,并且只有一个VideoRecorder对象存在。
我在安装了Marshmallow的Moto上使用Android 23。
有人有什么想法吗?从异常中获取更多信息是有用的,但是Android不让我了解它。我想一个相关的问题是,在抛出异常时,我如何检查它?它是否可能包含更多的信息,而不仅仅是一个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) 发布于 2016-06-28 18:21:33
您同时使用setOutputFormat和setProfile。
移除以下一行
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);.
错误就消失了
您还应该删除行。
mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT);mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
因为mRecorder.setProfile(cpHigh);默认情况下已经添加了这些属性。
https://stackoverflow.com/questions/38083122
复制相似问题