Попробуйте переместить вызов на setOnInfoListener()
перед вызовом на prepare()
.
В своем собственном коде захвата видео я вызываю setOnInfoListener()
сразу после создания объекта MediaRecorder
.В вашем примере кода хорошее место может быть сразу после reset()
и до setAudioSource()
.
В противном случае тело вашего класса OnInfoListener
выглядит правильно.
Я добавилкод установки MediaRecorder из моего приложения, который работает правильно.
try {
mCamera.unlock();
mMediaRecorder = new MediaRecorder();
mMediaRecorder.setOnErrorListener( new VideoRecorderErrorListener() );
mMediaRecorder.setOnInfoListener( new VideoRecorderInfoListener() );
// As per Android API docs, the ordering of the following initialization
// calls is important.
mMediaRecorder.setCamera(mCamera);
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
mMediaRecorder.setOutputFile( mOutputFilePath );
mMediaRecorder.setMaxFileSize(VIDEO_MAX_FILE_SIZE);
mMediaRecorder.setAudioChannels(AUDIO_CHANNELS);
mMediaRecorder.setAudioSamplingRate(AUDIO_SAMPLING_RATE);
mMediaRecorder.setAudioEncodingBitRate(AUDIO_ENCODING_BIT_RATE);
mMediaRecorder.setMaxDuration(VIDEO_MAX_DURATION);
mMediaRecorder.setVideoFrameRate(mPictureFPS);
mMediaRecorder.setVideoEncodingBitRate(VIDEO_ENCODING_BIT_RATE);
mMediaRecorder.setVideoSize(mPreviewWidth, mPreviewHeight);
mMediaRecorder.setPreviewDisplay(mHolder.getSurface());
mMediaRecorder.prepare();
mMediaRecorder.start();
} catch (IllegalStateException e) {