IllegalStateException [start in invalid state: 1] when restarting Android MediaRecorder

I am trying to implement simple logic to start / stop recording using MediaRecorderAndroid.

Cycle

  • connect to localSocket / set options / mRecorder.prepare ();
  • mRecorder.start ();
  • mRecorder.stop (); mRecorder.reset ();

Then, loop between 2 and 3.

In the first cycle, 1,2,3 works fine, as expected, however, I have an error in the second start (reboot) after the first stop.

com.example.app E/MediaRecorder﹕ start called in an invalid state: 1

What is MediaRecorder state 1? What am I missing? Thanks for your input.

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(); }
}
+2
source share
4 answers

. 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;

}
+1

scond, , , , -

0

, , .

@Pulkit Sethi, state-1 , MediaRecorder , .

, , - sender.getFileDescriptor() setOutputFile.

, , MediaRecorder, .

,

  • localSocket/Server
  • localSocket/set options/mRecorder.prepare();
  • mRecorder.start();
  • //

, , , , // .

   if (cmd.equals("stop"))

    try
    {
        if (sender != null)
        {
            sender.close();
        }
        if (receiver != null)
        {
            receiver.close();
        }
        if (server != null)
        {
            server.close();
        }
    }
    catch (IOException e)
    {
        e.printStackTrace();  
    } 
    sender = null;
    receiver = null;
    server = null;  
}

MediaRecorder

mRecorder.release();

0

, . , MediaRecorder , , .

0
source

All Articles