Что влияет на скорость воспроизведения при кодировании с помощью Android MediaCodec + mp4parser?

Я пытаюсь записать, кодировать и, наконец, создать короткий фильм на Android (используя API 16) с комбинацией MediaCodec и Mp4Parser (для инкапсуляции в .mp4).

Все работает просто отлично, за исключением продолжительности .mp4: его длина всегда 3 секунды - и он работает примерно в два раза быстрее «правильной» скорости.

Вход для энкодера составляет 84 кадра (с интервалом 100 мс).Последний кадр устанавливает флаг «конец потока».Я устанавливаю время презентации для каждого кадра наqueueInputBuffer

Я пытался настроить каждый возможный параметр - но, похоже, ничего не изменило - фильм всегда длится 3 секунды - и всегда проигрывается слишком быстро.

Так что же управляет воспроизведением seepd? Как создать фильм со скоростью «natuarl»?

Ответы на вопрос(1)

Решение Вопроса

Я понял это: при инкапсуляции с mp4parser (необходим, если вы нацелены на API <18), вам нужно установить скорость в API mp4parser. Время презентации, которое вы предоставляетеqueueInputBuffer по-видимому, не имеет значения, если вы не используете встроенный мультиплексор Android (доступно только из API18).

Я наткнулся наэтот вопрос по github, который указывает на следующее:

 new H264TrackImpl(new FileDataSourceImpl(rawDataFile), "eng", 100, 10);
последние два параметра (timeScale и frameTick) устанавливают скорость воспроизведения на «noraml».
 FuzzyAmi07 авг. 2016 г., 14:00
и теперь я могу подтвердить, что когда вы используете MediaMuxer, время представления DO влияет на скорость воспроизведения файла mp4.

Ваш ответ на вопрос