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

63 lines
2.4 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
// MediaDataBox Media Data Box
//
// 8.1.1 Media Data Box
// Box Type: mdat
// Container: File
// Mandatory: No
// Quantity: Zero or more
//
// This box contains the media data. In video tracks, this box would contain video frames. A presentation
// may contain zero or more Media Data Boxes. The actual media data follows the type field; its structure
// is described by the metadata (see particularly the sample table, subclause 8.5, and the item location box,
// subclause 8.11.3).
//
// In large presentations, it may be desirable to have more data in this box than a 32bit size would permit.
// In this case, the large variant of the size field, above in subclause 4.2, is used.
//
// There may be any number of these boxes in the file (including zero, if all the media data is in other files).
// The metadata refers to media data by its absolute offset within the file (see subclause 8.7.5, the Chunk
// Offset Box); so Media Data Box headers and free space may easily be skipped, and files without any box
// structure may also be referenced and used.
type MediaDataBox struct {
*Box
ContentStartPosition uint64
ContentEndPosition uint64
}
// BoxTypeMediaData Media Data Box
const BoxTypeMediaData = "mdat"
func init() {
BoxDefinitions = append(BoxDefinitions, BoxDefinition{
Type: BoxTypeMediaData,
ParentTypes: []string{boxTypeParentFile},
Parser: ParseMediaDataBox,
})
}
// ParseMediaDataBox creates a new media data box struct
func ParseMediaDataBox(parser *Parser, filePosition uint64, headerSize uint32, content []byte) (any, error) {
box := &MediaDataBox{Box: &Box{filePosition, headerSize}}
// parse positions of content
box.ContentStartPosition = filePosition + uint64(headerSize)
box.ContentEndPosition = box.ContentStartPosition + uint64(len(content))
return box, nil
}