RM/RMVB 文件格式解析

RM/RMVB 文件格式解析RM RMVB 文件格式解析 rmvbminetype

大家好,欢迎来到IT知识分享网。

1、总述

RM文件格式是标准的标记符文件格式,RM文件格式把标记符块组合成头块,数据快,索引块,这些标记符块的组合方法如下:

在这里插入图片描述

RM文件格式是标记符文件格式,所以块的先后次序并不确定,只有RM文件头必须是文件的第一个块。典型的RM格式文件的头段:RM文件头(必须是文件的第一块)、属性头、媒体属性头、内容描述头。在RM文件头后面,其他的头可以按任何次序出现,除了索引头以外,其他的头都必须要

2、.RMF(文件头)

每一个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; } } 

注:num_headers具体指那些头的个数,不明,有文件该值为7,但仅包含1个PROP,3个MPPR,1个CONT,如果算上.RMF共6个;另外有文件该值为7,包含有1个PROP,3个MPPR,1个CONT,如果算上.RMF共6个,如果算上INDX(3个)则总数是9个。

3、PROP(属性头)

属性头 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] } } 

文件信息的位掩码表

标志 描述
0 保存允许 如果是1,就允许保存此文件到磁盘
1 最佳播放 如果是1, 建议使用额外的缓存
2 实况 如果是1, 表明媒体流来自实况广播

4、MDPR(媒体属性头)

媒体属性头描述了RM文件中每个媒体流的特定属性,RM系统的组件根据媒体属性头进行适当的配置来处理RM流中的媒体数据, RM文件中每一个媒体流有一个媒体属性头

媒体属性头的整体组成

下面的数据结构就是媒体属性头的数据存储方式:

Media_Properties { 
    UINT32 object_id;[0 - 3] UINT32 size;[4 - 7] UINT16 object_version;[8 - 9] if(object_version==0) { 
    UINT16 stream_number; [10 - 11] UINT32 max_bit_rate; [12 - 15] UINT32 avg_bit_rate; [16 - 19] UINT32 max_packet_size;[20 - 23] UINT32 avg_packet_size;[24 - 27] UINT32 start_time;[28 - 31] UINT32 preroll; [32 - 35] UINT32 duration; [36 -39] UINT8 stream_name_size;[40 - 40] UINT8[stream_name_size] stream_name;[41 - 41] UINT8 mime_type_size;[42 - 42] UINT8[mime_type_size] mime_type;[43 - 43] //决定Type_Specific_Data UINT32 type_specific_len;[44 - 47] UINT8[type_specific_len] Type_Specific_Data;[48 - 51] //详细说明见后文 } } 

媒体属性头结构中包含有如下这些成员:

object_id:媒体属性头唯一标识,为“MDPR”;
size,表明媒体属性头的大小;
object_version,媒体属性头版本号;
stream_number,流的标识,表明RM媒体文件中此媒体属性头代表的是哪个数据流(视频数据流或音频数据流),在数据段中的每个数据包中都包含有类似的标识以表明数据是属于哪个媒体流。当版本号为零时此成员才存在;
max_bit_rate,网络上传输此媒体流所要求的最大比特率,当版本号为零时此成员才存在;
avg_bit_rate,网络上传输此媒体流所要求的平均比特率,当版本号为零时此成员才存在;
max_packet_size,媒体流数据包的最大容量(以字节计算),当版本号为零时此成员才存在;
avg_packet_size,媒体流数据包的平均容量(以字节计算),当版本号为零时此成员才存在;
start_time,开始时间(毫秒表示),用于加到数据包时间标志上,当版本号为零时此成员才存在;
preroll,和start_time相反的时间尺度(毫秒表示),用于从数据包时间标志中减去的值,当版本号为零时此成员才存在;
duration,流的持续时间,当版本号为零时此成员才存在;
stream_name_size,流名称所占字节数,当版本号为零时此成员才存在,用8个二进制位表示;
stream_name,流的名称,版本号为零时此成员才存在,大小不定;
mime_type_size,表明下个成员(mime_type)所占的存储空间,版本号为零时此成员才存在,用8个二进制位表示;
mime_type,和流相关的MIME形式的类型或子类型字符串,版本号为零时此成员才存在,大小不定;
type_specific_len,表明下个成员(pe_specific_data)所占的存储空间,版本号为零时此成员才存在,;
Type_Specific_Data,一般用来保存对流进行处理的特殊数据,版本号为零时此成员才存在,大小不定。















mime_type:1、audio/x-pn-realaudio
      2、video/x-pn-realvideo
      3、logical-fileinfo

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/136749.html

(0)
上一篇 2025-06-25 14:20
下一篇 2025-06-25 14:26

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信