Я использую MediaCodec в приложении для Android, чтобы кодировать кадры с камеры USB, а затем передавать этот необработанный поток в mp4parser для создания mp4 (уровень API - 16).Кодер MediaCodec h264 выводит большой необработанный поток
Все работает действительно хорошо на многих устройствах, но у меня есть проблемы с Galaxy S3 (I9300).
Проблема в том, что когда я отправляю кадры в кодировщик в течение 1 минуты, иногда я получаю очень большой вывод из кодировщика.
Диапазон размеров составляет от 2,5 МБ до 20 МБ. Эта проблема ухудшается при использовании более длинных клипов, например, 7 минутный диапазон составляет 9 МБ-120 МБ.
Это нормально?
Я попытался захватить ту же сцену, но все же получил разные результаты.
Настройки кодировщик:
Codec: OMX.SEC.AVC.Encoder
Color Format: 21
KEY_FRAME_RATE: 8.77
KEY_BIT_RATE: ~880Kbit
Еще одна вещь, при отправке кадров в кодере я использую:
mediaVideoCodec.queueInputBuffer(inputBufferIndex, 0, FrameData.length, computePresentationTime(frameCounter), 0);
и функция
private long computePresentationTime(int frameIndex) {
return (long)(132 + (frameIndex * (1000000f/8.77f)));
}
Кодирование выполняется в фоновом потоке, поэтому я не уверен, что могу использовать системное время здесь, если производитель не сохранит кадр и t IME. Правильно ли это и что представляет собой 132?
Благодарим за помощь.
Благодарим за отзыв fadden. Устройство Samsung Galaxy S3 работает 4.4.2, а камера производит 384x288 кадров при ~ 8,77 кадра в секунду. Проблема не возникает на Nexus 5 (6.0.1) и Sony Xperia Z3 (5.1.1). – Alon