ZigZag Sin
登 陆
上一篇:vmhd smhd Box 下一篇:dref Box

dinf Box

Time
2022-2-21 11:39 阅读 316

具体 Box 分析

Dinf Box

官方介绍定义

image-20211222172910230

传送门:MP4 文档 P23页

介绍

这个Box 也是一个 container box,一般用来定位媒体信息。一般会包含一个 Dref Box,Dref 下面会有若干个 Url Box 或者也叫 Urn Box,这些 Box 组成一个表,用来定位 Track 的数据。

Track 可以被分成若干个段,每一段都可以根据 Url 或者 Urn 指向的地址来获取数据,sample 描述中会用这些片段的序号将这些片段组成一个完整的 track,一般情况下当数据完全包含在文件中,Url 和 Urn Box 的字符串是空的。

这个 Box 存在的意义就是允许 MP4 文件的媒体数据分开最后还能进行恢复合并操作,但是实际上,Track 的数据都保存在文件中,所以该字段的重要性还体现不出来。

字段分析

名称大小(byte)意义说明
Box length4Box 整体的大小包含 Header 和 Data部分
Box type4”dinf”的ASCII码,表明是 dinfboxbox 属性值,通常是固定值
Data

工具查看

image-20211222173220119

这个 Box 也就充当分隔符,这里我们直接上代码定义,重点在它的子 Box 里面。

代码定义

// BaseBox.h  

// 这里要在BoxType添加Dinf子Box的类型和对Box获取GetBoxType的实现

// ...
// 其他 Box 的定义

class TimeDinfBox : public BaseBox {
public:
    TimeDinfBox(BoxHeader h);
    TimeDinfBox(BoxHeader h, Timebyte * d): BaseBox(h, d){};
    void AnalyzeBoxHeader(BoxHeader header, size_t offset) override;
};

实现

TimeDinfBox::TimeDinfBox(BoxHeader h) : BaseBox(h) {
    if (h.GetDataSize()) {
        data = new Timebyte[h.GetDataSize()];
    }
}


void TimeDinfBox::AnalyzeBoxHeader(BoxHeader header, size_t offset) {
    if (header.GetType() == DREF) {
 		// 后面解析添加
    }
}
上一篇:vmhd smhd Box 下一篇:dref Box
给我买个键盘吧。。。求打赏。。。
欢迎加群,一起交流~~~