RM/RMVB 文件格式-总结
RM文件格式是标准的标记符文件格式,RM文件格式把标记符块组合成头块,数据快,索引块,这些标记符块的组合方法如下:
RM文件格式是标记符文件格式,所以块的先后次序并不确定,只有RM文件头必须是文件的第一个块。典型的RM格式文件的头段:RM文件头(必须是文件的第一块)、属性头、媒体属性头、内容描述头。在RM文件头后面,其他的头可以按任何次序出现,除了索引头以外,其他的头都必须要 |
RM/RMVB 文件格式-.RMF(文件头)
2010-05-14 16:30
每一个RM文件都以RM文件头开始,RM文件头标识文件是RMF类型,在RM文件中只有一种RM文件头,因为RM文件头的内容可能随着RMF的版本不同而改变,所以头结构里面有个版本域来指明有什么其他的额外域存在。下面的数据结构就是RM文件头的数据存储方式: RealMedia_File_Header { UINT32 object_id; UINT32 size; UINT16 object_version; if((object_version= =0)||(object_version= =1)) { UINT32 file_version; UINT32 num_headers; } } 结构中包含有如下成员: object_id,RM文件的唯一标识(“.RMF”),所有的RM文件都以这个标识开头,用32个二进制位表示; size,RM头段的大小,用32个二进制位表示;//上述结构体中五个元素都含有时,为18字节 object_version,RM文件头的版本,决定结构中其他成员的取舍,用16个二进制位表示; file_version,RM文件的版本,用32个二进制位表示; num_headers,头段中RM文件头后面的包含的头的个数,用32个二进制位表示。
注:num_headers具体指那些头的个数,不明,有文件该值为7,但仅包含1个PROP,3个MPPR,1个CONT,如果算上.RMF共6个;另外有文件该值为7,包含有1个PROP,3个MPPR,1个CONT,如果算上.RMF共6个,如果算上INDX(3个)则总数是9个。 如图: |
RM/RMVB 文件格式-PROP(属性头)
2010-05-14 17:01
属性头 PROP 属性头描述了RM文件的一般媒体属性,RM系统的组件根据属性头进行适当的配置来 处理RM文件或RM流中数据。在RM文件中只有一个属性头,下面的数据结构 就是属性头的数据存储方式: Properties { UINT32 object_id; [0-3] UINT32 size;[4-7] UINT16 object_version;[8-9] if(object_version==0) { UINT32 max_bit_rate;[10 - 13] UINT32 avg_bit_rate;[14 - 17] UINT32 max_packet_size;[18 - 21] UINT32 avg_packet_size;[22 - 25] UINT32 num_packets;[26 - 29] UINT32 duration;[30 - 33] UINT32 preroll; [34 - 37] UINT32 index_offset; [38 - 41] UINT32 data_offset; [42 - 45] UINT16 num_streams; [46 - 47] UINT16 flags; [48 - 49] } } 结构中包含有如下成员: object_id,属性头唯一标识 (“PROP”),用32个二进制位表示; size,属性头大小,用32个二进制位表示;10+40字节 object_version,RM文件头版本,决定结构中其他成员的取 舍,此结构中此值为零,用16个二进制位表 示; max_bit_rate,网络传输 时要求的最大比特率,用32个二进制位表示; avg_bit_rate,网络传输 时要求的平均比特率,用32个二进制位表示; max_packet_size,最 大媒体数据包的大小(以字节计算),用32个二进制位表示; avg_packet_size,平 均媒体数据包的大小(以字节计算),用32个二进制位表示; num_packets,媒体数据包 个数,用32个二 进制位表示; duration,媒体文件应该播放 的时间(以毫秒计算),用32个二进制位表示; preroll,回放之前的预留毫秒 数,用32个二进 制位表示; index_offset,索引头到 文件开始的偏移,这个值可为零,表明没有索引段,用32个二进制位表示; data_offset,数据段到文 件开始的偏移,用32个二进制位表示(注:在RM文件中可以有不止一个数据块头,这个值只表示第一个数据块头到文件开始的偏移,其他数据块头的偏移可以从数据块头中next_data_header域得到); num_streams,在主头段中 包含的全部媒体属性头(MDPR)的个数,用16个二进制位表示; flags,包含文件信息的位掩码, 用16个二进制位 表示。具体信息如表5.1,其它位应设置为零。 //flags,文件中flag出现过如下 值:0009,000b 所以下述 位掩码显然不完全 文件信息的位掩码表
RM/RMVB 文件格式-MDPR(媒体属性头) 2010-05-14 17:30
图例: |