Конфликт MediaRecoder и MediaPlayer

#android #android-mediaplayer #android-mediarecorder

#Android #android-mediaplayer #android-mediarecorder

Вопрос:

Я сталкиваюсь с проблемой при использовании MediaRecorder и MediaPlayer . Мне нужно одновременно воспроизводить аудио-руководство и записывать видео в моем приложении. Он отлично работает на современном устройстве Android. Но на некоторых старых устройствах (Samsung Galaxy J7, Android 7) видеозапись MediaRecorder, похоже, прерывается MediaPlayer . При воспроизведении звука на выходе видео останавливается кадр, когда кадр аудио-видео становится нормальным. Если MediaRecorder этого не setAudioSource происходит, видео было записано, как ожидалось. У кого-нибудь есть идеи по этому поводу? Спасибо.

Это настроенная функция MediaRecorder

 private void setUpMediaRecorder() throws IOException {
    if (null == activity) {
        return;
    }
    mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
    mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
    if (mVideoAbsolutePath == null || mVideoAbsolutePath.isEmpty()) {
        mVideoAbsolutePath = checkAndGetVideoFilePath(activity);
    }
    mMediaRecorder.setOutputFile(mVideoAbsolutePath);
    mMediaRecorder.setVideoEncodingBitRate(Constants.VIDEO_BIT_RATE);
    mMediaRecorder.setVideoFrameRate(Constants.VIDEO_FPS);
    mMediaRecorder.setVideoSize(mVideoSize.getWidth(), mVideoSize.getHeight());
    mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
    mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
    int rotation = activity.getWindowManager().getDefaultDisplay().getRotation();
    switch (mSensorOrientation) {
        case SENSOR_ORIENTATION_DEFAULT_DEGREES:
            mMediaRecorder.setOrientationHint(DEFAULT_ORIENTATIONS.get(rotation));
            break;
        case SENSOR_ORIENTATION_INVERSE_DEGREES:
            mMediaRecorder.setOrientationHint(INVERSE_ORIENTATIONS.get(rotation));
            break;
    }
    mMediaRecorder.prepare();
}
  

Это функция для воспроизведения аудиофайла в ресурсе

 private void playAudio(int audioResourceId, MediaPlayer.OnCompletionListener onPlayComplete) {
    mediaPlayer = MediaPlayer.create(getContext(), audioResourceId);
    mediaPlayer.setVolume(1.0f, 1.0f); //set volume takes two paramater
    mediaPlayer.start(); // no need to call prepare(); create() does that for you
    mediaPlayer.setOnCompletionListener(onPlayComplete);
}