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:  程序指定的媒体数据。


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值