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