我要录制视频,但它不起作用
public void startRecord() {
if (preVideo()) {
mRecorder.start();
}
isRecording = true;
}
public boolean preVideo() {
if (mCamera == null) {
return false;
}
mRecorder = new MediaRecorder();
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
CamcorderProfile cpHigh = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH);
mRecorder.setProfile(cpHigh);
mRecorder.setOutputFile(createFile().toString());
mRecorder.setVideoSize(mFrameWidth, mFrameHeight);
return true;
}和逻辑猫;
致命异常:主进程: pt.chambino.p.pulse,PID: 6578 java.lang.IllegalStateException at android.media.MediaRecorder.start(原生方法)在org.opencv.android.MyJavaCameraView.startRecord(MyJavaCameraView.java:375) at pt.chambino.p.pulse.App.onRecord(App.java:241) at pt.chambino.p.pulse.App.onOptionsItemSelected(App.java:213) at android.app.Activity.onMenuItemSelected(Activity.java:2600) at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(( com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:735) at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java: at PhoneWindow.java:1019)(在com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:874) at com.android.internal.view.menu.ActionMenuView.invokeItem(ActionMenuView.java:546) )在com.android.internal.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:119) at android.view.View.performClick(View.java:4569)在android.view.View$PerformClick.run(View.java:18553) at android.os.Handler.handleCallback(Handler.java:733)在android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:212)在android.app.ActivityThread。java.lang.reflect.Method.invoke(Method.java:515)的java.lang.reflect.Method.invokeNative(原生方法)的main(ActivityThread.java:5151)在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:684)在dalvik.system.NativeStart.main(本地方法)
发布于 2018-03-22 19:25:18
有两种方法可以使用IllegalStateException来触发MediaRecorder.start()
MediaRecorder做好适当的准备。考虑一下来自文献资料的状态图

不考虑第一个选项,因为没有足够的信息来确认或拒绝它,如果我要比较您的代码流,那么您似乎遗漏了两个步骤:
setOutputFormatprepare您还将视频源设置为您的手机屏幕而不是照相机,因此我将更改您的代码如下:
public void startRecord() {
try {
if (preVideo()) {
mRecorder.start();
isRecording = true;
}
} catch(IOException | IllegalStateException e) {
e.printStackTrace();
// Error handling
}
}
public boolean preVideo() throws IllegalStateException, IOException {
if (mCamera == null) {
return false;
}
mRecorder = new MediaRecorder();
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
CamcorderProfile cpHigh = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH);
mRecorder.setProfile(cpHigh);
mRecorder.setOutputFile(createFile().toString());
mRecorder.setVideoSize(mFrameWidth, mFrameHeight);
mRecorder.prepare();
return true;
}发布于 2022-04-26 10:38:15
替换:
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);,下面是:
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);https://stackoverflow.com/questions/49436316
复制相似问题