RM文件解析之RM文件格式
来源:互联网 发布:linux配置ftp服务器 编辑:程序博客网 时间:2024/05/18 02:37
在解析RM文件时我们首先需要了解RM文件的格式。在下面的内容中将介绍RM文件的格式。
RM文件格式(RealMedia File Format 简称RMFF),文件单元使用四字符编码。编码是32位的。
RMF的基本单元是chunk。是数据的逻辑单元。
每个chunk包含:
1.四字符编码的单元标识符;
2.每个chunk的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: 媒体数据包的平均大小。
num_packets: 媒体信息中数据包数。
duration: 文件的位置。以毫秒为单位。
preroll: 在回放前缓冲区的毫秒数。
index_offset: 从文件开头到索引头对象的字节数。
data_offset: 从文件开头到数据单元的开头的字节数。
num_streams: 在主要的头单元中媒体属性头的数量。
flags: 位屏蔽的一些这些文件的信息。
媒体属性头(Media Properties Header)
描述RM文件的每个流中特殊的媒体属性。住用和属性头差不多。
结构体描述如下:
Media_Properties{ UINT32 object_id; UINT32 size; UINT16 object_version; if (object_version == 0) { UINT16 stream_number; UINT32 max_bit_rate; UINT32 avg_bit_rate; UINT32 max_packet_size; UINT32 avg_packet_size; UINT32 start_time; UINT32 preroll; UINT32 duration; UINT8 stream_name_size; UINT8[stream_name_size] stream_name; UINT8 mime_type_size; UINT8[mime_type_size] mime_type; UINT32 type_specific_len; UINT8[type_specific_len] type_specific_data; }}object_id: 该结构体的实例化ID(MDPR),标识符。
Size: 该结构体的大小。
object_version: 媒体属性头的版本。
stream_number: 标识一个物理流。是一个唯一的值。每个数据包都属于一个物理流,这个物理流和数据包的stream_number相同。
start_time: 在物理流中每个数据包的添加时间戳的开始时间。
stream_name:流的名字
stream_name_size:stream_name的字节数。
mime_type: 一个非唯一索引的MIME风格的类型字符串是关联流的数据。
mime_type_size:mime_type的字节数。
type_specific_data: 通常被用于数据类型描绘器的实例化。为处理物理流。
type_specific_len: type_specific_data的字节数。
Logical Stream Organization
物理流组成逻辑流。逻辑流包含一下信息:
1.标识符:哪些物理流一起组成逻辑流
2.标识逻辑流属性的名字、值、属性。
逻辑流的结构体:
LogicalStream{ ULONG32size; UINT16object_version; if (object_version == 0) { UINT16num_physical_streams; UINT16physical_stream_numbers[num_physical_streams]; ULONG32data_offsets[num_physical_streams]; UINT16num_rules; UINT16rule_to_physical_stream_number_map[num_rules]; UINT16num_properties; NameValuePropertyproperties[num_properties]; }};size:结构体的大小(字节)
object_version: 逻辑流结构体的版本。
如果object_version==0;
则有如下元素:
num_physical_streams: 构成逻辑流的物理流数。
physical_stream_numbers[]: 存储num_physical_streams的数组。这个成眼是可变的。
data_offsets[]: 标志每个物理流的数据单元开始位置。
num_rules: 逻辑流的ASM rulse 的数量。//ASM:制动存储管理
rule_to_physical_stream_map[] : 物理流对应的每个规则的存储列表。
num_properties: NameValueProperty结构体的数量。
properties[]: NameValueProperty结构体的存储列表。
NameValueProperty Structure
NameValueProperty{ ULONG32size; UINT16object_version; if (object_version == 0) { UINT8name_length; UINT8name[namd_length]; INT32 type; UINT16value_length; UINT8value_data[value_length]; }}size: NameValueProperty结构体的大小(字节数)。
object_version: 结构体的版本。
如果object_version==0;则有如下元素。
name_length: 名字的大小。
name[]: 名字信息。
type: 数据的类型。
value_length: 数据信息的长度。
value_data[]: 数据。
Content Description Header
Content_Description{ UINT32 object_id; UINT32 size; UINT16 object_version
; if (object_version == 0) { UINT16 title_len; UINT8[title_len] title; UINT16 author_len; UINT8[author_len] author; UINT16 copyright_len; UINT8[copyright_len] copyright; UINT16 comment_len; UINT8[comment_len] comment; }}
展示文件的信息。是文本信息。包括文件的title.author.copyright和comments information.- RM文件解析之RM文件格式
- [rm]realmedia文件格式解析
- RM文件格式之引导单元
- 多码流RM文件的解析
- RM 文件格式简析
- RM/RMVB文件格式总结
- RM文件格式分析续
- RM/RMVB文件格式总结
- RM RMVB文件格式分析
- RM/RMVB文件格式总结
- rm
- rm
- rm
- rm
- rm
- rm
- RM角度解析
- 如何播放RM文件?
- 你需要准备的五个面试问题
- 72法则
- VIM中常用的查找、替换、删除模式总结
- WinForm开发,窗体显示和窗体传值
- 关于Oracle数据库中行迁移/行链接的问题
- RM文件解析之RM文件格式
- CUDA4.0 X32 + Windows7 32bit + Visual Studio 2008+ Visual Assist安装指南By Richard
- Winform子窗体刷新父窗体
- discuz论坛程序的PHP加密函数原理
- Java语言的异常处理机制研究
- 【ASP.NET学习笔记一】ASP.NET页面传参总结
- 常用网页背景颜色
- ASP.NET2.0实现页面无刷新
- Usaco 1.2.3 命名那个数字(Name That Number)