mp4 box 信息 实例分析 2
2015-10-30 15:52
399 查看
//------8.5.1 Sample Table Box------// //8.5.1.1 Definition Box Type: ‘stbl’ Container:Media Information Box (‘minf’) Mandatory:Yes Quantity:Exactly one /* The sample table contains all the time and data indexing of the media samples in a track. Using the tables here, it is possible to locate samples in time, determine their type (e.g. I-frame or not), and determine their size, container, and offset into that container. If the track that contains the Sample Table Box references no data, then the Sample Table Box does not need to contain any sub-boxes (this is not a very useful media track). f the track that the Sample Table Box is contained in does reference data, then the following sub-boxes are required: Sample Description, Sample Size, Sample To Chunk, and Chunk Offset. Further, the Sample Description Box shall contain at least one entry. A Sample Description Box is required because it contains the data reference index field which indicates which Data Reference Box to use to retrieve the media samples.Without the Sample Description, it is not possible to determine where the media samples are stored. The Sync Sample Box is optional. If the Sync Sample Box is not present, all samples are sync samples. */ aligned(8) class SampleTableBox extends Box(‘stbl’) { } //--8.5.2 Sample Description Box--// //这个的内容比较复杂 //8.5.2.1 Definition Box Types:‘stsd’ Container:Sample Table Box (‘stbl’) Mandatory:Yes Quantity:Exactly one /* The sample description table gives detailed information about the coding type used, and any initialization information needed for that coding. The information stored in the sample description box after the entry-count is both track-type specific as documented here, and can also have variants within a track type (e.g. different codings may use different specific information after some common fields, even within a video track). For video tracks, a VisualSampleEntry is used, for audio tracks, an AudioSampleEntry and for metadata tracks, a MetaDataSampleEntry. Hint tracks use an entry format specific to their protocol, with an appropriate name. For hint tracks, the sample description contains appropriate declarative data for the streaming protocol being used, and the format of the hint track. The definition of the sample description is specific to the protocol. Multiple descriptions may be used within a track. */ aligned(8) abstract class SampleEntry (unsigned int(32) format) extends Box(format){ const unsigned int(8)[6] reserved = 0; unsigned int(16) data_reference_index; } class HintSampleEntry() extends SampleEntry (protocol) { unsigned int(8) data []; } class BitRateBox extends Box(‘btrt’){ unsigned int(32) bufferSizeDB; unsigned int(32) maxBitrate; unsigned int(32) avgBitrate; } class MetaDataSampleEntry(codingname) extends SampleEntry (codingname) { } class XMLMetaDataSampleEntry() extends MetaDataSampleEntry (’metx‘) { string content_encoding; // optional string namespace; string schema_location; // optional BitRateBox (); // optional } class TextMetaDataSampleEntry() extends MetaDataSampleEntry (‘mett’) { string content_encoding; // optional string mime_format; BitRateBox (); // optional } aligned(8) class URIBox extends FullBox(‘uri ’, version = 0, 0) { string theURI; } aligned(8) class URIInitBox extends FullBox(‘uriI’, version = 0, 0) { unsigned int(8) uri_initialization_data[]; } class URIMetaSampleEntry() extends MetaDataSampleEntry (’urim‘) { URIbox the_label; URIInitBox init; // optional MPEG4BitRateBox (); // optional } class PixelAspectRatioBox extends Box(‘pasp’){ unsigned int(32) hSpacing; unsigned int(32) vSpacing; } class CleanApertureBox extends Box(‘clap’){ unsigned int(32) cleanApertureWidthN; unsigned int(32) cleanApertureWidthD; unsigned int(32) cleanApertureHeightN; unsigned int(32) cleanApertureHeightD; unsigned int(32) horizOffN; unsigned int(32) horizOffD; unsigned int(32) vertOffN; unsigned int(32) vertOffD; } class ColourInformationBox extends Box(‘colr’){ unsigned int(32) colour_type; if (colour_type == ‘nclx’) /* on-screen colours */ { unsigned int(16) colour_primaries; unsigned int(16) transfer_characteristics; unsigned int(16) matrix_coefficients; unsigned int(1) full_range_flag; unsigned int(7) reserved = 0; } else if (colour_type == ‘rICC’) { ICC_profile; // restricted ICC profile } else if (colour_type == ‘prof’) { ICC_profile; // unrestricted ICC profile } } class VisualSampleEntry(codingname) extends SampleEntry (codingname){ unsigned int(16) pre_defined = 0; const unsigned int(16) reserved = 0; unsigned int(32)[3] pre_defined = 0; unsigned int(16) width; unsigned int(16) height; template unsigned int(32) horizresolution = 0x00480000; // 72 dpi template unsigned int(32) vertresolution = 0x00480000; // 72 dpi const unsigned int(32) reserved = 0; template unsigned int(16) frame_count = 1; string[32] compressorname; //表示32个字节的意思 template unsigned int(16) depth = 0x0018; int(16) pre_defined = -1; // other boxes from derived specifications CleanApertureBox clap; // optional PixelAspectRatioBox pasp;// optional } // Audio Sequences class AudioSampleEntry(codingname) extends SampleEntry (codingname){ const unsigned int(32)[2] reserved = 0; template unsigned int(16) channelcount = 2; template unsigned int(16) samplesize = 16; unsigned int(16) pre_defined = 0; const unsigned int(16) reserved = 0 ; template unsigned int(32) samplerate = { default samplerate of media}<<16; } aligned(8) class SampleDescriptionBox (unsigned int(32) handler_type) extends FullBox('stsd', 0, 0){ int i ; unsigned int(32) entry_count; for (i = 1 ; i <= entry_count ; i++){ switch (handler_type){ case ‘soun’: // for audio tracks AudioSampleEntry(); break; case ‘vide’: // for video tracks VisualSampleEntry(); break; case ‘hint’: // Hint track HintSampleEntry(); break; case ‘meta’: // Metadata track MetadataSampleEntry(); break; } } } }
8.5.2.3 Semantics
version is an integer that specifies the version of this box
entry_count is an integer that gives the number of entries in the following table SampleEntry is the appropriate sample entry.
data_reference_index is an integer that contains the index of the data reference to use to retrieve data associated with samples that use this sample description. Data references are stored in Data Reference Boxes. The index ranges from 1 to the number of data references.
ChannelCount is the number of channels such as 1 (mono) or 2 (stereo)
SampleSize is in bits, and takes the default value of 16
SampleRate is the sampling rate expressed as a 16.16 fixed-point number (hi.lo)
resolution fields give the resolution of the image in pixels-per-inch, as a fixed 16.16 number
frame_count indicates how many frames of compressed video are stored in each sample. The default is 1, for one frame per sample; it may be more than 1 for multiple frames per sample
Compressorname is a name, for informative purposes. It is formatted in a fixed 32-byte field, with the first byte set to the number of bytes to be displayed, followed by that number of bytes of displayable data, and then padding to complete 32 bytes total (including the size byte). The field may be set to 0.
depth takes one of the following values
0x0018 – images are in colour with no alpha
width and height are the maximum visual width and height of the stream described by this sample description, in pixels
hSpacing, vSpacing: define the relative width and height of a pixel;
cleanApertureWidthN, cleanApertureWidthD: a fractional number which defines the exact clean aperture width, in counted pixels, of the video image
cleanApertureHeightN, cleanApertureHeightD: a fractional number which defines the exact clean aperture height, in counted pixels, of the video image
horizOffN, horizOffD: a fractional number which defines the horizontal offset of clean aperture centre minus (width-1)/2. Typically 0.
vertOffN, vertOffD: a fractional number which defines the vertical offset of clean aperture centre minus (height-1)/2. Typically 0.
content_encoding - is a null-terminated string in UTF-8 characters, and provides a MIME type which identifies the content encoding of the timed metadata. It is defined in the same way as for an ItemInfoEntry in this specification. If not present (an empty string is supplied) the timed metadata is not encoded. An example for this field is ‘application/zip’. Note that no MIME types for BiM [ISO/IEC 23001-1] and TeM [ISO/IEC 15938-1] currently exist. Thus the experimental MIME types ‘application/x-BiM’ and ‘text/x-TeM’ shall be used to identify these encoding mechanisms.
namespace - gives the namespace of the schema for the timed XML metadata. This is needed for identifying the type of metadata, e.g. gBSD or AQoS [MPEG-21-7] and for decoding using XML aware encoding mechanisms such as BiM.
schema_location - optionally provides an URL to find the schema corresponding to the namespace.
This is needed for decoding of the timed metadata by XML aware encoding mechanisms such as BiM.
mime_format - provides a MIME type which identifies the content format of the timed metadata.
Examples for this field are ‘text/html’ and ‘text/plain’.
bufferSizeDB gives the size of the decoding buffer for the elementary stream in bytes.
maxBitrate gives the maximum rate in bits/second over any window of one second.
avgBitrate gives the average rate in bits/second over the entire presentation.
theURI is a URI formatted according to the rules in 6.2.4;
uri_initialization_data is opaque data whose form is defined in the documentation of the URI form.
colour_type: an indication of the type of colour information supplied. For colour_type ‘nclx’:these fields are exactly the four bytes defined for PTM_COLOR_INFO( ) in A.7.2 of ISO/IEC 29199-2 but note that the full range flag is here in a different bit position
ICC_profile: an ICC profile as defined in ISO 15076-1 or ICC.1:2010 is supplied.
相关文章推荐
- 用于修改学生的信息_1
- Python语言初学总结
- java 为pdf添加水印图片
- android监测电池的电量与充电状态
- NSFileManager 和获取文件大小
- iOS 程序内访问手机系统设置
- java 为pdf添加水印图片
- [LeetCode] Serialize and Deserialize Binary Tree
- springmvc 1
- 数据库查询优化器的艺术:原理解析与SQL性能优化
- SpringMVC中处理404静态页面操作
- noip2013 积木大赛 (贪心)
- PHP trim() 函数
- 七牛上传文件 图片
- java 乱码原因分析
- Codeforces Round #327 (Div. 2) E. Three States bfs
- openstack中虚拟机和其网络的联系方法 instance and network
- 使用JavaScript正则表达式如何去掉双引号
- 在使用O_APPEND 标志并以写打开一个已存在的文件,然后用lseek函数将偏移置于开头,在写入数据,写入的数据会显示在那个位置呢???
- I18N