mp4/SampleTableBox.go

53 lines
2.3 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Copyright 2024 Martin Riedl
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package gomp4
// SampleTableBox sample table box struct
//
// 8.5.1 Sample Table Box
//
// 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. Iframe 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 subboxes (this is not a very useful media track).
//
// If the track that the Sample Table Box is contained in does reference data, then the following subboxes
// 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.
type SampleTableBox struct {
*Box
ChildBoxes []interface{}
}
// ParseSampleTableBox creates a new sample table box struct based on bytes
func ParseSampleTableBox(filePosition uint64, headerSize uint32, content []byte) (*SampleTableBox, error) {
box := &SampleTableBox{Box: &Box{filePosition, headerSize}}
// parse child boxes
var err error
box.ChildBoxes, err = box.parseChildBoxes(filePosition, content)
return box, err
}