Android MediaRecorder Video - воспроизведение аудио и видео треков

Я обнаружил ошибку, в основном присутствующую на устройствах Samsung. Я записываю видео с помощью медиа-рекордера (код показан ниже). Он работал безупречно на всех устройствах, но теперь на некоторых устройствах Android аудио и видео дорожки разделены.

Скажем, я снимаю 5 секунд видео. Видео будет длиться 5 секунд, при воспроизведении видео будет воспроизводиться первый кадр видео и 5 секунд звука. После этого воспроизводятся 5 секунд видео. Видеоплеер по умолчанию показывает, что видео заканчивается через 5 секунд, но на самом деле это только звук ...

Есть ли что-нибудь новенькое в 8.0 Oreo, чтобы мне пришлось адаптировать свой MediaRecorder?

Моя настройка медиа-рекордера:

private void SetUpMediaRecorder()
        {
            MediaRecorder.SetAudioSource(AudioSource.Mic);
            MediaRecorder.SetVideoSource(VideoSource.Surface);
            MediaRecorder.SetOutputFormat(OutputFormat.Mpeg4);

            MediaRecorder.SetVideoEncoder(VideoEncoder.H264);
            MediaRecorder.SetAudioEncoder(AudioEncoder.Aac);
            MediaRecorder.SetOutputFile(outputURL);
            MediaRecorder.SetVideoSize(1280, 720);

            MediaRecorder.SetVideoFrameRate(30);
            MediaRecorder.SetVideoEncodingBitRate(2000000);
            MediaRecorder.SetMaxDuration(VideoManager.MAX_VIDEODURATION_MS);

            //Set audio bitrate
            int bitDepth = 16;
            int sampleRate = 44100;
            int bitRate = sampleRate * bitDepth;
            MediaRecorder.SetAudioEncodingBitRate(bitRate);
            MediaRecorder.SetAudioSamplingRate(sampleRate);

            int rotation = (int)ThisActivity.WindowManager.DefaultDisplay.Rotation;
            int orientation = orientations[rotation];
            MediaRecorder.SetOrientationHint(orientation);
            MediaRecorder.Prepare();
        }

Обновлено: я использую Camera2 API

EDIT2: это проблема для некоторых устройств Samsung. Глубокий сон приведет к тому, что отметка времени представления первого кадра будет слишком длинной. Установка метки времени на 1/30 секунды (если ваше видео было снято со скоростью 30 кадров в секунду) решит эту проблему. Вот соответствующая ветка ошибок: https://github.com/googlesamples/android-Camera2Video/issues/24

Я столкнулся с той же проблемой, но безуспешно.

JCutting8 22.09.2018 10:38

Эй, посмотрите на мое последнее обновление вопроса, оно проясняет проблему. Вам нужно будет настроить временную метку вашего первого кадра примерно на 33 мс.

Csharpest 24.09.2018 08:22

@Cshapest Спасибо

JCutting8 24.09.2018 15:20
5
3
481
0

Другие вопросы по теме