Исключение Nullpointerexception при попытке снова записать видео после отмены

У меня есть встроенная камера, которая позволяет пользователю записывать видео с интервальной съемкой. Когда пользователь записывает видео, есть кнопка отмены, которая позволяет пользователю отменить текущую запись. Моя проблема в том, что если после отмены я попытаюсь записать снова, я получаю следующее исключение-

java.lang.NullPointerException: Attempt to read from field 'int android.media.CamcorderProfile.fileFormat' on a null object reference
       at android.media.MediaRecorder.setProfile(MediaRecorder.java:423)
       at xyz.fragments.CameraFragment.prepareFastVideoRecorder(CameraFragment.java:448)
       at xyz.fragments.CameraFragment.access$2300(CameraFragment.java:64)
       at xyz.fragments.CameraFragment$6.onClick(CameraFragment.java:329)
       at android.view.View.performClick(View.java:4756)
       at android.view.View$PerformClick.run(View.java:19761)
       at android.os.Handler.handleCallback(Handler.java:739)
       at android.os.Handler.dispatchMessage(Handler.java:95)
       at android.os.Looper.loop(Looper.java:135)
       at android.app.ActivityThread.main(ActivityThread.java:5253)
       at java.lang.reflect.Method.invoke(Method.java)
       at java.lang.reflect.Method.invoke(Method.java:372)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

онлайн

mMediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_TIME_LAPSE_480P));

Ниже мой код-

start.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {



                        if (prepareFastVideoRecorder()) {

                            mMediaRecorder.start();

                        } else {

                            releaseMediaRecorder();
                        }
                    }
                }
            }
        });

stop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {


                    mMediaRecorder.stop();  // stop the recording
                    releaseMediaRecorder(); // release the MediaRecorder object
                    mCamera.lock();         // take camera access back from 
}
}):


private boolean prepareFastVideoRecorder() {
    mMediaRecorder = new MediaRecorder();
    try {
        mCamera.setPreviewDisplay(null);
    } catch (java.io.IOException ioe) {
        Log.e("Bhuvnesh", "IOException nullifying preview display: " + ioe.getMessage());
    }
    mCamera.stopPreview();
    // Step 1: Unlock and set camera to MediaRecorder
    mCamera.unlock();
    mMediaRecorder.setCamera(mCamera);
    // Step 2: Set sources
    mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
    mMediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_TIME_LAPSE_480P));
    //mMediaRecorder.setCaptureRate(0.1); // capture a frame every 10 seconds
    mMediaRecorder.setCaptureRate(5); // capture a frame every 1 seconds
    // Step 4: Set output file to the socket
    mVideoFile = new File(getOutputMediaFile().toString());
    mMediaRecorder.setOutputFile(mVideoFile.getAbsolutePath());
    if (cameratype == 1)
        mMediaRecorder.setOrientationHint(90);
    else if (cameratype == 2)
        mMediaRecorder.setOrientationHint(270);
    mMediaRecorder.setMaxDuration(60000);
    mMediaRecorder.setOnInfoListener(this);
    // Step 5: Set the preview output
    mMediaRecorder.setPreviewDisplay(mPreview.getHolder().getSurface());
    try {
        mMediaRecorder.prepare();
    } catch (IllegalStateException e) {
        releaseMediaRecorder();
        return false;
    } catch (IOException e) {
        releaseMediaRecorder();
        return false;
    }
    return true;
}

person Programmer    schedule 18.10.2015    source источник
comment
Попробуйте mMediaRecorder.setProfile(CamcorderProfile.get(0, CamcorderProfile.QUALITY_TIME_LAPSE_480P));   -  person JiTHiN    schedule 19.10.2015
comment
Большое спасибо !! Вы можете написать это как ответ с объяснением, чтобы я мог выбрать его как лучший ответ ..   -  person Programmer    schedule 19.10.2015


Ответы (1)


Вам необходимо передать текущий идентификатор камеры при использовании get () в CamcoderProfile. Он вернет профиль камеры по умолчанию, если этот аргумент не передан.

Пытаться,

mMediaRecorder.setProfile(CamcorderProfile.get(camId,CamcorderProfile.QUALITY_TIME_LAPSE_480P));
person JiTHiN    schedule 19.10.2015
comment
Я попробовал эту библиотеку для добавления видео - github.com/sannies/mp4parser .. она отлично работает для добавления видео в том же режиме.. но я хочу добавить видео в другом режиме - замедленная съемка и видео в обычном режиме.. у вас есть идеи, как мне поступить в этом? - person Programmer; 19.10.2015
comment
Это другая тема. Продолжить обсуждение в чате: chat.stackexchange.com/rooms/30426/video-concatenation - person JiTHiN; 19.10.2015
comment
У меня должно быть 20 репутации, чтобы говорить там.. думаю, я задам еще один вопрос по этому поводу.. - person Programmer; 19.10.2015
comment
отправил вопрос для tht. / - person Programmer; 19.10.2015