Я обнаружил ошибку, в основном присутствующую на устройствах 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
Эй, посмотрите на мое последнее обновление вопроса, оно проясняет проблему. Вам нужно будет настроить временную метку вашего первого кадра примерно на 33 мс.
@Cshapest Спасибо
Я столкнулся с той же проблемой, но безуспешно.