Android MediaRecorder - "start failed: -19"

I am trying to create an Android VCR and I have prepared my code that should work, but I constantly get the error message start failed: -19 .

Here is my code:

 public boolean startRecording() { try { camera.unlock(); mediaRecorder = new MediaRecorder(); mediaRecorder.setOnErrorListener(new MediaRecorder.OnErrorListener() { @Override public void onError(MediaRecorder mr, int what, int extra) { Log.i(TAG, "Error"); } }); mediaRecorder.setCamera(camera); mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); Log.i(TAG, "a"); mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263); Log.i(TAG, "b"); mediaRecorder.setMaxDuration(maxDurationInMs); // set to 20000 String uniqueOutFile = OUTPUT_FILE + System.currentTimeMillis() + ".3gp"; File outFile = new File(uniqueOutFile); if (outFile.exists()) { outFile.delete(); } mediaRecorder.setOutputFile(uniqueOutFile); mediaRecorder.setVideoFrameRate(videoFramesPerSecond); // set to 20 mediaRecorder.setVideoSize(sView.getWidth(), sView.getHeight()); Log.i(TAG, "c"); mediaRecorder.setPreviewDisplay(holder.getSurface()); mediaRecorder.setMaxFileSize(maxFileSizeInBytes); // set to 50000 mediaRecorder.prepare(); Log.i(TAG, "d"); mediaRecorder.start(); Log.i(TAG, "e"); return true; } catch (IllegalStateException e) { Log.i(TAG, "f"); Log.e(TAG, e.getMessage()); e.printStackTrace(); camera.lock(); return false; } catch (IOException e) { Log.i(TAG, "g"); Log.e(TAG, e.getMessage()); e.printStackTrace(); camera.lock(); return false; } catch (RuntimeException e) { Log.i(TAG, "h"); Log.e(TAG, e.getMessage()); camera.lock(); return false; } } 

All debug logs (from "a" to "d") are printed in the log, so it seems that all the steps to mediaRecorder.prepare() done correctly. Then it catches a RuntimeException with the message start failed: -19 . There is a similar question , but this does not solve my problem.

Is there any other reason to get such an error?

+6
source share
5 answers

Just found out an error in this line:

 mediaRecorder.setVideoSize(sView.getWidth(), sView.getHeight()); 

after commenting on this line, the code works fine!

+14
source

I solved my problem as soon as I added this for video recording

 /** * Start video recording by cleaning the old camera preview */ private void startVideoRecorder() { // THIS IS NEEDED BECAUSE THE GLASS CURRENTLY THROWS AN ERROR OF // "MediaRecorder start failed: -19" // THIS WONT BE NEEDED INCASE OF PHONE AND TABLET // This causes crash in glass kitkat version so remove it // try { // mCamera.setPreviewDisplay(null); // } catch (java.io.IOException ioe) { // Log.d(TAG, // "IOException nullifying preview display: " // + ioe.getMessage()); // } // mCamera.stopPreview(); // mCamera.unlock(); recorder = new MediaRecorder(); // Let initRecorder so we can record again initRecorder(); } /** * Initialize video recorder to record video */ private void initRecorder() { try { File dir = new File(folderPath); if (!dir.exists()) { dir.mkdirs(); } mCamera.stopPreview(); mCamera.unlock(); videofile = new File(dir, fileName + ".mp4"); recorder.setCamera(mCamera); // Step 2: Set sources recorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER); recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); // Step 3: Set a CamcorderProfile (requires API Level 8 or higher) recorder.setProfile(CamcorderProfile .get(CamcorderProfile.QUALITY_HIGH)); // Step 4: Set output file recorder.setOutputFile(videofile.getAbsolutePath()); // Step 5: Set the preview output recorder.setPreviewDisplay(mPreview.getHolder().getSurface()); // Step 6: Prepare configured MediaRecorder recorder.setMaxDuration(video_duration * 1000); recorder.setOnInfoListener(new OnInfoListener() { @Override public void onInfo(MediaRecorder mr, int what, int extra) { if (what == MediaRecorder.MEDIA_RECORDER_INFO_MAX_DURATION_REACHED) { mCamera.stopPreview(); releaseMediaRecorder(); /* * initiate media scan and put the new things into the * path array to make the scanner aware of the location * and the files you want to see */MediaScannerConnection.scanFile( CuxtomCamActivity.this, new String[] { videofile.getPath() }, null, null); Intent intent = new Intent(); intent.putExtra(CuxtomIntent.FILE_PATH, videofile.getPath()); intent.putExtra(CuxtomIntent.FILE_TYPE, FILE_TYPE.VIDEO); setResult(RESULT_OK, intent); finish(); } } }); recorder.prepare(); recorder.start(); } catch (Exception e) { Log.e("Error Stating CuXtom Camera", e.getMessage()); } } private void releaseMediaRecorder() { if (recorder != null) { recorder.reset(); // clear recorder configuration recorder.release(); // release the recorder object recorder = null; } } 

A detailed guide applies to Open Source Cuxtom Cam

+2
source

the problem is in the setVideoSize() code.

and why is this code error ...

From the research I did, error code -19 occurs when there is a problem with the video size set by MediaRecorder#setVideoSize()

run this code and look at the whitch screen that your camera can support on your device:

 final List<Camera.Size> mSupportedVideoSizes = getSupportedVideoSizes(mCamera); for (Camera.Size str : mSupportedVideoSizes) Log.e(TAG, "mSupportedVideoSizes "+str.width + ":" + str.height + " ... " + ((float) str.width / str.height)); 

and method:

 public List<Size> getSupportedVideoSizes(Camera camera) { if (camera.getParameters().getSupportedVideoSizes() != null) { return camera.getParameters().getSupportedVideoSizes(); } else { // Video sizes may be null, which indicates that all the supported // preview sizes are supported for video recording. return camera.getParameters().getSupportedPreviewSizes(); } } 
0
source

I had this problem with some specific phones, I found out that in some of them I could not set the size of the camcoder profile. But when it worked for problem androids, it stopped working on previous working devices.

So, in the end, my implemented logic was something like this:

  • Set Width / Height
  • Try running the merdia recorder
  • In case of an exception, try again without setting the width / height

Kind of garbage logic, but it worked.

I installed a github project with this implementation, try: https://github.com/rafaelsilverio/MediaRecorder

0
source

I also ran into this problem and annotated the following two ways because the hardware does not support two configurations.

 MediaRecorder .setVideoSize() MediaRecorder .setVideoFrameRate() 
0
source

Source: https://habr.com/ru/post/915181/


All Articles