Где в файловая структура mp4 - это продолжительность?
Кто-нибудь знаком с структурой данных mp4?
Ответ 1
Это не может быть ответом на вашу проблему, но она была моей: http://mediainfo.sourceforge.net/
(У него есть библиотека и открытый исходный код, поэтому вы можете просто проверить, какие части вам нужны)
Ответ 2
Смотрите проект https://github.com/sannies/mp4parser. Это библиотека Java, которая отображает структуру файлов mp4.
Ответ 3
Насколько я знаю - контейнер "mp4" получен из структуры атома QuickTime. Вы можете прочитать описание формата файла QuickTime.
Агрессивные атомы quicktime не имеют большого значения (посмотрите atomParsley project). Я не уверен в MP4, но что касается MOV файлов - там есть поле "длительность" в атоме "mvhd" (заголовка видео), а также в "tkhd" (заголовок заголовка). Эта длительность обычно представляет собой число кадров, умноженное на атрибут "временной шкалы". Шкала времени может быть найдена в тех же атомах.
Ответ 4
Для считывателя Red5 MP4 я использовал атом "mvhd", так как он содержит как временные шкалы, так и длительность. Получение продолжительности от атома будет отличаться в зависимости от используемой версии, ниже вы можете увидеть пример:
public long create_full_atom(MP4DataStream bitstream) throws IOException {
long value = bitstream.readBytes(4);
version = (int)value >> 24;
flags = (int)value & 0xffffff;
readed += 4;
return readed;
}
public long create_movie_header_atom(MP4DataStream bitstream) throws IOException {
create_full_atom(bitstream);
if (version == 1) {
creationTime = createDate(bitstream.readBytes(8));
modificationTime = createDate(bitstream.readBytes(8));
timeScale = (int)bitstream.readBytes(4);
duration = bitstream.readBytes(8);
readed += 28;
} else {
creationTime = createDate(bitstream.readBytes(4));
modificationTime = createDate(bitstream.readBytes(4));
timeScale = (int)bitstream.readBytes(4);
duration = bitstream.readBytes(4);
readed += 16;
}
int qt_preferredRate = (int)bitstream.readBytes(4);
int qt_preferredVolume = (int)bitstream.readBytes(2);
bitstream.skipBytes(10);
long qt_matrixA = bitstream.readBytes(4);
long qt_matrixB = bitstream.readBytes(4);
long qt_matrixU = bitstream.readBytes(4);
long qt_matrixC = bitstream.readBytes(4);
long qt_matrixD = bitstream.readBytes(4);
long qt_matrixV = bitstream.readBytes(4);
long qt_matrixX = bitstream.readBytes(4);
long qt_matrixY = bitstream.readBytes(4);
long qt_matrixW = bitstream.readBytes(4);
long qt_previewTime = bitstream.readBytes(4);
long qt_previewDuration = bitstream.readBytes(4);
long qt_posterTime = bitstream.readBytes(4);
long qt_selectionTime = bitstream.readBytes(4);
long qt_selectionDuration = bitstream.readBytes(4);
long qt_currentTime = bitstream.readBytes(4);
long nextTrackID = bitstream.readBytes(4);
readed += 80;
return readed;
}
На боковой ноте я использовал значения для вычисления времени воспроизведения и fps следующим образом:
double fps = (videoSampleCount * timeScale) / (double) duration;
double videoTime = ((double) duration / (double) timeScale);
Переменная videoSampleCount исходит от атома "stsz". Ответ 5
MP4 - это "контейнерный" формат, который в основном означает, что он может содержать несколько различных аудио- или видеопотоков. И каждый поток может иметь собственное значение продолжительности...
Чтобы узнать, что вам нужно, вам понадобится еще несколько файлов справки. Я мог бы предложить посмотреть здесь и здесь... но вам, вероятно, придется искать дальше, чем для различных типов потоков A/V, которые вы хотите поддерживать.
Ответ 6
Использование MP4Parser http://code.google.com/p/mp4parser/, как упоминалось в предыдущем посте, - у них даже есть образец, который обеспечивает продолжительность:
Ответ 7
В основном структура MP4 - это дерево. Область макросов:
- ftyp - тип файла
- moov - содержит метаданные (название песни, авторы, url и другая информация).
- free - пустая область для разделения заголовка и данных
- mdat - содержит звуковые кадры
Вы можете попробовать этот бесплатный инструмент анализатора MP4
http://www.thinmultimedia.co.kr/products/MP4Reader_download.html
Ответ 8
Продолжительность фильма находится в заголовке видео mvhd. Длительность в секундах выводится из двух полей в mvhd.
- 4 байт шкалы времени
- продолжительность 4 байта
Это строки 380 и 382 в спецификации, опубликованной @Tom Brito.
Таким образом, заданная временная шкала 'ts' и длительность 'dur'
Duration in seconds = dur / ts
Ответ 9
Можно использовать Media Box Viewer. Это MP4 и парсер Quicktime. Когда вы открываете файл Quicktime, вы можете увидеть структуру атома. Посмотрите на видео описание атома. Одним из его свойств является продолжительность. Средство просмотра медиа-боксов можно загрузить из www.jdxsoftware.org.