RealMedia File Format--Internet Draft(RealMedia文件格式)

本文介绍了RealMedia文件格式(RMFF),一种通用的流媒体数据容器。该格式支持本地播放及通过RTSP等协议进行网络流传输。RMFF独立于具体数据类型,允许记录多种数据并进行操作。
Internet Draft                                  Rahul Agarwal, RealNetworks
draft-heftagaub-rmff-00.txt Jeff Ayars, RealNetworks
Brad Hefta-Gaub, RealNetworks
Dale Stammen, RealNetworks
March 13, 1998 Expires: August 13, 1998

RealMedia File Format

STATUS OF THIS MEMO

This document is an Internet-Draft. Internet-Drafts are working
documents of the Internet Engineering Task Force (IETF), its areas, and
its working groups. Note that other groups may also distribute working
documents as Internet-Drafts.

Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference material
or to cite them other than as ``work in progress''.

To learn the current status of any Internet-Draft, please check the
``1id-abstracts.txt'' listing contained in the Internet-Drafts Shadow
Directories on ftp.is.co.za (Africa), nic.nordu.net (Europe),
munnari.oz.au (Pacific Rim), ds.internic.net (US East Coast), or
ftp.isi.edu (US West Coast).

Distribution of this document is unlimited.

Abstract:

Introduction

The RealMedia File Format (RMFF) is designed to be a generic container
for streaming media data. This data may then be played back locally or
streamed over a network using protocols such as RTSP and RTP. The
format is data-independent, allowing any data type to be recorded,
manipulated and played back.

Note: This document is intended to be informational in nature of what
the file format in use by RealNetworks' RealServer and RealPlayer
implementations. Though we think that there are a lot of important
concepts embodied in this specification, and that it may even make the
basis of a "standard" file format, this is intended to eventually end
up as an Informational RFC.

Copyright Notice:

Copyright (C) RealNetworks (1998). All Rights Reserved.







R. Agarwal, J. Ayars, B. Hefta-Gaub, D. Stammen Page 1


INTERNET-DRAFT RTSP March 13, 1998


RealMedia File Format (RMFF)

1. File Format
2. Header Section
2.1 RealMedia File Header
2.2 Properties Header
2.3 Media Properties Header
2.4 Content Description Header
3. Data Section
3.1 Data Chunk Header
3.2 Data Packet Header
4. Index Section
4.1 Index Section Header
4.2 Index Record

1. File Format

RealMedia File Format is a standard tagged file format that uses
four-character codes to identify file elements. These codes are 32-bit,
represented by a sequence of one to four ASCII alphanumeric characters,
padded on the right with space characters. The data type for
four-character codes is FOURCC. Use the PN_FOURCC macro to convert four
characters into a four-character code.

The basic building block of a RealMedia File is a chunk, which is a
logical unit of data, such as a stream header or a packet of data. Each
chunk contains the following fields:

* four-character code specifying the chunk identifier
* 32-bit value specifying the size of the data member in the chunk
* blob of opaque chunk data


















R. Agarwal, J. Ayars, B. Hefta-Gaub, D. Stammen Page
2


INTERNET-DRAFT RTSP March 13, 1998


Depending on its type, a top-level chunk can contain subobjects. This
document describes the tagged chunks contained in RMFF, as well as the
format of the data stored in each type of tagged chunk.

Tagged Chunk +----------------------+
| ID |
+----------------------+
| Size |
+----------------------+
| Data |
Tagged Chunk +----------------------+
| ID |
+----------------------+
| Size |
+----------------------+
| |
/+-------------+ |
Subchunk / | Data | |
/ | | |
/| | |
/+-------------+ |
Subchunk / | Data | |
/ | | |
/| | |
+-------------+ |
+----------------------+
Figure 1. Tagged File Formats

2. Header Section

Because RMFF is a tagged file format, the order of the chunks is not
explicit, except that the RealMedia File Header must be the first chunk
in the file. However, most applications write the standard headers into
the file's header section. The following chunks are typically found in
the header section of RMFF:

* RealMedia File Header (This must be the first chunk of the file)
* Properties Header
* Media Properties Header
* Content Description Header

After the RealMedia File Header object, the other headers may appear in
any order. All headers are required except the Index Header. The
following sections describe the individual header objects ,





R. Agarwal, J. Ayars, B. Hefta-Gaub, D. Stammen Page
3


INTERNET-DRAFT RTSP March 13, 1998


2.1 RealMedia File Header

Each RealMedia file begins with the RealMedia File Header, which
identifies the file as RMFF. There is only one RealMedia File Header in
a RealMedia file. Because the contents of the RealMedia File Header may
change with different versions of RMFF, the header structure supports an
object version field for determining what additional fields exists. The
following pseudo-structure describes the RealMedia File Header:

RealMedia_File_Header
{
UINT32 object_id;
UINT32 size;
UINT16 object_version;

if (object_version == 0)
{
UINT32 file_version;
UINT32 num_headers;
}
}

The RealMedia File Header contains the following fields:

object_id: 32 bits
The unique object ID for a RealMedia File ('.RMF'). All RealMedia
files begin with this identifier.

size: 32 bits
The size of the RealMedia header section in bytes.

object_version: 16 bits
The version of the RealMedia File Header object. All files created
according to this specification have an object_version number of 0
(zero).

file_version: 32 bits
The version of the RealMedia file in PN Version format. All files
created according to this specification have a major version number
of 1. This member is present on all RealMedia_File_Header objects
with an object_version of 0 (zero).

num_headers: 32 bits
The number of headers in the header section that follow the
RealMedia File Header. This member is present on all
RealMedia_File_Header objects with an object_version of 0 (zero).



R. Agarwal, J. Ayars, B. Hefta-Gaub, D. Stammen Page
4


INTERNET-DRAFT RTSP March 13, 1998


2.2 Properties Header

The Properties Header describes the general media properties of the
RealMedia File. Components of the RealMedia system use this object to
configure themselves for handling the data in the RealMedia file or
stream. There is only one Properties Header in a RealMedia file. The
following pseudo-structure describes the Properties header:

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;
}
}

The Properties Header contains the following fields:

object_id: 32 bits
The unique object ID for a Properties Header ('PROP').

size: 32 bits
The size of the Properties Header in bytes.

object_version: 16 bits
The version of the RealMedia File Header object. All files created
according to this specification have an object_version number of 0
(zero).







R. Agarwal, J. Ayars, B. Hefta-Gaub, D. Stammen Page
5


INTERNET-DRAFT RTSP March 13, 1998


max_bit_rate: 32 bits
The maximum bit rate required to deliver this file over a network.
This member is present on all Properties objects with an
object_version of 0 (zero).

avg_bit_rate: 32 bits
The average bit rate required to deliver this file over a network.
This member is present on all Properties objects with an
object_version of 0 (zero).

max_packet_size: 32 bits
The largest packet size (in bytes) in the media data. This member is
present on all Properties objects with an object_version of 0 (zero).

avg_packet_size: 32 bits
The average packet size (in bytes) in the media data. This member
is present on all Properties objects with an object_version of 0
(zero).

num_packets: 32 bits
The number of packets in the media data. This member is present on
all Properties objects with an object_version of 0 (zero).

duration: 32 bits
The duration of the file in milliseconds. This member is present on
all Properties objects with an object_version of 0 (zero).

preroll: 32 bits
The number of milliseconds to pre-buffer before starting playback.
This member is present on all Properties objects with an
object_version of 0 (zero).

index_offset: 32 bits
The offset in bytes from the start of the file to the start of the
index header object. This member is present on all Properties
objects with an object_version of 0 (zero).

data_offset: 32 bits
The offset in bytes from the start of the file to the start of the
Data Section. This member is present on all Properties objects with
an object_version of 0 (zero).

num_streams: 16 bits
The number of media streams contained in the file. This member is
present on all Properties objects with an object_version of 0
(zero).



R. Agarwal, J. Ayars, B. Hefta-Gaub, D. Stammen Page
6


INTERNET-DRAFT RTSP March 13, 1998


flags: 16 bits
Flags indicating characteristics of the RealMedia file. The
following flags are defined:

o #define PN_SAVE_ENABLED 0x0001

Allows clients to save a copy of the RealMedia file to disk.

o #define PN_PERFECT_PLAY_ENABLED 0x0002

Allows clients to use extra buffering to ensure Perfect Play.

o #define PN_LIVE_BROADCAST 0x0004

The RealMedia file is being generated by a live broadcast.

2.3 Media Properties Header

The Media Properties Header describes the specific media properties of
each stream in a RealMedia File. Components of the RealMedia system use
this object to configure themselves for handling the media data in each
stream. There is one Media Properties Header for each media stream in a
RealMedia file. The following pseudo-structure describes the Media
Properties header:

Media_Properties
{
UINT32 object_id;
UINT32 size;
UINT16 object_version;



















R. Agarwal, J. Ayars, B. Hefta-Gaub, D. Stammen Page
7


INTERNET-DRAFT RTSP March 13, 1998


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;
}
}

The Media Properties Header contains the following fields:

object_id: 32 bits
The unique object ID for a Media Properties Header ('MDPR').

size: 32 bits
The size of the Media Properties Header in bytes.

object_version: 16 bits
The version of the Media Properties Header object.

stream_number: 32 bits
The stream_number (synchronization source identifier) is a unique
value that identifies a media stream. Every data packet that
belongs to a media stream contains the same STREAM_NUMBER. The
STREAM_NUMBER enables a receiver of multiple media streams to
distinguish which packets belong to each media stream. This member
is present on all MediaProperties objects with an object_version of
0 (zero).

max_bit_rate: 32 bits
The maximum bit rate required to deliver this stream over a
network. This member is present on all MediaProperties objects
with an object_version of 0 (zero).






R. Agarwal, J. Ayars, B. Hefta-Gaub, D. Stammen Page
8


INTERNET-DRAFT RTSP March 13, 1998


avg_bit_rate: 32 bits
The average bit rate required to deliver this stream over a
network. This member is present on all MediaProperties objects
with an object_version of 0 (zero).

max_packet_size: 32 bits
The largest packet size (in bytes) in the stream of media
data. This member is present on all MediaProperties objects with an
object_version of 0 (zero).

avg_packet_size: 32 bits
The average packet size (in bytes) in the stream of media
data. This member is present on all MediaProperties objects with an
object_version of 0 (zero).

start_time: 32 bits
The time offset in milliseconds to add to the timestamp of each
packet in a media stream. This member is present on all
MediaProperties objects with an object_version of 0 (zero).

preroll: 32 bits
The time offset in milliseconds to subtract to the timestamp of
each packet in a media stream. This member is present on all
MediaProperties objects with an object_version of 0 (zero).

duration: 32 bits
The duration of the stream in milliseconds. This member is present
on all MediaProperties objects with an object_version of 0 (zero).

stream_name_size: 8 bits
The length of the following stream_name field in bytes. This member
is present on all MediaProperties objects with an object_version of
0 (zero).

stream_name: variable length
A non-unique alias or name for the stream. This member is present
on all MediaProperties objects with an object_version of 0 (zero).

mime_type_size: 8 bits
The length of the following mime_type field in bytes. This member
is present on all MediaProperties objects with an object_version of
0 (zero).







R. Agarwal, J. Ayars, B. Hefta-Gaub, D. Stammen Page
9


INTERNET-DRAFT RTSP March 13, 1998


mime_type: variable length
A non-unique MIME style type/subtype string for data associated
with the stream. This member is present on all MediaProperties
objects with an object_version of 0 (zero).

type_specific_len: 32 bits
The length of the following type_specific_data in bytes. The
type_specific_data is typically used by the data-type renderer to
initialize itself in order to process the media stream. This member
is present on all MediaProperties objects with an object_version of
0 (zero).

type_specific_data: variable length
The type_specific_data is typically used by the data-type renderer
to initialize itself in order to process the media stream. This
member is present on all MediaProperties objects with an
object_version of 0 (zero).

2.4 Content Description Header

The Content Description Header contains the title, author, copyright,
and comments information for the RealMedia File. All text data is in
ASCII format. The following pseudo-structure describes the 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;
}
}






R. Agarwal, J. Ayars, B. Hefta-Gaub, D. Stammen Page
10


INTERNET-DRAFT RTSP March 13, 1998


The Content Description Header contains the following fields:

object_id: 32 bits
The unique object ID for the Content Description Header ('CONT').

size: 32 bits
The size of the Content Description Header in bytes.

object_version: 16 bits
The version of the Content Description Header object.

title_len: 16 bits
The length of the title data in bytes. Note that the title data is
not null terminated. This member is present on all Content
Description Header objects with an object_version of 0 (zero).

title: variable length
An array of ASCII characters that represents the title information
for the RealMedia file. This member is present on all Content
Description Header objects with an object_version of 0 (zero).

author_len: 16 bits
The length of the author data in bytes. Note that the author data
is not null terminated. This member is present on all Content
Description Header objects with an object_version of 0 (zero).

author: variable length
An array of ASCII characters that represents the author information
for the RealMedia file. This member is present on all Content
Description Header objects with an object_version of 0 (zero).

copyright_len: 16 bits
The length of the copyright data in bytes. Note that the copyright
data is not null terminated. This member is present on all Content
Description Header objects with an object_version of 0 (zero).

copyright: variable length
An array of ASCII characters that represents the copyright
information for the RealMedia file. This member is present on all
Content Description Header objects with an object_version of 0
(zero).

comment_len: 16 bits
The length of the comment data in bytes. Note that the comment data
is not null terminated. This member is present on all Content
Description Header objects with an object_version of 0 (zero).



R. Agarwal, J. Ayars, B. Hefta-Gaub, D. Stammen Page
11


INTERNET-DRAFT RTSP March 13, 1998


comment: variable length
An array of ASCII characters that represents the comment
information for the RealMedia file. This member is present on all
Content Description Header objects with an object_version of 0
(zero).

3. Data Section

The data section of the RealMedia file consists of a Data Section Header
that describes the contents of the data section, followed by a series of
interleaved media data packets. Note that the size field of the Data
Chunk Header is the size of the entire data chunk, including the media
data packets.

3.1 Data Chunk Header

The Data Chunk Header marks the start of the data chunk. There is
usually only one data chunk in a RealMedia file, however for extremely
large files there may be multiple data chunks. The following
pseudo-structure describes the Data chunk header:

Data_Chunk_Header
{
UINT32 object_id;
UINT32 size;
UINT16 object_version;

if (object_version == 0)
{
UINT32 num_packets;
UINT32 next_data_header;
}
}

The Data Chunk Header contains the following fields:

object_id: 32 bits
The unique object ID for the Data Chunk Header ('DATA').

size: 32 bits
The size of the Data Chunk in bytes.

object_version: 16 bits
The version of the Data Chunk Header object.





R. Agarwal, J. Ayars, B. Hefta-Gaub, D. Stammen Page
12


INTERNET-DRAFT RTSP March 13, 1998


num_packets: 32 bits
Number of packets in the data chunk. This member is present on all
Data Chunk Header objects with an object_version of 0 (zero).

next_data_header: 32 bits
Offset from start of file to the next data chunk. This field is not
typically used. This member is present on all Data Chunk Header
objects with an object_version of 0 (zero).

3.2 Data Packet Header

The data section of a RealMedia file consists of a series of interleaved
data objects. Each data object contains a packet of data for a media
stream. Because a RealMedia file can contain numerous media streams,
data objects for each stream are interleaved. The following
pseudo-structure describes the details of each interleaved packet:

Media_Packet_Header
{
UINT16 object_version;

if (object_version == 0)
{
UINT16 length;
UINT16 stream_number;
UINT32 timestamp;
UINT8 reserved;
UINT8 flags;
UINT8[length] data;
}
}

The Media Packet Header contains the following fields:

object_version: 16 bits
The version of the Media Packet Header object.

length: 16 bits
The length of the packet in bytes. This member is present on all
Media Packet Header objects with an object_version of 0 (zero).

stream_number: 16 bits
The 16-bit alias used to associate data packets with their
associated Media Properties Header. This member is present on all
Media Packet Header objects with an object_version of 0 (zero).




R. Agarwal, J. Ayars, B. Hefta-Gaub, D. Stammen Page
13


INTERNET-DRAFT RTSP March 13, 1998


timeStamp: 32 bits
The timestamp of the packet in milliseconds This member is present
on all Media Packet Header objects with an object_version of 0
(zero).

reserved: 8 bits
This is not used. This member is present on all Media Packet Header
objects with an object_version of 0 (zero).

flags: 16 bits
Flags describing the properties of the packet. The following flags
are defined:

o #define PN_RELIABLE_FLAG 0x0001

If this flag is set, the packet is delivered reliably.

o #define PN_KEYFRAME_FLAG 0x0002

If this flag is set, the packet is part of a key frame or in
some way marks a boundary in your data stream.

This member is present on all Media Packet Header objects with an
object_version of 0 (zero).

data: variable length
The application-specific media data. This member is present on all
Media Packet Header objects with an object_version of 0 (zero).

4. Index Section

The index section of the RealMedia file consists of a Index Chunk Header
that describes the contents of the index section, followed by a series
of index records. Note that the size field of the Index Chunk Header is
the size of the entire index chunk, including the index records.

4.1 Index Section Header

The Index Chunk Header marks the start of the index chunk. There is
usually one index chunk per stream in a RealMedia file. The following
pseudo-structure describes the Index chunk header.








R. Agarwal, J. Ayars, B. Hefta-Gaub, D. Stammen Page
14


INTERNET-DRAFT RTSP March 13, 1998


Index_Chunk_Header
{
u_int32 object_id;
u_int32 size;
u_int16 object_version;

if (object_version == 0)
{
u_int32 num_indices;
u_int16 stream_number;
u_int32 next_index_header;
}
}

The Index Chunk Header contains the following fields:

object_id: 32 bits
The unique object ID for the Index Chunk Header ('INDX').

size: 32 bits
The size of the Index Chunk in bytes.

object_version: 16 bits
The version of the Index Chunk Header object.

num_indices: 32 bits
Number of index records in the index chunk. This member is present
on all Index Chunk Header objects with an object_version of 0
(zero).

stream_number: 16 bits
The stream number for which the index records in this index chunk
are associated. This member is present on all Index Chunk Header
objects with an object_version of 0 (zero).

next_index_header: 32 bits
Offset from start of file to the next index chunk. This field lets
RealMedia file format readers find all the index chunks
quickly. This member is present on all Index Chunk Header objects
with an object_version of 0 (zero).









R. Agarwal, J. Ayars, B. Hefta-Gaub, D. Stammen Page
15


INTERNET-DRAFT RTSP March 13, 1998


4.2 Index Record

The index section of a RealMedia file consists of a series of index
record objects. Each index record contains information for quickly
finding a packet of a particular time stamp for a media stream. The
following pseudo-structure describes the details of each index record:

IndexRecord
{
UINT16 object_version;

if (object_version == 0)
{
u_int32 timestamp;
u_int32 offset;
u_int32 packet_count_for_this_packet;
}
}

An Index Record contains the following fields:

object_version: 16 bits
The version of the Index Record object.

timestamp: 32 bits
The timestamp in milliseconds associated with this record. This
member is present on all Index Record objects with an
object_version of 0 (zero).

offset: 32 bits
The offset from the start of the file at which this packet can be
found. This member is present on all Index Record objects with an
object_version of 0 (zero).

packet_count_for_this_packet: 32 bits
The packet number of the packet for this record. This is the same
number of packets that would have been seen had the file been
played from the beginning to this point. This member is present on
all Index Record objects with an object_version of 0 (zero).










R. Agarwal, J. Ayars, B. Hefta-Gaub, D. Stammen Page 16
Original
内容概要:本研究聚焦于绿电直连型电氢氨园区的优化运行,提出一种集成绿色电力直接供给、电解水制氢及氢气合成氨工艺的综合能源系统架构。通过建立包含风光发电、电解槽、氨合成反应器、储氢罐、电网交互及多类型负荷在内的系统模型,综合考虑绿电直供优先、能量梯级利用与多能互补原则,构建以系统综合运行成本最小化为目标的优化调度模型。研究采用Matlab与Python工具进行算法求解和仿真分析,利用实际气象与负荷数据完成案例验证,评估了不同运行策略下系统的经济性、可再生能源消纳能力与碳减排效益,为新型电氢氨一体化园区的规划与运行提供了理论依据和技术支撑。; 适合人群:具备一定电力系统、新能源或化工背景的研究生、科研人员及从事综合能源系统规划与优化工作的工程技术人员。; 使用场景及目标:①用于科研学习,理解电--氨多能转换系统的建模与优化方法;②为工业园区的低碳化、智能化改造提供技术参考与决策支持;③作为开发类似综合能源管理系统的理论基础。; 阅读建议:此资源包含完整的模型代码、数据与论文,使用者应结合代码仔细研读论文中的模型构建部分,重点关注目标函数与约束条件的设计逻辑,并尝试修改参数进行仿真,以深入掌握优化算法在实际系统中的应用。
内容概要:本文深入探讨了RS485通信协议在芯片行业自动化测试系统中的实际开发与应用,涵盖其关键概念、电气特性、通信机制及与Modbus RTU协议的结合使用。文章重点介绍了差分信号完整性设计、主从时序控制、CRC校验与重传机制等核心技术要点,并通过一个基于Python的完整代码实例,展示了如何实现RS485主站对探针台、自动分选机等芯片测试设备的控制与数据采集。此外,还分析了RS485在晶圆探针台、ATE设备集群和环境监控等典型场景的应用,并展望了其与工业以太网融合、智能化诊断、高速化及AI集成的发展趋势。; 适合人群:具备一定嵌入式系统或工业通信基础,从事芯片测试、自动化设备开发及相关领域的研发人员,尤其是工作1-3年希望提升现场总线应用能力的工程师。; 使用场景及目标:①理解RS485在高干扰芯片测试环境中稳定通信的设计原理;②掌握Modbus RTU协议在Python下的实现方法,用于实际控制探针台、Handler等设备;③构建可靠的数据采集与设备控制系统,支持CRC校验、异常处理和日志追踪;④为后续向高速通信和智能诊断系统升级提供技术储备。; 阅读建议:此资源强调实战开发,建议结合硬件环境动手调试代码,重点关注线程锁、CRC计算、帧解析和超时控制等关键环节,在真实产线中验证通信稳定性,并利用日志系统进行故障分析与优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值