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

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

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

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

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

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


person FuzzyAmi    schedule 03.08.2016    source источник


Ответы (1)


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

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

 new H264TrackImpl(new FileDataSourceImpl(rawDataFile), "eng", 100, 10);
  • последние два параметра (timeScale и frameTick) устанавливают скорость воспроизведения «noraml».
person FuzzyAmi    schedule 03.08.2016
comment
и теперь я могу подтвердить, что когда вы используете MediaMuxer, время презентации ДЕЙСТВИТЕЛЬНО влияет на скорость воспроизведения файла mp4. - person FuzzyAmi; 07.08.2016