传送门:MP4 文档 P21页
这个 Box 官方也是比较简单的定义了,这个 Box 简单,该 Box 是Container Box,所以重点是在它的子 Box 里面,这个Box 就简单理解为是一个分隔符。
名称 | 大小(byte) | 意义 | 说明 |
---|---|---|---|
Box length | 4 | Box 整体的大小 | 包含 Header 和 Data部分 |
Box type | 4 | ”minf”的ASCII码,表明是 minfbox | box 属性值,通常是固定值 |
Data |
这个 Box 比较简单,这里就不分析,直接看代码定义,后面重点分析它的子 box。
在 Box Type 添加对应子 Box 的枚举和 BoxHeader中添加 GetType 获取对应 Box
// BaseBox.h
enum BOX_TYPE{
FTYP,
MOOV,
MVHD,
TRAK,
LODS,
TKHD,
MDIA,
MDHD,
HDLR,
MINF,
// 添加4个新的Box类型
VMHD,
SMHD,
DINF,
STBL,
UUID,
MDAT,
ERROR
};
// BoxHeader 的就不在这里添加了 按照以往的格式添加便可
// ...
// 其他 Box 的定义
class TimeMinfBox : public BaseBox {
public:
TimeMinfBox(BoxHeader h);
TimeMinfBox(BoxHeader h, Timebyte * d): BaseBox(h, d){};
void AnalyzeBoxHeader(BoxHeader header, size_t offset) override;
};
实现
// TimeMinfBox.cpp
TimeMinfBox::TimeMinfBox(BoxHeader h) : BaseBox(h) {
if (h.GetDataSize()) {
data = new Timebyte[h.GetDataSize()];
}
}
void TimeMinfBox::AnalyzeBoxHeader(BoxHeader header, size_t offset) {
if (header.GetType() == VMHD) {
// 后面解析添加
}
if (header.GetType() == DINF) {
// 后面解析添加
}
if (header.GetType() == STBL) {
// 后面解析添加
}
}