real media格式(rm/rmvb容器格式)

来源:互联网 发布:淘宝网浮针进针器 编辑:程序博客网 时间:2024/06/05 15:37
 

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

 
 
可使用real producer sdk(可能还有windoes media sdk)来开发对rm等的支持(应该是前者)
 
一些其他介绍
http://www.xiangb.com/vga/vga_863.html
http://www.cppblog.com/francsescoli/articles/17099.html
 
原创粉丝点击