Сервер MediaRecorder умирает, когда setMaxFileSize () и setMaxDuration () используются в комбинации - PullRequest
0 голосов
/ 20 мая 2019

Когда я настраиваю экземпляр MediaRecorder и использую в комбинации setMaxFileSize и setMaxDuration, я получаю сообщение «W / IMediaDeathNotifier: медиа-сервер умер», и запись останавливается.То, что я пытаюсь сделать, это повторять запись до тех пор, пока не будет достигнута максимальная продолжительность.

Когда я использую только методы, они отлично работают.Я могу установить длительность или размер файла и сделать обратный вызов onInfoListener.

mMediaRecorder = new MediaRecorder ();

    mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
    mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);

    // Create a media file name
    @SuppressLint("SimpleDateFormat") final String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
    final File outputFile = getRecordingFile(1,timeStamp);
    mMediaRecorder.setOutputFile(outputFile);
    Log.d(TAG, "OutputFile: " + outputFile);

    mMediaRecorder.setOrientationHint(0);
    mMediaRecorder.setProfile(CamcorderProfile.get(CameraMetadata.LENS_FACING_BACK, CamcorderProfile.QUALITY_1080P));

    totalRecordDuration = 360 * 1000;
    eachFileSize = 50 * 1000000;

    mMediaRecorder.setMaxFileSize(eachFileSize);
    mMediaRecorder.setMaxDuration(totalRecordDuration);


    //Listen to file size and other relevant info to continue recording
    mMediaRecorder.setOnInfoListener(new MediaRecorder.OnInfoListener() {
        private String TAG = "MediaRecorder info listener";
        int i = 2;

        String startTimeStamp = timeStamp;
        File currentOutputFile = outputFile;

        @Override
        public void onInfo(MediaRecorder mr, int what, int extra) {
            switch (what){
                case MediaRecorder.MEDIA_RECORDER_INFO_MAX_FILESIZE_APPROACHING:

                    try {
                        mr.setNextOutputFile(getRecordingFile(i, timeStamp));
                    } catch (IOException e) {
                        e.printStackTrace();
                    }

                    i++;
                    Log.e(TAG, "Max file size approaching");
                    break;

                case MediaRecorder.MEDIA_RECORDER_INFO_MAX_FILESIZE_REACHED:
                    Log.e(TAG, "Max file size reached");
                    //stopRecording();
                    break;

                case MediaRecorder.MEDIA_RECORDER_INFO_MAX_DURATION_REACHED:
                    //stopRecording();

                    Log.e(TAG,"Max duration reached");
                    break;

                case MediaRecorder.MEDIA_RECORDER_INFO_NEXT_OUTPUT_FILE_STARTED:
                    Log.e(TAG,"OutputFile:");
                    break;
            }
        }
    });

    mMediaRecorder.prepare();
...