mp4/MovieFragmentBox.go
2024-12-03 19:24:00 +01:00

62 lines
2.3 KiB
Go
Raw Permalink 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
// MovieFragmentBox Movie Fragment Box struct
//
// 8.8.4 Movie Fragment Box
// Box Type: moof
// Container: File
// Mandatory: No
// Quantity: Zero or more
//
// The movie fragments extend the presentation in time. They provide the information that would
// previously have been in the Movie Box. The actual samples are in Media Data Boxes, as usual, if they are
// in the same file. The data reference index is in the sample description, so it is possible to build
// incremental presentations where the media data is in files other than the file containing the Movie Box.
//
// The Movie Fragment Box is a toplevel box, (i.e. a peer to the Movie Box and Media Data boxes). It
// contains a Movie Fragment Header Box, and then one or more Track Fragment Boxes.
//
// NOTE There is no requirement that any particular movie fragment extend all tracks present in the movie
// header, and there is no restriction on the location of the media data referred to by the movie fragments.
// However, derived specifications may make such restrictions.
type MovieFragmentBox struct {
*Box
ChildBoxes []any
}
// BoxTypeMovieFragment Movie Fragment Box
const BoxTypeMovieFragment = "moof"
func init() {
BoxDefinitions = append(BoxDefinitions, BoxDefinition{
Type: BoxTypeMovieFragment,
ParentTypes: []string{boxTypeParentFile},
Parser: ParseMovieFragmentBox,
})
}
// ParseMovieFragmentBox creates a new movie fragment box struct based on bytes
func ParseMovieFragmentBox(parser *Parser, filePosition uint64, headerSize uint32, content []byte) (any, error) {
box := &MovieFragmentBox{
Box: &Box{filePosition, headerSize},
}
// parse child boxes
var err error
box.ChildBoxes, err = box.parseChildBoxes(parser, BoxTypeMovieFragment, filePosition, content)
return box, err
}