Android camera2 задержка между видео и звуком

Я пытаюсь записать видео из образца Android camera2

Все работает нормально, но когда я проигрываю видео после записи (с SD-карты), видео начинает зависать, и вы можете слышать только звук на заднем плане, а когда звук останавливается, видео начинает воспроизводиться без звука и времени. видео перескакивает с секунд на минуты (03:24)

private void setUpMediaRecorder() throws IOException {
    mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
    mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);

    mMediaRecorder.setOutputFile(getVideoFile().getAbsolutePath());
    mMediaRecorder.setVideoEncodingBitRate(10000000);
    mMediaRecorder.setVideoFrameRate(30);
    //mMediaRecorder.setMaxDuration(60000); // Set max duration 60 sec.
    mMediaRecorder.setVideoSize(mVideoSize.getWidth(), mVideoSize.getHeight());
    mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
    mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);


    int rotation = getWindowManager().getDefaultDisplay().getRotation();
    int orientation = ORIENTATIONS.get(rotation);

    if (mCameraType == 1) {
        if (orientation == 90) {
            mMediaRecorder.setOrientationHint(270);
        } else if (orientation == 270) {
            mMediaRecorder.setOrientationHint(90);
        }
    }
    else {
        mMediaRecorder.setOrientationHint(orientation);
    }
    mMediaRecorder.prepare();
}

Выясните, что это работает без этих строк:

mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);

Как заставить работать со звуком?

Глупое решение - перезагрузить устройство. Кто-нибудь знает, почему это происходит?

Спасибо за помощь


person Eli Elezra    schedule 20.04.2016    source источник
comment
Не могли бы вы решить проблему? Я столкнулся с той же проблемой на Samsung S7 (уровень API 24), но не на планшете Sony Xperia (уровень API 22). Может проблема в железе/прошивке?   -  person medonja    schedule 28.12.2016


Ответы (1)


Для начала попробуйте использовать CamcorderProfile API для установки значений MediaRecorder с помощью MediaRecorder.setProfile.

Выберите нужное разрешение из списка поддерживаемых профилей, и рекомендуемые параметры кодирования аудио/видео будут установлены при вызове setProfile после настройки источников аудио и видео.

Вы также должны использовать источник звука CAMCORDER, а не микрофон. , но это не должно привести к прерыванию записи.

person Eddy Talvala    schedule 20.04.2016