mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
for #738, major boxes from isom
This commit is contained in:
parent
8588a10775
commit
3f3e98e9db
2 changed files with 167 additions and 5 deletions
|
@ -363,3 +363,62 @@ SrsMp4CompositionTime2SampleBox::~SrsMp4CompositionTime2SampleBox()
|
|||
srs_freepa(entries);
|
||||
}
|
||||
|
||||
SrsMp4SyncSampleBox::SrsMp4SyncSampleBox()
|
||||
{
|
||||
type = 0x73747373; // 'stss'
|
||||
|
||||
entry_count = 0;
|
||||
sample_numbers = NULL;
|
||||
}
|
||||
|
||||
SrsMp4SyncSampleBox::~SrsMp4SyncSampleBox()
|
||||
{
|
||||
srs_freepa(sample_numbers);
|
||||
}
|
||||
|
||||
SrsMp4StscEntry::SrsMp4StscEntry()
|
||||
{
|
||||
first_chunk = 0;
|
||||
samples_per_chunk = 0;
|
||||
sample_description_index = 0;
|
||||
}
|
||||
|
||||
SrsMp4Sample2ChunkBox::SrsMp4Sample2ChunkBox()
|
||||
{
|
||||
type = 0x73747363; // 'stsc'
|
||||
|
||||
entry_count = 0;
|
||||
entries = NULL;
|
||||
}
|
||||
|
||||
SrsMp4Sample2ChunkBox::~SrsMp4Sample2ChunkBox()
|
||||
{
|
||||
srs_freepa(entries);
|
||||
}
|
||||
|
||||
SrsMp4ChunkOffsetBox::SrsMp4ChunkOffsetBox()
|
||||
{
|
||||
type = 0x7374636f; // 'stco'
|
||||
|
||||
entry_count = 0;
|
||||
entries = NULL;
|
||||
}
|
||||
|
||||
SrsMp4ChunkOffsetBox::~SrsMp4ChunkOffsetBox()
|
||||
{
|
||||
srs_freepa(entries);
|
||||
}
|
||||
|
||||
SrsMp4SampleSizeBox::SrsMp4SampleSizeBox()
|
||||
{
|
||||
type = 0x7374737a; // 'stsz'
|
||||
|
||||
sample_size = sample_count = 0;
|
||||
entry_sizes = NULL;
|
||||
}
|
||||
|
||||
SrsMp4SampleSizeBox::~SrsMp4SampleSizeBox()
|
||||
{
|
||||
srs_freepa(entry_sizes);
|
||||
}
|
||||
|
||||
|
|
|
@ -568,7 +568,7 @@ public:
|
|||
};
|
||||
|
||||
/**
|
||||
* 8.5.2 Sample Description Box (stsd)
|
||||
* 8.5.2 Sample Description Box (stsd), for Audio/Video.
|
||||
* ISO_IEC_14496-12-base-format-2012.pdf, page 40
|
||||
* The sample description table gives detailed information about the coding type used, and any initialization
|
||||
* information needed for that coding.
|
||||
|
@ -585,7 +585,7 @@ public:
|
|||
};
|
||||
|
||||
/**
|
||||
* 8.6.1.2 Decoding Time to Sample Box (stts)
|
||||
* 8.6.1.2 Decoding Time to Sample Box (stts), for Audio/Video.
|
||||
* ISO_IEC_14496-12-base-format-2012.pdf, page 48
|
||||
*/
|
||||
struct SrsMp4SttsEntry
|
||||
|
@ -600,7 +600,7 @@ struct SrsMp4SttsEntry
|
|||
};
|
||||
|
||||
/**
|
||||
* 8.6.1.2 Decoding Time to Sample Box (stts)
|
||||
* 8.6.1.2 Decoding Time to Sample Box (stts), for Audio/Video.
|
||||
* ISO_IEC_14496-12-base-format-2012.pdf, page 48
|
||||
* This box contains a compact version of a table that allows indexing from decoding time to sample number.
|
||||
* Other tables give sample sizes and pointers, from the sample number. Each entry in the table gives the
|
||||
|
@ -620,7 +620,7 @@ public:
|
|||
|
||||
|
||||
/**
|
||||
* 8.6.1.3 Composition Time to Sample Box (ctts)
|
||||
* 8.6.1.3 Composition Time to Sample Box (ctts), for Video.
|
||||
* ISO_IEC_14496-12-base-format-2012.pdf, page 49
|
||||
*/
|
||||
struct SrsMp4CttsEntry
|
||||
|
@ -637,7 +637,7 @@ struct SrsMp4CttsEntry
|
|||
};
|
||||
|
||||
/**
|
||||
* 8.6.1.3 Composition Time to Sample Box (ctts)
|
||||
* 8.6.1.3 Composition Time to Sample Box (ctts), for Video.
|
||||
* ISO_IEC_14496-12-base-format-2012.pdf, page 49
|
||||
* This box provides the offset between decoding time and composition time. In version 0 of this box the
|
||||
* decoding time must be less than the composition time, and the offsets are expressed as unsigned numbers
|
||||
|
@ -657,5 +657,108 @@ public:
|
|||
virtual ~SrsMp4CompositionTime2SampleBox();
|
||||
};
|
||||
|
||||
/**
|
||||
* 8.6.2 Sync Sample Box (stss), for Video.
|
||||
* ISO_IEC_14496-12-base-format-2012.pdf, page 51
|
||||
* This box provides a compact marking of the sync samples within the stream. The table is arranged in strictly
|
||||
* increasing order of sample number.
|
||||
*/
|
||||
class SrsMp4SyncSampleBox : public SrsMp4FullBox
|
||||
{
|
||||
public:
|
||||
// an integer that gives the number of entries in the following table. If entry_count is zero,
|
||||
// there are no sync samples within the stream and the following table is empty.
|
||||
uint32_t entry_count;
|
||||
// the numbers of the samples that are sync samples in the stream.
|
||||
uint32_t* sample_numbers;
|
||||
public:
|
||||
SrsMp4SyncSampleBox();
|
||||
virtual ~SrsMp4SyncSampleBox();
|
||||
};
|
||||
|
||||
/**
|
||||
* 8.7.4 Sample To Chunk Box (stsc), for Audio/Video.
|
||||
* ISO_IEC_14496-12-base-format-2012.pdf, page 58
|
||||
*/
|
||||
struct SrsMp4StscEntry
|
||||
{
|
||||
// an integer that gives the index of the first chunk in this run of chunks that share the
|
||||
// same samples-per-chunk and sample-description-index; the index of the first chunk in a track has the
|
||||
// value 1 (the first_chunk field in the first record of this box has the value 1, identifying that the first
|
||||
// sample maps to the first chunk).
|
||||
uint32_t first_chunk;
|
||||
// an integer that gives the number of samples in each of these chunks
|
||||
uint32_t samples_per_chunk;
|
||||
// an integer that gives the index of the sample entry that describes the
|
||||
// samples in this chunk. The index ranges from 1 to the number of sample entries in the Sample
|
||||
// Description Box
|
||||
uint32_t sample_description_index;
|
||||
// Constructor
|
||||
SrsMp4StscEntry();
|
||||
};
|
||||
|
||||
/**
|
||||
* 8.7.4 Sample To Chunk Box (stsc), for Audio/Video.
|
||||
* ISO_IEC_14496-12-base-format-2012.pdf, page 58
|
||||
* Samples within the media data are grouped into chunks. Chunks can be of different sizes, and the samples
|
||||
* within a chunk can have different sizes. This table can be used to find the chunk that contains a sample,
|
||||
* its position, and the associated sample description.
|
||||
*/
|
||||
class SrsMp4Sample2ChunkBox : public SrsMp4FullBox
|
||||
{
|
||||
public:
|
||||
// an integer that gives the number of entries in the following table
|
||||
uint32_t entry_count;
|
||||
// the numbers of the samples that are sync samples in the stream.
|
||||
SrsMp4StscEntry* entries;
|
||||
public:
|
||||
SrsMp4Sample2ChunkBox();
|
||||
virtual ~SrsMp4Sample2ChunkBox();
|
||||
};
|
||||
|
||||
/**
|
||||
* 8.7.5 Chunk Offset Box (stco or co64), for Audio/Video.
|
||||
* ISO_IEC_14496-12-base-format-2012.pdf, page 59
|
||||
* The chunk offset table gives the index of each chunk into the containing file. There are two variants, permitting
|
||||
* the use of 32-bit or 64-bit offsets. The latter is useful when managing very large presentations. At most one of
|
||||
* these variants will occur in any single instance of a sample table.
|
||||
*/
|
||||
class SrsMp4ChunkOffsetBox : public SrsMp4FullBox
|
||||
{
|
||||
public:
|
||||
// an integer that gives the number of entries in the following table
|
||||
uint32_t entry_count;
|
||||
// a 32 or 64 bit integer that gives the offset of the start of a chunk into its containing
|
||||
// media file.
|
||||
uint64_t* entries;
|
||||
public:
|
||||
SrsMp4ChunkOffsetBox();
|
||||
virtual ~SrsMp4ChunkOffsetBox();
|
||||
};
|
||||
|
||||
/**
|
||||
* 8.7.3 Sample Size Boxes (stsz or stz2), for Audio/Video.
|
||||
* ISO_IEC_14496-12-base-format-2012.pdf, page 57
|
||||
* This box contains the sample count and a table giving the size in bytes of each sample. This allows the media data
|
||||
* itself to be unframed. The total number of samples in the media is always indicated in the sample count.
|
||||
*/
|
||||
class SrsMp4SampleSizeBox : public SrsMp4FullBox
|
||||
{
|
||||
public:
|
||||
// the default sample size. If all the samples are the same size, this field
|
||||
// contains that size value. If this field is set to 0, then the samples have different sizes, and those sizes
|
||||
// are stored in the sample size table. If this field is not 0, it specifies the constant sample size, and no
|
||||
// array follows.
|
||||
uint32_t sample_size;
|
||||
// an integer that gives the number of samples in the track; if sample-size is 0, then it is
|
||||
// also the number of entries in the following table.
|
||||
uint32_t sample_count;
|
||||
// each entry_size is an integer specifying the size of a sample, indexed by its number.
|
||||
uint32_t* entry_sizes;
|
||||
public:
|
||||
SrsMp4SampleSizeBox();
|
||||
virtual ~SrsMp4SampleSizeBox();
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue