在解析RM 文件时我们首先需要了解RM 文件的格式。在下面的内容中将介绍 RM 文件的格式。 RM 文件格式(RealMedia File Format 简称 RMFF),文件单元使用四字符编码。编码是 32 位的。 RMF 的基本单元是 chu nk。是数据的逻辑单元。 每个 chu nk 包含: 1.四字符编码的单元标识符; 2.每个 chu nk 的32 位的数据; 3.未识别的块。 RMFF 的标签 RMFF 的标签由一个头单元,一个数据单元和一个引导单元组成。 在头部中包括一下单元:RM 的文件头,属性头,媒体属性头,内容描述头。 RM 文件头: 每个RM 文件都是以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; } } RMFHeader 的结构体 由于 RMFH 的内容要根据 RMFF 的版本来改变,所以头的结构体有一个版本信息为了扩展方便。 object_id: RMF 唯一的ID 号。是32 位的无符号整型。相当于文件的标识符。 size: RM 头的大小。32 位的无符号整型。 object_version: RMFH 对象的版本。16 位的无符号整型。所有文件依照这个规定有一个object_version 是0 或 1. file_version: 0 或 1. num_headers: 在头部中头的数量。32 位无符号整型。 属性头: 描述 RMF 的一般媒体属性。 RM 系统成员通过这个对象来配置如何处理 RMF 中或者流中的数据。在 RMF 中只有一个属性头。 结构体如下: Properties { UINT32 object_id; UINT32 size; UINT16 object_version; if (object_version == 0) { UINT32 max_bit_rate; UINT32 avg_bit_rate; UINT32 max_packet_size; UINT32 avg_packet_size; UINT32 num_packets; UINT32 duration; UINT32 preroll; UINT32 index_offset; UINT32 data_offset; UINT16 num_streams; UINT16 flags; } } object_id: 属性头的唯一ID,相当于标识符。(PROP) size: 属性头的大小。字节数 object_version: 0 或 1.RMFH 对象的版本。 当object_version==0 时由如下成员。 max_bit_rate: 网络传输这个文件所需要的最大的比特率。 avg_bit_rate: 网络传输这个文件所需要的平均比特率。 max_packet_size: 媒体数据包最大的大小。 avg_packet_size: 媒体数据包的平均...