RM文件格式分析续

前面一章中介绍了RM文件的头。由于是初步理解所以文章比较凌乱。

这一章节介绍RM文件的数据单元。

RM文件的数据单元包括一个数据单元头。数据单元头描述数据单元的内容。

接着就是一系列交叉存取的媒体信息包。

Data Chunk Header

标记数据块的开始位置。一般的RM文件通常只有一个数据块。很大的文件,可能由多个数据块。

Data_Chunk_Header
{
  UINT32     object_id;
  UINT32     size;
  UINT16      object_version;

  if (object_version == 0)
  {
    UINT32    num_packets;
    UINT32    next_data_header;
  }
}

object_id: 数据块头的唯一ID(DATA)。

size:  数据块的大小。

object_version:数据块头对象的版本.

num_packets: 数据块中包的数量。

next_data_header:下一个数据块的开始位置。

Data Packet Header

Media_Packet_Header
{
  UINT16                object_version;

  if ((object_version == 0) || (object_version == 1))
  {
    UINT16        length;
    UINT16        stream_number;
    UINT32        timestamp;
    if (object_version == 0)
    {
      UINT8        packet_group;
      UINT8        flags;
    }
    else if (object_version == 1)
    {
      UINT16        asm_rule;
      UINT8          asm_flags;
    }

    UINT8[length]        data;
  }
  else
  {
    StreamDone();
  }

}


object_version :  媒体数据包头对象的版本号。

length:   数据包的字节数。

stream_number:  用于连接数据包和与之有关的媒体属性头。

timeStamp:  时间戳。

packet_group: 属于哪个组。

flags:  描述这个数据包的属性。

asm_rule: 将ASM rule赋值给这个数据包。

asm_flags:  包含HX_flags.指定流交换指针。

data:  程序指定的媒体数据。


你可能感兴趣的:(Stream,object,header)