gpt4 book ai didi

java - IllegalStateException [start 在无效状态下调用 : 1] on restarting Android MediaRecorder

转载 作者:行者123 更新时间:2023-11-30 11:23:05 24 4
gpt4 key购买 nike

我正在尝试实现简单的逻辑以使用 Android 的 MediaRecorder 开始/停止录制。

循环是

  1. 连接到 localSocket/设置选项/mRecorder.prepare();
  2. mRecorder.start();
  3. mRecorder.stop(); mRecorder.reset();

然后,在 2 和 3 之间循环。

在第一个周期中,1、2、3 按预期工作正常,但是,我在第一次停止后的第二次启动(重新启动)时遇到错误。

com.example.app E/MediaRecorder:在无效状态下开始调用:1

什么是 MediaRecorder state 1?我想念什么?感谢您的输入。

if (cmd.equals("connect"))
{
try
{
sender.connect(new LocalSocketAddress(SOCKET_ADDRESS));
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.AAC_ADTS);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
mRecorder.setOutputFile(sender.getFileDescriptor());
mRecorder.prepare();
}
catch (IOException e)
{ e.printStackTrace(); }
}
if (cmd.equals("start"))
{
try
{
mRecorder.start();
}
catch (IllegalStateException e)
{ e.printStackTrace(); }
}
if (cmd.equals("stop"))
{
try
{
mRecorder.stop();
mRecorder.reset();
}
catch (Exception e)
{ e.printStackTrace(); }
}

最佳答案

我遇到了同样的问题。我必须创建一个函数 initRecorder 来设置和准备媒体记录器。然后我每次在按下开始按钮之后但在调用开始之前调用这个函数。停止后的 recreate() 也有效。

    StartRecording.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

toneG.startTone(ToneGenerator.TONE_CDMA_ALERT_CALL_GUARD, 100);

try {
try {
initRecorder(mHolder.getSurface());
} catch (IOException e) {
e.printStackTrace();
}
mMediaRecorder.start();

Log.e("mRecorder", "Started");
} catch (RuntimeException e) {
Log.e("mRecorder", "Start Failure");
e.printStackTrace();

}
}
});


private void initRecorder(Surface surface) throws IOException {

toneG.startTone(ToneGenerator.TONE_CDMA_ALERT_CALL_GUARD, 1000);

if (mMediaRecorder == null) mMediaRecorder = new MediaRecorder();

// mMediaRecorder.setCamera(mCamera);

mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);

// mMediaRecorder.setOutputFormat(8);
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
//mMediaRecorder.setVideoEncodingBitRate(512 * 1000);
mMediaRecorder.setVideoFrameRate(30);
// mMediaRecorder.setVideoSize(640,480);

mMediaRecorder.setPreviewDisplay(surface);
mMediaRecorder.setOutputFile(path);

// mMediaRecorder.setPreviewDisplay(mHolder.getSurface());
mMediaRecorder.setMaxDuration(10000); // 10 seconds
try {
mMediaRecorder.prepare();
Log.e("mRecorder", "Prepared");
} catch (IOException e) {
Log.e("mRecorder", "Prepare Failure");
e.printStackTrace();
}

mInitSuccesful = true;

}

关于java - IllegalStateException [start 在无效状态下调用 : 1] on restarting Android MediaRecorder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21396140/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com