Примечание: Пока я спрашиваю о поле "chpl", я предполагаю, что тот же вопрос можно задать о окнах "krok" и "dlay" с одинаковым ответом.
Я пытаюсь получить информацию о главе из файла MP4. Я использую библиотеку mp4parser для чтения блоков, но, к сожалению, она не знает о главах, поэтому я сам анализирую эти данные, используя spe c.
Поскольку spe c утверждает, что каждая глава содержит метку времени UI64, размер заголовка UI8 и заголовок UI8 [titleSize], это мой код для чтения глав:
ByteBuffer buffer = //
int chapterCount = buffer.get();
List<Chapter> chapters = new ArrayList<>(chapterCount);
for (int i = 0; i < chapterCount; i++) {
final long timestamp = buffer.getLong();
final int titleSize = buffer.get();
final byte[] bytes = new byte[titleSize];
buffer.get(bytes);
final String title = new String(bytes, StandardCharsets.UTF_8);
chapters.add(new Chapter(title).startTime(timestamp));
}
Это работает ; все заголовки глав анализируются правильно, поэтому я предполагаю, что метки времени тоже правильные.
Однако теперь у меня есть метки времени, которые я не могу сопоставить с временем, например:
0 -> 0:00
70070000 -> ~0:21
13605925667 -> ~22:22
Там Нет очевидной связи между значениями и временем, которому они соответствуют.
После попытки угадать фактор без удачи, я прочитал spe c и нашел «TimeScale» в поле «mvhd». Это 1000, поэтому метки времени в поле «chpl» должны иметь единицу измерения «мс». Очевидно, что это не так.
Как определить / вычислить, в какой единице находится отметка времени «chpl»?