Mediamuxer создает поврежденное видео, когда образцы записываются в пакетном режиме
Я пытаюсь использовать Android MediaMuxer и MediaCodec для создания видео MP4.
Если я сливаю кадры из кодека напрямую в мультиплексор, вызывая writeSampleData(), все работает нормально, и получается правильное видео.
Но если я попытаюсь сначала сохранить эти кадры в массиве, а потом решу отправить их на мультиплексор, я не смогу создать работающее видео, даже если метки времени представления верны.
По какой-то причине кажется, что вывод mediamuxer зависит не только от временных меток представления, но также и от фактического времени, когда вызывается writeSampleData, хотя я понимаю, что правильных временных меток должно быть достаточно.
Кто-нибудь может пролить свет на этот вопрос?
2 ответа
Спасибо mstorsjo и fadden. У меня действительно была комбинация ошибок, которые не позволяли мне понять, что на самом деле происходит. Оба ваших вопроса привели меня к правильному коду и убеждению, что использование writeSampleData() не чувствительно ко времени.
Да, я получал неправильные буферы в первый раз. Изначально проблема не была заметна, потому что мультиплексор записывал кадры до того, как буферы были переписаны. Когда я представил задержки и решил продублировать содержимое буферов, я столкнулся с другой проблемой (в основном с состоянием гонки) и пришел к выводу, что это не так.
Этот код (для проекта SmartPolicing) выполняет захват видео и аудио для создания файла MP4. Я мог бы использовать MediaRecorder (это было первоначальное решение), но мы также хотели перехватить кадры и потоковое видео через Интернет, поэтому мы удалили MediaRecorder и создали собственное решение.
Теперь все идет гладко. Большое спасибо, ребята.
Вы уверены, что на самом деле храните полные данные для записываемых кадров, а не только индексы буфера?