Android MediaRecorder - “start failed: -19”

后端 未结 5 1340
广开言路
广开言路 2020-11-27 21:42

I\'m trying to create a video recorder on Android, and I\'ve prepared my code which is supposed to be working - but I constantly get an error message start failed: -19

相关标签:
5条回答
  • 2020-11-27 22:22

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

    MediaRecorder .setVideoSize()
    MediaRecorder .setVideoFrameRate()
    
    0 讨论(0)
  • 2020-11-27 22:38

    Just found out the bug, in this line:

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

    after commenting out this line, the code runs perfectly!

    0 讨论(0)
  • 2020-11-27 22:39

    I had that problem with some specific phones, I've found out that I couldn't set camcoder profile sizes in some of them. But when that worked for the problematic androids it stopped working on the previous working devices.

    So in the end my implemented logic was something like:

    • Set width/height
    • Try to start the merdia recorder
    • In case of exception, try again without setting width/height

    Kind of a trash logic, but that worked.

    I've setup a github project with that implementation, try it out: https://github.com/rafaelsilverio/MediaRecorder

    0 讨论(0)
  • 2020-11-27 22:40

    I solved my problem once 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's 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;
        }
    }
    

    For detailed guide refer to this Open Source Cuxtom Cam

    0 讨论(0)
  • 2020-11-27 22:46

    the problem is in your setVideoSize() code .

    and why this code error ...

    From the research I have done, error code -19 comes about when there is a problem with the size of the video as set by MediaRecorder#setVideoSize()

    run this code , and see whitch screen that your camera in your device can support :

    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 is :

    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 讨论(0)
提交回复
热议问题