#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);
}