Audio 创建/修改chapter trak atoms时应使用哪个mp4时间刻度?

Audio 创建/修改chapter trak atoms时应使用哪个mp4时间刻度?,audio,mp4,aac,Audio,Mp4,Aac,背景:我正在开发一个Swift库,用于以比AVFoundation更简单、用户友好的方式修改有声读物章节和元数据。我根本不使用实际的媒体进行编辑,这只是为了给有声读物文件添加标签和章节。但是,因为我正在创建章节曲目,所以我需要彻底了解持续时间/时间刻度关系的工作原理 我以为我已经把它搞定了,但后来我在一个从不同来源编码的文件上测试了我的库,结果证明,这个来源处理的东西完全不同,我甚至无法在不破坏它的情况下通过该文件 我已经完全超出MP4v2,考虑到我不知道C++。我非常了解,我能够根据MP4v2

背景:我正在开发一个Swift库,用于以比
AVFoundation
更简单、用户友好的方式修改有声读物章节和元数据。我根本不使用实际的媒体进行编辑,这只是为了给有声读物文件添加标签和章节。但是,因为我正在创建章节曲目,所以我需要彻底了解持续时间/时间刻度关系的工作原理

我以为我已经把它搞定了,但后来我在一个从不同来源编码的文件上测试了我的库,结果证明,这个来源处理的东西完全不同,我甚至无法在不破坏它的情况下通过该文件

我已经完全超出MP4v2,考虑到我不知道C++。我非常了解,我能够根据MP4v2和Apple Quicktime文档的组合对atom解析进行建模,但它是如何确定时间尺度的,我一直不知道

我认为我的问题主要存在于
mdhd
atom中,或者可能存在于
tkhd
atom中。我理解
mdhd
atom中使用的时间刻度可能与
mvhd
atom中使用的时间刻度不同,并且一个曲目的
mdhd
atom中使用的时间刻度可能与另一个曲目中使用的时间刻度不同

让我困惑的是,Quicktime文档并没有明确说明我们使用的是
mvhd
timescale还是
mdhd
timescale

例如:

这是
elst
(编辑列表表)原子的文档,它应该是
tkhd
原子中使用的持续时间的来源(如果
elst
存在,如果不存在,
stts
原子持续时间的总和)

轨道持续时间 一个32位整数,以电影的时间刻度为单位指定此编辑段的持续时间

媒体时间 一个32位整数,包含此编辑段媒体内的开始时间(以媒体时间刻度单位)。如果此字段设置为–1,则为空编辑。曲目中的最后一次编辑不应为空编辑。电影持续时间和曲目持续时间之间的任何差异都表示为隐式空编辑

这是否意味着使用
mvhd
时标计算持续时间,而使用
mdhd
时标计算媒体时间?或者文档中“电影”和“媒体”是交替使用的,如果是,当我创建一个用于章节曲目的
tkhd
atom时,我应该使用哪一个来计算持续时间

stts
atom的文档说明:

曲目中媒体的长度[为](未映射到总时间刻度,且不考虑任何编辑列表)

这似乎不正确,因为没有时间刻度,持续时间只是一个无意义的整数。我不能只假设毫秒,因为我发现至少有一个测试文件,其中章节必须使用44100的
mdhd
时间刻度进行计算

atom一章曲目
mdhd
atom中的时间刻度是否应始终反映音轨
mdhd
的时间刻度?是否应使用
mdhd
时标计算
STT
?这里有没有我完全忽略的细节