Android MediaRecorder Video - аудио и видео трек, воспроизводимый впоследствии - PullRequest
0 голосов
/ 28 июня 2018

Я столкнулся с ошибкой, в основном присутствующей на устройствах 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

...