MP4文件是有多个box嵌套构成的,所有数据都必须保存在box中,而且必须包含一个File Type box。探测的前提是我们有一段媒体数据,基本原理就是根据媒体封装格式的特点,对全部已知的格式进行判断并设置一个分值,取其中最高的分值。
一个ASF文件中的段以对象的方式组织起来。一共有三种顶层对象,必须有的头对象(Head),数据对象(Data),以及可选的索引对象(Index)。 每个对象都以全球唯一标志(GUID)和大小开始。这些数字使得文件读者可以解析这些信息,并且载入到相应的对象。因为这些GUID,底层的对象可以以任何顺序排列,并且仍然可以被识别。这使得一个不完整的ASF文件仍然可被正确读取,只要有一个完整的文件头和至少一个数据对象。某些对象,例如流属性对象,可能有多个示例。 头对象包含文件的描述信息,同时是唯一的顶层对象容器。 数据对象以包的格式存储流数据。数据对象还具有文件ID和包总个数属性,但是对于流格式,包总个数属性没有意义。 每一个数据包包含发送时间和持续时间。这使得读者可以发现流传输的中断。
duration中记录的是最长的track的播放长度。rate是16.16的格式,表示优先选择的播放速度,比如ox00010000表示1.0的播放速度。volume是浮点数的8.8的格式,表示优先选择的播放音量,0x0100表示1.0的音量大小。next_track_ID主要用于添加新的track,通常会大约当前文件最大track-ID。
|