Я собираюсь нанести удар в темноте и сказать, что вы не обновляете свои смещения stbl
должным образом. По крайней мере, я нигде (на первый взгляд) не видел, чтобы ваш питон делал это.
СТСК
Начнем с расположения данных. Пакеты записываются в файл в виде фрагментов, а заголовок сообщает декодеру, где находится каждый «блок» этих фрагментов. В таблице stsc
указано, сколько существует элементов на блок. first chunk
указывает, где начинается этот новый фрагмент. Это немного сбивает с толку, но посмотрите на мой пример. Это говорит о том, что у вас есть 100 сэмплов на чанк, вплоть до 8-го чанка. На 8-м чанке 98 сэмплов.
![введите здесь описание изображения](https://i.stack.imgur.com/R505d.png)
СТКО
Тем не менее, вы также должны отслеживать, где находятся смещения этих фрагментов. Это работа таблицы stco
. Итак, где в файле смещение чанка 1, или смещение чанка 2 и т. д.
![введите здесь описание изображения](https://i.stack.imgur.com/tMJCZ.png)
Если вы измените какие-либо данные в mdat
, вы должны сохранить эти таблицы. Вы не можете просто вырезать mdat
данные и ожидать, что декодер знает, что делать.
Как будто этого было недостаточно, теперь вы также должны поддерживать таблицу времени выборки (stts
), таблицу размера выборки (stsz
) и, если это было видео, таблицу выборки синхронизации (stss
).
СТТС
stts
указывает, как долго должен воспроизводиться семпл в единицах временной шкалы. Если вы делаете аудио, шкала времени, вероятно, составляет 44100 или 48000 (кГц).
![введите здесь описание изображения](https://i.stack.imgur.com/4E2NS.png)
Если вы отключили некоторые данные, теперь все может быть не синхронизировано. Если все значения здесь имеют одинаковую продолжительность, все будет в порядке.
СТСЗ
stsz
указывает размер каждой выборки в байтах. Это важно для того, чтобы декодер мог начать с фрагмента, а затем просмотреть каждый образец по его размеру.
![введите здесь описание изображения](https://i.stack.imgur.com/XadVD.png)
Опять же, если все размеры выборки одинаковы, все будет в порядке. Аудио, как правило, почти одинаково, но видео сильно различается (с ключевыми кадрами и прочим).
СТСС
И последнее, но не менее важное: у нас есть таблица stss
, в которой указано, какие кадры являются ключевыми. У меня есть опыт работы только с AAC, но каждый звуковой кадр считается ключевым кадром. В этом случае у вас может быть одна запись, описывающая все пакеты.
![введите здесь описание изображения](https://i.stack.imgur.com/Evjdd.png)
Что касается вашего первоначального вопроса, отображение времени не всегда одинаково соблюдается в каждом игроке. Самый точный способ — суммировать длительность всех кадров в заголовке и использовать это как общее время. Другие проигрыватели используют метаданные в заголовках дорожек. Я считаю, что лучше оставить все значения одинаковыми, и тогда игроки будут счастливы.
Если вы делаете все это, а я пропустил это в сценарии, вы можете опубликовать образец mp4 и отдельное приложение, и я могу попытаться вам помочь.
person
devshorts
schedule
31.08.2013