mp4

package
v0.12.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 17, 2020 License: MIT, MIT Imports: 13 Imported by: 0

README

Parsing and generation of MP4 (isobmff) boxes.

Background

The basic structure of the code in this directory come from the project https://github.com/jfbus/mp4. It has been vastly enhanced and the focus has changed from progessive mp4 files to segmented files. The code in this directory is therefore partly under the license described in LICENSE.

Overall structure

Most boxes have their own file named after the box, but in some cases, there may be multiple boxes that have the same content, and the code is then having a generic name like visualsampleentry.go.

The Box interface is specified in box.go. It does not contain decode (parsing) methods which have distinct names for each box type and are dispatched in box.go.

To implement a new box fooo, the following is needed.

Create a file fooo.go and create a struct type FoooBox.

Fooo should then implement the Box interface methods:

 Type()
 Size()
 Encode()
 Dump()

but also its own decode method DecodeFooo, and register that method in the decoders map in box.go. For a simple example, look at the prft box in prft.go.

Container boxes like moof, have a list of all their children called boxes, but also direct pointers to the children with appropriate names, like Mfhd and Traf. This makes it easy to chain box paths to reach an element like a TfhdBox as

file.Moof.Traf.Tfhd

To handle media sample data there are two structures:

  1. Sample stores the sample information used in trun
  2. FullSample extends this with the sample binary data and absolute decode time

A MediaSegment can be fragmented into multiple fragments by the method

func (s *MediaSegment) Fragmentify(timescale uint64, trex *TrexBox, duration uint32) ([]*Fragment, error)

License

See LICENSE.md

Documentation

Overview

Package mp4 - library for parsing and writing MP4/ISOBMFF files with a focus on fragmented files.

Most boxes have their own file named after the box four-letter name in the ISO/IEC 14996-12 standard, but in some cases, there may be multiple boxes that have the same content, and the code is then having a generic name like visualsampleentry.go.

The Box interface is specified in box.go. It decodes box size and type in the box header and dispatched decode for each individual box depending on its type.

Implement a new box

To implement a new box "fooo", the following is needed:

Create a file fooo.go and with struct type FoooBox.

FoooBox should then implement the Box{} interface methods:

Type()
Size()
Encode()

but also its own decode method `DecodeFooo`, and register that method in the `decoders` map in `box.go`. For a simple example, look at the `prft` box in `prft.go`.

Container Boxes

Container boxes like moof, have a list of all their children called "boxes", but also direct pointers to the children with appropriate names, like `Mfhd` and `Traf`. This makes it easy to chain box paths to reach an element like a TfhdBox via its parent MoofBox moof as

moof.Traf.Tfhd

Media Sample Data Structures

To handle media sample data there are two structures:

1. `Sample` stores the sample information used in trun

2. `FullSample` also carries a slice with the samples binary data as well as decode time

Fragmenting segments

A MediaSegment can be fragmented into multiple fragments by the method

func (s *MediaSegment) Fragmentify(timescale uint64, trex *TrexBox, duration uint32) ([]*Fragment, error)

Index

Constants

View Source
const (
	// AAClc - AAC-LC Low Complexity
	AAClc = 2
	// HEAACv1 - HE-AAC version 1 with SBR
	HEAACv1 = 5
	// HEAACv2 - HE-AAC version 2 with SBR and PS
	HEAACv2 = 29
)
View Source
const DefaultTrakID = 1

DefaultTrakID - trakID used when generating new fragmented content

View Source
const NonSyncSampleFlags uint32 = 0x01000000

NonSyncSampleFlags - flags for non-sync sample

View Source
const SyncSampleFlags uint32 = 0x02010000

SyncSampleFlags - flags for I-frame or other sync sample

View Source
const UseSubSampleEncryption = 0x2

UseSubSampleEncryption - flag for subsample encryption

Variables

This section is empty.

Functions

func DumpContainer

func DumpContainer(c ContainerBox, w io.Writer, indent, indentStep string) error

func EncodeContainer

func EncodeContainer(c ContainerBox, w io.Writer) error

EncodeContainer - marshal container c to w

func EncodeHeader

func EncodeHeader(b Box, w io.Writer) error

EncodeHeader encodes a box header to a writer

func IsSyncSampleFlags

func IsSyncSampleFlags(flags uint32) bool

IsSyncSampleFlags - flags is set correctly for sync sample

func SetNonSyncSampleFlags

func SetNonSyncSampleFlags(flags uint32) uint32

SetNonSyncSampleFlags - return flags with nonsyncsample pattern

func SetSyncSampleFlags

func SetSyncSampleFlags(flags uint32) uint32

SetSyncSampleFlags - return flags with syncsample pattern

Types

type AudioSampleEntryBox

type AudioSampleEntryBox struct {
	DataReferenceIndex uint16
	ChannelCount       uint16
	SampleSize         uint16
	SampleRate         uint16 // Integer part
	Esds               *EsdsBox
	Children           []Box
	// contains filtered or unexported fields
}

AudioSampleEntryBox according to ISO/IEC 14496-12

func CreateAudioSampleEntryBox

func CreateAudioSampleEntryBox(name string, nrChannels, sampleSize, sampleRate uint16, child Box) *AudioSampleEntryBox

CreateAudioSampleEntryBox - Create new AudioSampleEntry such as mp4

func NewAudioSampleEntryBox

func NewAudioSampleEntryBox(name string) *AudioSampleEntryBox

NewAudioSampleEntryBox - Create new empty mp4a box

func (*AudioSampleEntryBox) AddChild

func (a *AudioSampleEntryBox) AddChild(b Box)

AddChild - add a child box (avcC normally, but clap and pasp could be part of visual entry)

func (*AudioSampleEntryBox) Dump

func (a *AudioSampleEntryBox) Dump(w io.Writer, indent, indentStep string) error

func (*AudioSampleEntryBox) Encode

func (a *AudioSampleEntryBox) Encode(w io.Writer) error

Encode - write box to w

func (*AudioSampleEntryBox) Size

func (a *AudioSampleEntryBox) Size() uint64

Size - return calculated size

func (*AudioSampleEntryBox) Type

func (a *AudioSampleEntryBox) Type() string

Type - return box type

type AudioSpecificConfig

type AudioSpecificConfig struct {
	ObjectType           byte
	ChannelConfiguration byte // Defined in Table 1.19
	SamplingFrequency    int
	ExtensionFrequency   int
	SBRPresentFlag       bool
	PSPresentFlag        bool
}

AudioSpecificConfig according to ISO/IES 14496-3 Syntax specified in Table 1.15

func DecodeAudioSpecificConfig

func DecodeAudioSpecificConfig(r io.Reader) (AudioSpecificConfig, error)

DecodeAudioSpecificConfig -

func (*AudioSpecificConfig) Encode

func (a *AudioSpecificConfig) Encode(w io.Writer) error

Encode - write AudioSpecificConfig to w for AAC-LC and HE-AAC

type AvcCBox

type AvcCBox struct {
	avc.AVCDecConfRec
}

AvcCBox - AVCConfigurationBox (ISO/IEC 14496-15 5.4.2.1.2 and 5.3.3.1.2) Contains one AVCDecoderConfigurationRecord

func CreateAvcC

func CreateAvcC(spsNALU []byte, ppsNALUs [][]byte) *AvcCBox

CreateAvcC - Create an avcC box based on SPS and PPS

func (*AvcCBox) Dump

func (a *AvcCBox) Dump(w io.Writer, indent, indentStep string) error

func (*AvcCBox) Encode

func (a *AvcCBox) Encode(w io.Writer) error

Encode - write box to w

func (*AvcCBox) Size

func (a *AvcCBox) Size() uint64

Size - return calculated size

func (*AvcCBox) Type

func (a *AvcCBox) Type() string

Type - return box type

type Box

type Box interface {
	Type() string
	Size() uint64
	Encode(w io.Writer) error
	Dump(w io.Writer, indent, indentStep string) error
}

Box is the general interface

func DecodeAudioSampleEntry

func DecodeAudioSampleEntry(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeAudioSampleEntry - decode mp4a... box

func DecodeAvcC

func DecodeAvcC(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeAvcC - box-specific decode

func DecodeBox

func DecodeBox(startPos uint64, r io.Reader) (Box, error)

DecodeBox decodes a box

func DecodeBtrt

func DecodeBtrt(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeBtrt - box-specific decode

func DecodeContainerChildren

func DecodeContainerChildren(hdr *boxHeader, startPos, endPos uint64, r io.Reader) ([]Box, error)

DecodeContainerChildren decodes a container box

func DecodeCtim

func DecodeCtim(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeCtim - box-specific decode

func DecodeCtts

func DecodeCtts(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeCtts - box-specific decode

func DecodeDinf

func DecodeDinf(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeDinf - box-specific decode

func DecodeDref

func DecodeDref(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeDref - box-specific decode

func DecodeEdts

func DecodeEdts(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeEdts - box-specific decode

func DecodeElng

func DecodeElng(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeElng - box-specific decode

func DecodeElst

func DecodeElst(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeElst - box-specific decode

func DecodeEmsg

func DecodeEmsg(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeEmsg - box-specific decode

func DecodeEsds

func DecodeEsds(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeEsds - box-specific decode

func DecodeFree

func DecodeFree(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeFree - box-specific decode

func DecodeFtyp

func DecodeFtyp(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeFtyp - box-specific decode

func DecodeHdlr

func DecodeHdlr(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeHdlr - box-specific decode

func DecodeIden

func DecodeIden(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeIden - box-specific decode

func DecodeMdat

func DecodeMdat(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeMdat - box-specific decode

func DecodeMdhd

func DecodeMdhd(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeMdhd - Decode box

func DecodeMdia

func DecodeMdia(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeMdia - box-specific decode

func DecodeMfhd

func DecodeMfhd(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeMfhd - box-specific decode

func DecodeMinf

func DecodeMinf(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeMinf - box-specific decode

func DecodeMoof

func DecodeMoof(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeMoof - box-specific decode

func DecodeMoov

func DecodeMoov(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeMoov - box-specific decode

func DecodeMvex

func DecodeMvex(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeMvex - box-specific decode

func DecodeMvhd

func DecodeMvhd(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeMvhd - box-specific decode

func DecodeNmhd

func DecodeNmhd(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeNmhd - box-specific decode

func DecodePayl

func DecodePayl(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodePayl - box-specific decode

func DecodePrft

func DecodePrft(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodePrft - box-specific decode

func DecodeSenc

func DecodeSenc(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeSenc - box-specific decode

func DecodeSidx

func DecodeSidx(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeSidx - box-specific decode

func DecodeSmhd

func DecodeSmhd(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeSmhd - box-specific decode

func DecodeStbl

func DecodeStbl(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeStbl - box-specific decode

func DecodeStco

func DecodeStco(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeStco - box-specific decode

func DecodeSthd

func DecodeSthd(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeSthd - box-specific decode

func DecodeStpp

func DecodeStpp(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeStpp - Decode XMLSubtitleSampleEntry (stpp)

func DecodeStsc

func DecodeStsc(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeStsc - box-specific decode

func DecodeStsd

func DecodeStsd(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeStsd - box-specific decode

func DecodeStss

func DecodeStss(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeStss - box-specific decode

func DecodeStsz

func DecodeStsz(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeStsz - box-specific decode

func DecodeSttg

func DecodeSttg(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeSttg - box-specific decode

func DecodeStts

func DecodeStts(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeStts - box-specific decode

func DecodeStyp

func DecodeStyp(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeStyp - box-specific decode

func DecodeSubs

func DecodeSubs(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeSubs - box-specific decode

func DecodeTfdt

func DecodeTfdt(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeTfdt - box-specific decode

func DecodeTfhd

func DecodeTfhd(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeTfhd - box-specific decode

func DecodeTkhd

func DecodeTkhd(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeTkhd - box-specific decode

func DecodeTraf

func DecodeTraf(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeTraf - box-specific decode

func DecodeTrak

func DecodeTrak(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeTrak - box-specific decode

func DecodeTrex

func DecodeTrex(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeTrex - box-specific decode

func DecodeTrun

func DecodeTrun(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeTrun - box-specific decode

func DecodeURLBox

func DecodeURLBox(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeURLBox - box-specific decode

func DecodeUUID

func DecodeUUID(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeUUIDBox - decode a UUID box including tfxd or tfrf

func DecodeUnknown

func DecodeUnknown(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeUnknown - decode an unknown box

func DecodeVisualSampleEntry

func DecodeVisualSampleEntry(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeVisualSampleEntry - decode avc1/avc3/... box

func DecodeVlab

func DecodeVlab(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeVlab - box-specific decode

func DecodeVmhd

func DecodeVmhd(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeVmhd - box-specific decode

func DecodeVsid

func DecodeVsid(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeVsid - box-specific decode

func DecodeVttC

func DecodeVttC(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeVttC - box-specific decode

func DecodeVtta

func DecodeVtta(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeVtta - box-specific decode

func DecodeVttc

func DecodeVttc(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeVttc - box-specific decode

func DecodeVtte

func DecodeVtte(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeVtte - box-specific decode

func DecodeWvtt

func DecodeWvtt(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

DecodeWvtt - Decoder wvtt Sample Entry (wvtt)

type BoxDecoder

type BoxDecoder func(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error)

BoxDecoder is function signature of the Box Decode method

type BtrtBox

type BtrtBox struct {
	BufferSizeDB uint32
	MaxBitrate   uint32
	AvgBitrate   uint32
}

BtrtBox - BitRateBox - ISO/IEC 14496-12 Section 8.5.2.2

func (*BtrtBox) Dump

func (b *BtrtBox) Dump(w io.Writer, indent, indentStep string) error

func (*BtrtBox) Encode

func (b *BtrtBox) Encode(w io.Writer) error

Encode - write box to w

func (*BtrtBox) Size

func (b *BtrtBox) Size() uint64

Size - return calculated size

func (*BtrtBox) Type

func (b *BtrtBox) Type() string

Type - return box type

type ContainerBox

type ContainerBox interface {
	Type() string
	Size() uint64
	Encode(w io.Writer) error
	GetChildren() []Box
	Dump(w io.Writer, indent, indentStep string) error
}

ContainerBox is interface for ContainerBoxes

type CtimBox

type CtimBox struct {
	CueCurrentTime string
}

CtimBox - CueTimeBox (ctim) CueCurrentTime is current time indication (for split cues)

func (*CtimBox) Dump

func (c *CtimBox) Dump(w io.Writer, indent, indentStep string) error

Dump - write box content with indentation to w

func (*CtimBox) Encode

func (c *CtimBox) Encode(w io.Writer) error

Encode - write box to w

func (*CtimBox) Size

func (c *CtimBox) Size() uint64

Size - calculated size of box

func (*CtimBox) Type

func (c *CtimBox) Type() string

Type - box-specific type

type CttsBox

type CttsBox struct {
	Version      byte
	Flags        uint32
	SampleCount  []uint32
	SampleOffset []int32 // int32 to handle version 1
}

CttsBox - Composition Time to Sample Box (ctts - optional)

Contained in: Sample Table Box (stbl)

func (*CttsBox) Dump

func (b *CttsBox) Dump(w io.Writer, indent, indentStep string) error

func (*CttsBox) Encode

func (b *CttsBox) Encode(w io.Writer) error

Encode - write box to w

func (*CttsBox) GetCompositionTimeOffset

func (b *CttsBox) GetCompositionTimeOffset(sampleNr uint32) int32

GetCompositionTimeOffset - composition time offset for sampleNr in track timescale

func (*CttsBox) Size

func (b *CttsBox) Size() uint64

Size - calculated size of box

func (*CttsBox) Type

func (b *CttsBox) Type() string

Type - box type

type DinfBox

type DinfBox struct {
	Dref     *DrefBox
	Children []Box
}

DinfBox - Data Information Box (dinf - mandatory)

Contained in : Media Information Box (minf) or Meta Box (meta)

func (*DinfBox) AddChild

func (d *DinfBox) AddChild(box Box)

AddChild - Add a child box

func (*DinfBox) Dump

func (d *DinfBox) Dump(w io.Writer, indent, indentStep string) error

func (*DinfBox) Encode

func (d *DinfBox) Encode(w io.Writer) error

Encode - write dinf container to w

func (*DinfBox) GetChildren

func (d *DinfBox) GetChildren() []Box

GetChildren - list of child boxes

func (*DinfBox) Size

func (d *DinfBox) Size() uint64

Size - box-specific size

func (*DinfBox) Type

func (d *DinfBox) Type() string

Type - box-specific type

type DrefBox

type DrefBox struct {
	Version    byte
	Flags      uint32
	EntryCount int
	Children   []Box
}

DrefBox - Data Reference Box (dref - mandatory)

Contained id: Data Information Box (dinf)

Defines the location of the media data. If the data for the track is located in the same file it contains nothing useful.

func CreateDref

func CreateDref() *DrefBox

CreateDref - Create an DataReferenceBox for selfcontained content

func (*DrefBox) AddChild

func (d *DrefBox) AddChild(box Box)

AddChild - Add a child box and update EntryCount

func (*DrefBox) Dump

func (d *DrefBox) Dump(w io.Writer, indent, indentStep string) error

func (*DrefBox) Encode

func (d *DrefBox) Encode(w io.Writer) error

Encode - write dref box to w including children

func (*DrefBox) Size

func (d *DrefBox) Size() uint64

Size - calculated size of box

func (*DrefBox) Type

func (d *DrefBox) Type() string

Type - box type

type EdtsBox

type EdtsBox struct {
	Elst     []*ElstBox
	Children []Box
}

EdtsBox - Edit Box (edts - optional)

Contained in: Track Box ("trak")

The edit box maps the presentation timeline to the media-time line

func (*EdtsBox) Dump

func (b *EdtsBox) Dump(w io.Writer, indent, indentStep string) error

func (*EdtsBox) Encode

func (b *EdtsBox) Encode(w io.Writer) error

Encode - write edts container to w

func (*EdtsBox) GetChildren

func (b *EdtsBox) GetChildren() []Box

GetChildren - list of child boxes

func (*EdtsBox) Size

func (b *EdtsBox) Size() uint64

Size - calculated size of box

func (*EdtsBox) Type

func (b *EdtsBox) Type() string

Type - box type

type ElngBox

type ElngBox struct {
	Language string
}

ElngBox - Extended Language Box

func CreateElng

func CreateElng(language string) *ElngBox

CreateElng - Create an Extended Language Box

func (*ElngBox) Dump

func (b *ElngBox) Dump(w io.Writer, indent, indentStep string) error

func (*ElngBox) Encode

func (b *ElngBox) Encode(w io.Writer) error

Encode - write box to w

func (*ElngBox) Size

func (b *ElngBox) Size() uint64

Size - calculated size of box

func (*ElngBox) Type

func (b *ElngBox) Type() string

Type - box type

type ElstBox

type ElstBox struct {
	Version           byte
	Flags             uint32
	SegmentDuration   []uint64
	MediaTime         []int64
	MediaRateInteger  []int16
	MediaRateFraction []int16
}

ElstBox - Edit List Box (elst - optional)

Contained in : Edit Box (edts)

func (*ElstBox) Dump

func (b *ElstBox) Dump(w io.Writer, indent, indentStep string) error

func (*ElstBox) Encode

func (b *ElstBox) Encode(w io.Writer) error

Encode - write box to w

func (*ElstBox) Size

func (b *ElstBox) Size() uint64

Size - calculated size of box

func (*ElstBox) Type

func (b *ElstBox) Type() string

Type - box type

type EmsgBox

type EmsgBox struct {
	Version               byte
	Flags                 uint32
	TimeScale             uint32
	PresentationTimeDelta uint32
	PresentationTime      uint64
	EventDuration         uint32
	Id                    uint32
	SchemeIdURI           string
	Value                 string
}

EmsgBox - DASHEventMessageBox as defined in ISO/IEC 23009-1

func (*EmsgBox) Dump

func (b *EmsgBox) Dump(w io.Writer, indent, indentStep string) error

func (*EmsgBox) Encode

func (b *EmsgBox) Encode(w io.Writer) error

Encode - write box to w

func (*EmsgBox) Size

func (b *EmsgBox) Size() uint64

Size - calculated size of box

func (*EmsgBox) Type

func (b *EmsgBox) Type() string

Type - box type

type EsdsBox

type EsdsBox struct {
	Version               byte
	Flags                 uint32
	EsDescrTag            byte
	EsID                  uint16
	FlagsAndPriority      byte
	DecoderConfigDescrTag byte
	ObjectType            byte
	StreamType            byte
	BufferSizeDB          uint32
	MaxBitrate            uint32
	AvgBitrate            uint32
	DecSpecificInfoTag    byte
	DecConfig             []byte
	SLConfigDescrTag      byte
	SLConfigValue         byte
	// contains filtered or unexported fields
}

EsdsBox as used for MPEG-audio, see ISO 14496-1 Section 7.2.6.6 for DecoderConfigDescriptor

func CreateEsdsBox

func CreateEsdsBox(decConfig []byte) *EsdsBox

CreateEsdsBox - Create an EsdsBox geiven decConfig

func (*EsdsBox) Dump

func (e *EsdsBox) Dump(w io.Writer, indent, indentStep string) error

func (*EsdsBox) Encode

func (e *EsdsBox) Encode(w io.Writer) error

Encode - write box to w

func (*EsdsBox) Size

func (e *EsdsBox) Size() uint64

Size - calculated size of box

func (*EsdsBox) Type

func (e *EsdsBox) Type() string

Type - box type

type File

type File struct {
	Ftyp     *FtypBox        // Only used for non-fragmented files
	Moov     *MoovBox        // Only used for non-fragmented files
	Mdat     *MdatBox        // Only used for non-fragmented files
	Init     *InitSegment    // Init data (ftyp + moov for fragmented file)
	Sidx     *SidxBox        // SidxBox for a DASH OnDemand file
	Segments []*MediaSegment // Media segment
	Children []Box           // All top-level boxes in order
	// contains filtered or unexported fields
}

File - an MPEG-4 file asset

A MPEG-4 media contains three main boxes if progressive :

ftyp : the file type box
moov : the movie box (meta-data)
mdat : the media data (chunks and samples)

If fragmented, the data is instead in Init and/or Segments.

segments.

func DecodeFile

func DecodeFile(r io.Reader) (*File, error)

DecodeFile - parse and decode a file from reader r

func NewFile

func NewFile() *File

NewFile - create MP4 file

func (*File) AddChild

func (f *File) AddChild(box Box, boxStartPos uint64)

AddChild - add child with start position

func (*File) AddMediaSegment

func (f *File) AddMediaSegment(m *MediaSegment)

AddMediaSegment - add a mediasegment to file f

func (*File) Dump

func (f *File) Dump(w io.Writer, indent string) error

Dump - write box tree with indent for each level

func (*File) DumpWithSampleData

func (f *File) DumpWithSampleData(w io.Writer) error

DumpWithSampleData - print information about file and its children boxes

func (*File) Encode

func (f *File) Encode(w io.Writer) error

Encode - encode a file to a Writer

func (*File) IsFragmented

func (f *File) IsFragmented() bool

IsFragmented - is file made of multiple segments (Mp4 fragments)

func (*File) LastSegment

func (f *File) LastSegment() *MediaSegment

LastSegment - Currently last segment

type Fixed16

type Fixed16 uint16

Fixed16 - An 8.8 fixed point number

func (Fixed16) String

func (f Fixed16) String() string

type Fixed32

type Fixed32 uint32

Fixed32 - A 16.16 fixed point number

func (Fixed32) String

func (f Fixed32) String() string

type Fragment

type Fragment struct {
	Prft     *PrftBox
	Moof     *MoofBox
	Mdat     *MdatBox
	Children []Box // All top-level boxes in order
}

Fragment - MP4 Fragment ([prft] + moof + mdat)

func CreateFragment

func CreateFragment(seqNumber uint32, trackID uint32) (*Fragment, error)

CreateFragment - create emtpy fragment with one single track for output

func NewFragment

func NewFragment() *Fragment

NewFragment - New emtpy one-track MP4 Fragment

func (*Fragment) AddChild

func (f *Fragment) AddChild(b Box)

AddChild - Add a top-level box to Fragment

func (*Fragment) AddFullSample

func (f *Fragment) AddFullSample(s *FullSample)

AddFullSample - add a full sample to a fragment

func (*Fragment) Dump

func (f *Fragment) Dump(w io.Writer, indent string) error

Dump - write box tree with indent for each level

func (*Fragment) DumpSampleData

func (f *Fragment) DumpSampleData(w io.Writer, trex *TrexBox) error

DumpSampleData - Get Sample data and print out

func (*Fragment) Encode

func (f *Fragment) Encode(w io.Writer) error

Encode - write fragment via writer

func (*Fragment) GetChildren

func (f *Fragment) GetChildren() []Box

GetChildren - return children boxes

func (*Fragment) GetFullSamples

func (f *Fragment) GetFullSamples(trex *TrexBox) []*FullSample

GetFullSamples - Get full samples including media and accumulated time

type FreeBox

type FreeBox struct {
	// contains filtered or unexported fields
}

FreeBox - Free Box

func (*FreeBox) Dump

func (b *FreeBox) Dump(w io.Writer, indent, indentStep string) error

func (*FreeBox) Encode

func (b *FreeBox) Encode(w io.Writer) error

Encode - write box to w

func (*FreeBox) Size

func (b *FreeBox) Size() uint64

Size - calculated size of box

func (*FreeBox) Type

func (b *FreeBox) Type() string

Type - box type

type FtypBox

type FtypBox struct {
	MajorBrand       string
	MinorVersion     []byte
	CompatibleBrands []string
}

FtypBox - File Type Box (ftyp - mandatory)

func CreateFtyp

func CreateFtyp() *FtypBox

CreateFtyp - Create an Ftyp box suitaable for DASH/CMAF

func (*FtypBox) Dump

func (b *FtypBox) Dump(w io.Writer, indent, indentStep string) error

func (*FtypBox) Encode

func (b *FtypBox) Encode(w io.Writer) error

Encode - write box to w

func (*FtypBox) Size

func (b *FtypBox) Size() uint64

Size - return calculated size

func (*FtypBox) Type

func (b *FtypBox) Type() string

Type - return box type

type FullSample

type FullSample struct {
	Sample
	DecodeTime uint64 // Absolute decode time (offset + accumulated sample Dur)
	Data       []byte // Sample data
}

FullSample - include accumulated time and data. Times in mdhd timescale

func (*FullSample) PresentationTime

func (s *FullSample) PresentationTime() uint64

PresentationTime - DecodeTime displaced by composition time offset (possibly negative)

type HdlrBox

type HdlrBox struct {
	Version     byte
	Flags       uint32
	PreDefined  uint32
	HandlerType string
	Name        string
}

HdlrBox - Handler Reference Box (hdlr - mandatory)

Contained in: Media Box (mdia) or Meta Box (meta)

This box describes the type of data contained in the trak. HandlerType can be : "vide" (video track), "soun" (audio track), "subt" (subtitle track) Other types are: "hint" (hint track), "meta" (timed Metadata track), "auxv" (auxiliary video track).

func CreateHdlr

func CreateHdlr(mediaType string) (*HdlrBox, error)

CreateHdlr - create mediaType-specific hdlr box

func (*HdlrBox) Dump

func (b *HdlrBox) Dump(w io.Writer, indent, indentStep string) error

func (*HdlrBox) Encode

func (b *HdlrBox) Encode(w io.Writer) error

Encode - write box to w

func (*HdlrBox) Size

func (b *HdlrBox) Size() uint64

Size - calculated size of box

func (*HdlrBox) Type

func (b *HdlrBox) Type() string

Type - box type

type IdenBox

type IdenBox struct {
	CueID string
}

IdenBox - CueIDBox (iden)

func (*IdenBox) Dump

func (i *IdenBox) Dump(w io.Writer, indent, indentStep string) error

Dump - write box content with indentation to w

func (*IdenBox) Encode

func (i *IdenBox) Encode(w io.Writer) error

Encode - write box to w

func (*IdenBox) Size

func (i *IdenBox) Size() uint64

Size - calculated size of box

func (*IdenBox) Type

func (i *IdenBox) Type() string

Type - box-specific type

type InitSegment

type InitSegment struct {
	MediaType string
	Ftyp      *FtypBox
	Moov      *MoovBox
	Children  []Box // All top-level boxes in order
}

InitSegment - MP4/CMAF init segment

func CreateEmptyMP4Init

func CreateEmptyMP4Init(timeScale uint32, mediaType, language string) *InitSegment

CreateEmptyMP4Init - Create a one-track MP4 init segment with empty stsd box The trak has trackID = 1. The irrelevant mdhd timescale is set to 90000 and duration = 0

func NewMP4Init

func NewMP4Init() *InitSegment

NewMP4Init - Create MP4Init

func (*InitSegment) AddChild

func (s *InitSegment) AddChild(b Box)

AddChild - Add a top-level box to InitSegment

func (*InitSegment) Dump

func (i *InitSegment) Dump(w io.Writer, indent string) error

Dump - write box tree with indent for each level

func (*InitSegment) Encode

func (s *InitSegment) Encode(w io.Writer) error

Encode - encode an initsegment to a Writer

func (*InitSegment) GetMediaType

func (s *InitSegment) GetMediaType() string

GetMediaType - should return video or audio (at present)

type InitializationVector

type InitializationVector []byte

InitializationVector (8 or 16 bytes)

type MdatBox

type MdatBox struct {
	StartPos uint64
	Data     []byte
}

MdatBox - Media Data Box (mdat) The mdat box contains media chunks/samples.

func (*MdatBox) AddSampleData

func (m *MdatBox) AddSampleData(s []byte)

AddSampleData - a sample data to an mdat box

func (*MdatBox) Dump

func (m *MdatBox) Dump(w io.Writer, indent, indentStep string) error

func (*MdatBox) Encode

func (m *MdatBox) Encode(w io.Writer) error

Encode - write box to w

func (*MdatBox) HeaderLength

func (m *MdatBox) HeaderLength() uint64

HeaderLength - length of box header including possible largeSize

func (*MdatBox) Size

func (m *MdatBox) Size() uint64

Size - return calculated size. If bigger 32-bit max, it should be escaped.

func (*MdatBox) Type

func (m *MdatBox) Type() string

Type - return box type

type MdhdBox

type MdhdBox struct {
	Version          byte // Only version 0
	Flags            uint32
	CreationTime     uint64 // Typically not set
	ModificationTime uint64 // Typically not set
	Timescale        uint32 // Media timescale for this track
	Duration         uint64 // Trak duration, 0 for fragmented files
	Language         uint16 // Three-letter ISO-639-2/T language code
}

MdhdBox - Media Header Box (mdhd - mandatory)

Contained in : Media Box (mdia)

Timescale defines the timescale used for this track. Language is a ISO-639-2/T language code stored as 1bit padding + [3]int5

func (*MdhdBox) Dump

func (m *MdhdBox) Dump(w io.Writer, indent, indentStep string) error

func (*MdhdBox) Encode

func (m *MdhdBox) Encode(w io.Writer) error

Encode - write box to w

func (*MdhdBox) GetLanguage

func (m *MdhdBox) GetLanguage() string

GetLanguage - Get three-byte language string

func (*MdhdBox) SetLanguage

func (m *MdhdBox) SetLanguage(lang string)

SetLanguage - Set three-byte language string

func (*MdhdBox) Size

func (m *MdhdBox) Size() uint64

Size - calculated size of box

func (*MdhdBox) Type

func (m *MdhdBox) Type() string

Type - box type

type MdiaBox

type MdiaBox struct {
	Mdhd     *MdhdBox
	Hdlr     *HdlrBox
	Elng     *ElngBox
	Minf     *MinfBox
	Elst     *ElstBox
	Children []Box
}

MdiaBox - Media Box (mdia)

Contained in : Track Box (trak) Contains all information about the media data.

func NewMdiaBox

func NewMdiaBox() *MdiaBox

NewMdiaBox - Generate a new empty mdia box

func (*MdiaBox) AddChild

func (m *MdiaBox) AddChild(box Box)

AddChild - Add a child box

func (*MdiaBox) Dump

func (m *MdiaBox) Dump(w io.Writer, indent, indentStep string) error

func (*MdiaBox) Encode

func (m *MdiaBox) Encode(w io.Writer) error

Encode - write mdia container to w

func (*MdiaBox) GetChildren

func (m *MdiaBox) GetChildren() []Box

GetChildren - list of child boxes

func (*MdiaBox) Size

func (m *MdiaBox) Size() uint64

Size - return calculated size

func (*MdiaBox) Type

func (m *MdiaBox) Type() string

Type - return box type

type MediaSegment

type MediaSegment struct {
	Styp      *StypBox
	Sidx      *SidxBox // Sidx for a segment
	Fragments []*Fragment
}

MediaSegment - MP4 Media Segment

func NewMediaSegment

func NewMediaSegment() *MediaSegment

NewMediaSegment - New empty MediaSegment

func (*MediaSegment) AddFragment

func (s *MediaSegment) AddFragment(f *Fragment)

AddFragment - Add a fragment to a MediaSegment

func (*MediaSegment) Dump

func (m *MediaSegment) Dump(w io.Writer, indent string) error

Dump - write box tree with indent for each level

func (*MediaSegment) Encode

func (s *MediaSegment) Encode(w io.Writer) error

Encode - Write MediaSegment via writer

func (*MediaSegment) Fragmentify

func (s *MediaSegment) Fragmentify(timescale uint64, trex *TrexBox, duration uint32) ([]*Fragment, error)

Fragmentify - Split into multiple fragments. Assume single mdat and trun for now

func (*MediaSegment) LastFragment

func (s *MediaSegment) LastFragment() *Fragment

LastFragment - Currently last fragment

type MfhdBox

type MfhdBox struct {
	Version        byte
	Flags          uint32
	SequenceNumber uint32
}

MfhdBox - Media Fragment Header Box (mfhd)

Contained in : Movie Fragment box (moof))

func CreateMfhd

func CreateMfhd(sequenceNumber uint32) *MfhdBox

CreateMfhd - create an MfhdBox

func (*MfhdBox) Dump

func (m *MfhdBox) Dump(w io.Writer, indent, indentStep string) error

func (*MfhdBox) Encode

func (m *MfhdBox) Encode(w io.Writer) error

Encode - write box to w

func (*MfhdBox) Size

func (m *MfhdBox) Size() uint64

Size - calculated size of box

func (*MfhdBox) Type

func (m *MfhdBox) Type() string

Type - box type

type MinfBox

type MinfBox struct {
	Vmhd     *VmhdBox
	Smhd     *SmhdBox
	Stbl     *StblBox
	Dinf     *DinfBox
	Hdlr     *HdlrBox
	Children []Box
}

MinfBox - Media Information Box (minf - mandatory)

Contained in : Media Box (mdia)

func NewMinfBox

func NewMinfBox() *MinfBox

NewMinfBox - Generate a new empty minf box

func (*MinfBox) AddChild

func (m *MinfBox) AddChild(box Box)

AddChild - Add a child box

func (*MinfBox) Dump

func (m *MinfBox) Dump(w io.Writer, indent, indentStep string) error

func (*MinfBox) Encode

func (m *MinfBox) Encode(w io.Writer) error

Encode - write minf container to w

func (*MinfBox) GetChildren

func (m *MinfBox) GetChildren() []Box

GetChildren - list of child boxes

func (*MinfBox) Size

func (m *MinfBox) Size() uint64

Size - calculated size of box

func (*MinfBox) Type

func (m *MinfBox) Type() string

Type - box type

type MoofBox

type MoofBox struct {
	Mfhd     *MfhdBox
	Traf     *TrafBox // A single traf child box
	Children []Box
	StartPos uint64
}

MoofBox - Movie Fragment Box (moof)

Contains all meta-data. To be able to stream a file, the moov box should be placed before the mdat box.

func (*MoofBox) AddChild

func (m *MoofBox) AddChild(b Box) error

AddChild - add child box

func (*MoofBox) Dump

func (m *MoofBox) Dump(w io.Writer, indent, indentStep string) error

func (*MoofBox) Encode

func (m *MoofBox) Encode(w io.Writer) error

Encode - write moof after updating trun dataoffset

func (*MoofBox) GetChildren

func (m *MoofBox) GetChildren() []Box

GetChildren - list of child boxes

func (*MoofBox) Size

func (m *MoofBox) Size() uint64

Size - returns calculated size

func (*MoofBox) Type

func (m *MoofBox) Type() string

Type - returns box type

type MoovBox

type MoovBox struct {
	Mvhd     *MvhdBox
	Trak     []*TrakBox
	Mvex     *MvexBox
	Children []Box
}

MoovBox - Movie Box (moov - mandatory)

Contains all meta-data. To be able to stream a file, the moov box should be placed before the mdat box.

func NewMoovBox

func NewMoovBox() *MoovBox

NewMoovBox - Generate a new empty moov box

func (*MoovBox) AddChild

func (m *MoovBox) AddChild(box Box)

AddChild - Add a child box

func (*MoovBox) Dump

func (m *MoovBox) Dump(w io.Writer, indent, indentStep string) error

func (*MoovBox) Encode

func (m *MoovBox) Encode(w io.Writer) error

Encode - write moov container to w

func (*MoovBox) GetChildren

func (m *MoovBox) GetChildren() []Box

GetChildren - list of child boxes

func (*MoovBox) Size

func (m *MoovBox) Size() uint64

Size - calculated size of box

func (*MoovBox) Type

func (m *MoovBox) Type() string

Type - box type

type MvexBox

type MvexBox struct {
	//Mehd *TkhdBox
	Trex     *TrexBox
	Children []Box
}

MvexBox - MovieExtendsBox (mevx)

Contained in : Movie Box (moov)

Its presence signals a fragmented asset

func NewMvexBox

func NewMvexBox() *MvexBox

NewMvexBox - Generate a new empty mvex box

func (*MvexBox) AddChild

func (m *MvexBox) AddChild(box Box)

AddChild - Add a child box

func (*MvexBox) Dump

func (m *MvexBox) Dump(w io.Writer, indent, indentStep string) error

func (*MvexBox) Encode

func (m *MvexBox) Encode(w io.Writer) error

Encode - write mvex container to w

func (*MvexBox) GetChildren

func (t *MvexBox) GetChildren() []Box

GetChildren - list of child boxes

func (*MvexBox) Size

func (m *MvexBox) Size() uint64

Size - return calculated size

func (*MvexBox) Type

func (m *MvexBox) Type() string

Type - return box type

type MvhdBox

type MvhdBox struct {
	Version          byte
	Flags            uint32
	CreationTime     uint64
	ModificationTime uint64
	Timescale        uint32
	Duration         uint64
	NextTrackID      int32
	Rate             Fixed32
	Volume           Fixed16
}

MvhdBox - Movie Header Box (mvhd - mandatory)

Contained in : Movie Box (‘moov’)

Contains all media information (duration, ...).

Duration is measured in "time units", and timescale defines the number of time units per second.

func CreateMvhd

func CreateMvhd() *MvhdBox

CreateMvhd - create mvhd box with reasonable values

func (*MvhdBox) Dump

func (b *MvhdBox) Dump(w io.Writer, indent, indentStep string) error

func (*MvhdBox) Encode

func (b *MvhdBox) Encode(w io.Writer) error

Encode - write box to w

func (*MvhdBox) Size

func (b *MvhdBox) Size() uint64

Size - return calculated size

func (*MvhdBox) Type

func (b *MvhdBox) Type() string

Type - return box type

type NmhdBox

type NmhdBox struct {
	Version byte
	Flags   uint32
}

NmhdBox - Null Media Header Box (nmhd - often used instead ofsthd for subtitle tracks)

func (*NmhdBox) Dump

func (b *NmhdBox) Dump(w io.Writer, indent, indentStep string) error

func (*NmhdBox) Encode

func (b *NmhdBox) Encode(w io.Writer) error

Encode - write box to w

func (*NmhdBox) Size

func (b *NmhdBox) Size() uint64

Size - calculated size of box

func (*NmhdBox) Type

func (b *NmhdBox) Type() string

Type - box-specific type

type PaylBox

type PaylBox struct {
	CueText string
}

PaylBox - CuePayloadBox (payl)

func (*PaylBox) Dump

func (p *PaylBox) Dump(w io.Writer, indent, indentStep string) error

Dump - write box content with indentation to w

func (*PaylBox) Encode

func (p *PaylBox) Encode(w io.Writer) error

Encode - write box to w

func (*PaylBox) Size

func (p *PaylBox) Size() uint64

Size - calculated size of box

func (*PaylBox) Type

func (p *PaylBox) Type() string

Type - box-specific type

type PrftBox

type PrftBox struct {
	Version      byte
	Flags        uint32
	NTPTimestamp uint64
	MediaTime    uint64
}

PrftBox - Producer Reference Box (prft)

Contained in File before moof box

func CreatePrftBox

func CreatePrftBox(version byte, ntp uint64, mediatime uint64) *PrftBox

CreatePrftBox - Create a new PrftBox

func (*PrftBox) Dump

func (p *PrftBox) Dump(w io.Writer, indent, indentStep string) error

func (*PrftBox) Encode

func (p *PrftBox) Encode(w io.Writer) error

Encode - write box to w

func (*PrftBox) Size

func (p *PrftBox) Size() uint64

Size - return calculated size

func (*PrftBox) Type

func (p *PrftBox) Type() string

Type - return box type

type Sample

type Sample struct {
	Flags uint32 // Flag sync sample etc
	Dur   uint32 // Sample duration in mdhd timescale
	Size  uint32 // Size of sample data
	Cto   int32  // Signed composition time offset
}

Sample - sample as used in trun box (mdhd timescale)

func NewSample

func NewSample(flags uint32, dur uint32, size uint32, cto int32) *Sample

NewSample - create Sample with trun data

func (*Sample) IsSync

func (s *Sample) IsSync() bool

IsSync - check sync by masking flags including dependsOn

type SampleFlags

type SampleFlags struct {
	IsLeading                 uint32
	SampleDependsOn           uint32
	SampleIsDependedOn        uint32
	SampleHasRedundancy       uint32
	SampleDegradationPriority uint16
	SampleIsNonSync           bool
}

SampleFlags according to 14496-12 Sec. 8.8.3.1

func DecodeSampleFlags

func DecodeSampleFlags(u uint32) *SampleFlags

DecodeSampleFlags - decode a uint32 flags field

type SencBox

type SencBox struct {
	Version     byte
	Flags       uint32
	SampleCount uint32
	IVs         []InitializationVector // 8 or 16 bytes if present
	SubSamples  [][]SubSamplePattern
}

SencBox - Sample Encryption Box (senc) See ISO/IEC 23001-7 Section 7.2 Full Box + SampleCount

func CreateSencBox

func CreateSencBox() *SencBox

CreateSendBox - create an empty SencBox

func (*SencBox) AddSample

func (s *SencBox) AddSample(sample SencSample) error

AddSample - add a senc sample with possible IV and subsamples

func (*SencBox) Dump

func (s *SencBox) Dump(w io.Writer, indent, indentStep string) error

func (*SencBox) Encode

func (s *SencBox) Encode(w io.Writer) error

Encode - box-specific encode

func (*SencBox) GetPerSampleIVSize

func (s *SencBox) GetPerSampleIVSize() int

func (*SencBox) Size

func (s *SencBox) Size() uint64

Size - box-specific type

func (*SencBox) Type

func (s *SencBox) Type() string

Type - box-specific type

type SencSample

type SencSample struct {
	IV         InitializationVector // 0,8,16 byte length
	SubSamples []SubSamplePattern
}

SencSample - sample in SencBox

type SidxBox

type SidxBox struct {
	Version                  byte
	Flags                    uint32
	ReferenceID              uint32
	Timescale                uint32
	EarliestPresentationTime uint64
	FirstOffset              uint64
	SidxRefs                 []SidxRef
}

SidxBox - SegmentIndexBox

func CreateSidx

func CreateSidx(baseMediaDecodeTime uint64) *SidxBox

CreateSidx - Create a new TfdtBox with baseMediaDecodeTime

func (*SidxBox) Dump

func (b *SidxBox) Dump(w io.Writer, indent, indentStep string) error

func (*SidxBox) Encode

func (b *SidxBox) Encode(w io.Writer) error

Encode - write box to w

func (*SidxBox) Size

func (b *SidxBox) Size() uint64

Size - return calculated size

func (*SidxBox) Type

func (b *SidxBox) Type() string

Type - return box type

type SidxRef

type SidxRef struct {
	ReferencedSize     uint32
	SubSegmentDuration uint32
	SAPDeltaTime       uint32
	ReferenceType      uint8 // 1-bit
	StartsWithSAP      uint8 // 1-bit
	SAPType            uint8
}

SidxRef - reference as used inside SidxBox

type SliceReader

type SliceReader struct {
	// contains filtered or unexported fields
}

SliceReader - read integers from a slice

func NewSliceReader

func NewSliceReader(data []byte) *SliceReader

NewSliceReader - create a new slice reader reading from data

func (*SliceReader) GetPos

func (s *SliceReader) GetPos() int

GetPos - get read position is slice

func (*SliceReader) Length

func (s *SliceReader) Length() int

Length - get length of slice

func (*SliceReader) NrRemainingBytes

func (s *SliceReader) NrRemainingBytes() int

NrRemaingingByts - return number of bytes remaining

func (*SliceReader) ReadBytes

func (s *SliceReader) ReadBytes(n int) []byte

ReadBytes - read a slice of bytes

func (*SliceReader) ReadFixedLengthString

func (s *SliceReader) ReadFixedLengthString(length int) string

ReadFixedLengthString - read string of specified length

func (*SliceReader) ReadInt16

func (s *SliceReader) ReadInt16() int16

ReadInt16 - read int16 from slice

func (*SliceReader) ReadInt32

func (s *SliceReader) ReadInt32() int32

ReadInt32 - read int32 from slice

func (*SliceReader) ReadInt64

func (s *SliceReader) ReadInt64() int64

ReadInt64 - read int64 from slice

func (*SliceReader) ReadUint8

func (s *SliceReader) ReadUint8() byte

ReadUint8 - read uint8 from slice

func (*SliceReader) ReadUint16

func (s *SliceReader) ReadUint16() uint16

ReadUint16 - read uint16 from slice

func (*SliceReader) ReadUint32

func (s *SliceReader) ReadUint32() uint32

ReadUint32 - read uint32 from slice

func (*SliceReader) ReadUint64

func (s *SliceReader) ReadUint64() uint64

ReadUint64 - read uint64 from slice

func (*SliceReader) ReadZeroTerminatedString

func (s *SliceReader) ReadZeroTerminatedString() (string, error)

ReadZeroTerminatedString - read string until zero

func (*SliceReader) RemainingBytes

func (s *SliceReader) RemainingBytes() []byte

RemainingBytes - return remaining bytes of this slice

func (*SliceReader) SetPos

func (s *SliceReader) SetPos(pos int)

SetPos - set read position is slice

func (*SliceReader) SkipBytes

func (s *SliceReader) SkipBytes(n int)

SkipBytes - skip passed n bytes

type SliceWriter

type SliceWriter struct {
	// contains filtered or unexported fields
}

SliceWriter - write numbers to a []byte slice

func NewSliceWriter

func NewSliceWriter(data []byte) *SliceWriter

NewSliceWriter - create writer around slice

func (*SliceWriter) WriteBytes

func (b *SliceWriter) WriteBytes(byteSlice []byte)

WriteBytes - write []byte

func (*SliceWriter) WriteInt16

func (b *SliceWriter) WriteInt16(n int16)

WriteInt16 - write int16 to slice

func (*SliceWriter) WriteInt32

func (b *SliceWriter) WriteInt32(n int32)

WriteInt32 - write int32 to slice

func (*SliceWriter) WriteInt64

func (b *SliceWriter) WriteInt64(n int64)

WriteInt64 - write int64 to slice

func (*SliceWriter) WriteString

func (b *SliceWriter) WriteString(s string, addZeroEnd bool)

WriteString - write string to slice with or without zero end

func (*SliceWriter) WriteUint8

func (b *SliceWriter) WriteUint8(n byte)

WriteUint8 - write byte to slice

func (*SliceWriter) WriteUint16

func (b *SliceWriter) WriteUint16(n uint16)

WriteUint16 - write uint16 to slice

func (*SliceWriter) WriteUint32

func (b *SliceWriter) WriteUint32(n uint32)

WriteUint32 - write uint32 to slice

func (*SliceWriter) WriteUint64

func (b *SliceWriter) WriteUint64(n uint64)

WriteUint64 - write uint64 to slice

func (*SliceWriter) WriteUnityMatrix

func (b *SliceWriter) WriteUnityMatrix()

WriteUnityMatrix - write a unity matrix for mvhd or tkhd

func (*SliceWriter) WriteZeroBytes

func (b *SliceWriter) WriteZeroBytes(n int)

WriteZeroBytes - write n byte of zeroes

type SmhdBox

type SmhdBox struct {
	Version byte
	Flags   uint32
	Balance uint16 // should be int16
}

SmhdBox - Sound Media Header Box (smhd - mandatory for sound tracks)

Contained in : Media Information Box (minf)

func CreateSmhd

func CreateSmhd() *SmhdBox

CreateSmhd - Create Sound Media Header Box (all is zero)

func (*SmhdBox) Dump

func (b *SmhdBox) Dump(w io.Writer, indent, indentStep string) error

func (*SmhdBox) Encode

func (b *SmhdBox) Encode(w io.Writer) error

Encode - write box to w

func (*SmhdBox) Size

func (b *SmhdBox) Size() uint64

Size - calculated size of box

func (*SmhdBox) Type

func (b *SmhdBox) Type() string

Type - box type

type StblBox

type StblBox struct {
	Stsd     *StsdBox
	Stts     *SttsBox
	Stss     *StssBox
	Stsc     *StscBox
	Stsz     *StszBox
	Stco     *StcoBox
	Ctts     *CttsBox
	Children []Box
}

StblBox - Sample Table Box (stbl - mandatory)

Contained in : Media Information Box (minf)

The table contains all information relevant to data samples (times, chunks, sizes, ...)

func NewStblBox

func NewStblBox() *StblBox

NewStblBox - Generate a new empty stbl box

func (*StblBox) AddChild

func (s *StblBox) AddChild(box Box)

AddChild - Add a child box

func (*StblBox) Dump

func (s *StblBox) Dump(w io.Writer, indent, indentStep string) error

func (*StblBox) Encode

func (s *StblBox) Encode(w io.Writer) error

Encode - write stbl container to w

func (*StblBox) GetChildren

func (s *StblBox) GetChildren() []Box

GetChildren - list of child boxes

func (*StblBox) Size

func (s *StblBox) Size() uint64

Size - box-specific size

func (*StblBox) Type

func (s *StblBox) Type() string

Type - box-specific type

type StcoBox

type StcoBox struct {
	Version     byte
	Flags       uint32
	ChunkOffset []uint32
}

StcoBox - Chunk Offset Box (stco - mandatory)

Contained in : Sample Table box (stbl)

This is the 32bits version of the box, the 64bits version (co64) is not decoded.

The table contains the offsets (starting at the beginning of the file) for each chunk of data for the current track. A chunk contains samples, the table defining the allocation of samples to each chunk is stsc.

func (*StcoBox) Dump

func (s *StcoBox) Dump(w io.Writer, indent, indentStep string) error

func (*StcoBox) Encode

func (b *StcoBox) Encode(w io.Writer) error

Encode - box-specific encode

func (*StcoBox) Size

func (b *StcoBox) Size() uint64

Size - box-specific size

func (*StcoBox) Type

func (b *StcoBox) Type() string

Type - box-specific type

type SthdBox

type SthdBox struct {
	Version byte
	Flags   uint32
}

SthdBox - Subtitle Media Header Box (sthd - for subtitle tracks)

func (*SthdBox) Dump

func (b *SthdBox) Dump(w io.Writer, indent, indentStep string) error

func (*SthdBox) Encode

func (b *SthdBox) Encode(w io.Writer) error

Encode - write box to w

func (*SthdBox) Size

func (b *SthdBox) Size() uint64

Size - calculated size of box

func (*SthdBox) Type

func (b *SthdBox) Type() string

Type - box-specific type

type StppBox

type StppBox struct {
	Namespace          string   // Mandatory
	SchemaLocation     string   // Optional
	AuxiliaryMimeTypes string   // Required if auxiliary types present
	Btrt               *BtrtBox // Optional
	Children           []Box
	DataReferenceIndex uint16
}

StppBox - XMLSubtitleSampleEntryr Box (stpp)

Contained in : Media Information Box (minf)

func NewStppBox

func NewStppBox(namespace, schemaLocation, auxiliaryMimeTypes string) *StppBox

NewStppBox - Create new stpp box

func (*StppBox) AddChild

func (w *StppBox) AddChild(box Box)

AddChild - add a child box (avcC normally, but clap and pasp could be part of visual entry)

func (*StppBox) Dump

func (s *StppBox) Dump(w io.Writer, indent, indentStep string) error

func (*StppBox) Encode

func (s *StppBox) Encode(w io.Writer) error

Encode - write box to w

func (*StppBox) Size

func (s *StppBox) Size() uint64

Size - return calculated size

func (*StppBox) Type

func (s *StppBox) Type() string

Type - return box type

type StscBox

type StscBox struct {
	Version             byte
	Flags               uint32
	FirstChunk          []uint32
	SamplesPerChunk     []uint32
	SampleDescriptionID []uint32
}

StscBox - Sample To Chunk Box (stsc - mandatory)

A chunk contains samples. This table defines to which chunk a sample is associated. Each entry is defined by :

  • first chunk : all chunks starting at this index up to the next first chunk have the same sample count/description
  • samples per chunk : number of samples in the chunk
  • description id : description (see the sample description box - stsd)

func (*StscBox) ChunkNrFromSampleNr

func (b *StscBox) ChunkNrFromSampleNr(sampleNr int) (chunkNr, firstSampleInChunk int, err error)

ChunkNrFromSampleNr - get chunk number from sampleNr (1-based)

func (*StscBox) Dump

func (s *StscBox) Dump(w io.Writer, indent, indentStep string) error

func (*StscBox) Encode

func (b *StscBox) Encode(w io.Writer) error

Encode - box-specific encode

func (*StscBox) Size

func (b *StscBox) Size() uint64

Size - box-specfic size

func (*StscBox) Type

func (b *StscBox) Type() string

Type box-specific type

type StsdBox

type StsdBox struct {
	Version     byte
	Flags       uint32
	SampleCount uint32
	AvcX        *VisualSampleEntryBox
	Mp4a        *AudioSampleEntryBox
	Children    []Box
}

StsdBox - Sample Description Box (stsd - manatory) See ISO/IEC 14496-12 Section 8.5.2.2 Full Box + SampleCount

func NewStsdBox

func NewStsdBox() *StsdBox

NewStsdBox - Generate a new empty stsd box

func (*StsdBox) AddChild

func (s *StsdBox) AddChild(box Box)

AddChild - Add a child box and update SampleCount

func (*StsdBox) Dump

func (s *StsdBox) Dump(w io.Writer, indent, indentStep string) error

func (*StsdBox) Encode

func (s *StsdBox) Encode(w io.Writer) error

Encode - box-specific encode of stsd - not a usual container

func (*StsdBox) GetSampleDescription

func (s *StsdBox) GetSampleDescription(index int) (Box, error)

GetSampleDescription - get one of multiple descriptions

func (*StsdBox) ReplaceChild

func (s *StsdBox) ReplaceChild(box Box)

AddChild - Replace a child box with one of the same type

func (*StsdBox) Size

func (s *StsdBox) Size() uint64

Size - box-specific type

func (*StsdBox) Type

func (s *StsdBox) Type() string

Type - box-specific type

type StssBox

type StssBox struct {
	Version      byte
	Flags        uint32
	SampleNumber []uint32
	// contains filtered or unexported fields
}

StssBox - Sync Sample Box (stss - optional)

Contained in : Sample Table box (stbl)

This lists all sync samples (key frames for video tracks) in the data. If absent, all samples are sync samples.

func (*StssBox) Dump

func (s *StssBox) Dump(w io.Writer, indent, indentStep string) error

func (*StssBox) Encode

func (b *StssBox) Encode(w io.Writer) error

Encode - box-specific encode

func (*StssBox) IsSyncSample

func (b *StssBox) IsSyncSample(sampleNr uint32) (isSync bool)

IsSyncSample - check if a sample is a sync sample

func (*StssBox) Size

func (b *StssBox) Size() uint64

Size - box-specfic size

func (*StssBox) Type

func (b *StssBox) Type() string

Type - box-specfic type

type StszBox

type StszBox struct {
	Version           byte
	Flags             uint32
	SampleUniformSize uint32
	SampleNumber      uint32
	SampleSize        []uint32
}

StszBox - Sample Size Box (stsz - mandatory)

Contained in : Sample Table box (stbl)

For each track, either stsz of the more compact stz2 must be present. stz2 variant is not supported.

This table lists the size of each sample. If all samples have the same size, it can be defined in the SampleUniformSize attribute.

func (*StszBox) Dump

func (s *StszBox) Dump(w io.Writer, indent, indentStep string) error

func (*StszBox) Encode

func (b *StszBox) Encode(w io.Writer) error

Encode - write box to w

func (*StszBox) GetSampleSize

func (b *StszBox) GetSampleSize(i int) uint32

GetSampleSize returns the size (in bytes) of a sample

func (*StszBox) Size

func (b *StszBox) Size() uint64

Size - box-specific size

func (*StszBox) Type

func (b *StszBox) Type() string

Type - box-specific type

type SttgBox

type SttgBox struct {
	Settings string
}

SttgBox - CueSettingsBox (sttg)

func (*SttgBox) Dump

func (s *SttgBox) Dump(w io.Writer, indent, indentStep string) error

Dump - write box content with indentation to w

func (*SttgBox) Encode

func (s *SttgBox) Encode(w io.Writer) error

Encode - write box to w

func (*SttgBox) Size

func (s *SttgBox) Size() uint64

Size - calculated size of box

func (*SttgBox) Type

func (s *SttgBox) Type() string

Type - box-specific type

type SttsBox

type SttsBox struct {
	Version         byte
	Flags           uint32
	SampleCount     []uint32
	SampleTimeDelta []uint32
}

SttsBox - Decoding Time to Sample Box (stts - mandatory)

This table contains the duration in time units for each sample.

  • SampleCount : the number of consecutive samples having the same duration
  • SampleTimeDelta : duration in time units

func (*SttsBox) Dump

func (s *SttsBox) Dump(w io.Writer, indent, indentStep string) error

func (*SttsBox) Encode

func (b *SttsBox) Encode(w io.Writer) error

Encode - write box to w

func (*SttsBox) GetDecodeTime

func (b *SttsBox) GetDecodeTime(sampleNr uint32) (decTime uint64, dur uint32)

GetDecodeTime - decode time and duration for sampleNr in track timescale

func (*SttsBox) GetTimeCode

func (b *SttsBox) GetTimeCode(sample, timescale uint32) time.Duration

GetTimeCode - return the timecode (duration since the beginning of the media) of the beginning of a sample

func (*SttsBox) Size

func (b *SttsBox) Size() uint64

Size - return calculated size

func (*SttsBox) Type

func (b *SttsBox) Type() string

Type - return box type

type StypBox

type StypBox struct {
	MajorBrand       string
	MinorVersion     []byte
	CompatibleBrands []string
}

StypBox Segment Type Box (styp)

func (*StypBox) Dump

func (b *StypBox) Dump(w io.Writer, indent, indentStep string) error

func (*StypBox) Encode

func (b *StypBox) Encode(w io.Writer) error

Encode - write box to w

func (*StypBox) Size

func (b *StypBox) Size() uint64

Size - return calculated size

func (*StypBox) Type

func (b *StypBox) Type() string

Type - return box type

type SubSamplePattern

type SubSamplePattern struct {
	BytesOfClearData     uint16
	BytesOfProtectedData uint32
}

SubSamplePattern - pattern of subsample encryption

type SubsBox

type SubsBox struct {
	Version byte
	Flags   uint32
	Entries []SubsEntry
}

SubsBox - SubSampleInformationBox

func (*SubsBox) Dump

func (b *SubsBox) Dump(w io.Writer, indent, indentStep string) error

func (*SubsBox) Encode

func (b *SubsBox) Encode(w io.Writer) error

Encode - write box to w

func (*SubsBox) Size

func (b *SubsBox) Size() uint64

Size - return calculated size

func (*SubsBox) Type

func (b *SubsBox) Type() string

Type - return box type

type SubsEntry

type SubsEntry struct {
	SampleDelta uint32
	SubSamples  []SubsSample
}

SubsEntry - entry in SubsBox

type SubsSample

type SubsSample struct {
	SubsampleSize           uint32
	CodecSpecificParameters uint32
	SubsamplePriority       uint8
	Discardable             uint8
}

SubsSample - sample in SubsEntry

type TfdtBox

type TfdtBox struct {
	Version             byte
	Flags               uint32
	BaseMediaDecodeTime uint64
}

TfdtBox - Track Fragment Decode Time (tfdt)

Contained in : Track Fragment box (traf)

func CreateTfdt

func CreateTfdt(baseMediaDecodeTime uint64) *TfdtBox

CreateTfdt - Create a new TfdtBox with baseMediaDecodeTime

func (*TfdtBox) Dump

func (t *TfdtBox) Dump(w io.Writer, indent, indentStep string) error

func (*TfdtBox) Encode

func (t *TfdtBox) Encode(w io.Writer) error

Encode - write box to w

func (*TfdtBox) SetBaseMediaDecodeTime

func (t *TfdtBox) SetBaseMediaDecodeTime(bTime uint64)

SetBaseMediaDecodeTime - Set time of TfdtBox

func (*TfdtBox) Size

func (t *TfdtBox) Size() uint64

Size - return calculated size

func (*TfdtBox) Type

func (t *TfdtBox) Type() string

Type - return box type

type TfhdBox

type TfhdBox struct {
	Version                byte
	Flags                  uint32
	TrackID                uint32
	BaseDataOffset         uint64
	SampleDescriptionIndex uint32
	DefaultSampleDuration  uint32
	DefaultSampleSize      uint32
	DefaultSampleFlags     uint32
}

TfhdBox - Track Fragment Header Box (tfhd)

Contained in : Track Fragment box (traf))

func CreateTfhd

func CreateTfhd(trackID uint32) *TfhdBox

CreateTfhd - Create a new TfdtBox with baseMediaDecodeTime

func (*TfhdBox) DefaultBaseIfMoof

func (t *TfhdBox) DefaultBaseIfMoof() bool

DefaultBaseIfMoof - interpreted flags value

func (*TfhdBox) Dump

func (t *TfhdBox) Dump(w io.Writer, indent, indentStep string) error

func (*TfhdBox) DurationIsEmpty

func (t *TfhdBox) DurationIsEmpty() bool

DurationIsEmpty - interpreted flags value

func (*TfhdBox) Encode

func (t *TfhdBox) Encode(w io.Writer) error

Encode - write box to w

func (*TfhdBox) HasBaseDataOffset

func (t *TfhdBox) HasBaseDataOffset() bool

HasBaseDataOffset - interpreted flags value

func (*TfhdBox) HasDefaultSampleDuration

func (t *TfhdBox) HasDefaultSampleDuration() bool

HasDefaultSampleDuration - interpreted flags value

func (*TfhdBox) HasDefaultSampleFlags

func (t *TfhdBox) HasDefaultSampleFlags() bool

HasDefaultSampleFlags - interpreted flags value

func (*TfhdBox) HasDefaultSampleSize

func (t *TfhdBox) HasDefaultSampleSize() bool

HasDefaultSampleSize - interpreted flags value

func (*TfhdBox) HasSampleDescriptionIndex

func (t *TfhdBox) HasSampleDescriptionIndex() bool

HasSampleDescriptionIndex - interpreted flags value

func (*TfhdBox) Size

func (t *TfhdBox) Size() uint64

Size - returns calculated size

func (*TfhdBox) Type

func (t *TfhdBox) Type() string

Type - returns box type

type TfrfData

type TfrfData struct {
	Version                   byte
	Flags                     uint32
	FragmentCount             byte
	FragmentAbsoluteTimes     []uint64
	FragmentAbsoluteDurations []uint64
}

TfrfData - MSS TfrfBox data after UUID part Defined in MSS-SSTR v20180912 section 2.2.4.5

type TfxdData

type TfxdData struct {
	Version                  byte
	Flags                    uint32
	FragmentAbsoluteTime     uint64
	FragmentAbsoluteDuration uint64
}

TfxdData - MSS TfxdBox data after UUID part Defined in MSS-SSTR v20180912 section 2.2.4.4

type TkhdBox

type TkhdBox struct {
	Version          byte
	Flags            uint32
	CreationTime     uint64
	ModificationTime uint64
	TrackID          uint32
	Duration         uint64
	Layer            int16
	AlternateGroup   int16 // should be int16
	Volume           Fixed16
	Width, Height    Fixed32
}

TkhdBox - Track Header Box (tkhd - mandatory)

This box describes the track. Duration is measured in time units (according to the time scale defined in the movie header box). Duration is 0 for fragmented files.

Volume (relevant for audio tracks) is a fixed point number (8 bits + 8 bits). Full volume is 1.0. Width and Height (relevant for video tracks) are fixed point numbers (16 bits + 16 bits). Video pixels are not necessarily square.

func CreateTkhd

func CreateTkhd() *TkhdBox

CreateTkhd - create tkhd box with common settings

func (*TkhdBox) Dump

func (b *TkhdBox) Dump(w io.Writer, indent, indentStep string) error

func (*TkhdBox) Encode

func (b *TkhdBox) Encode(w io.Writer) error

Encode - write box to w

func (*TkhdBox) Size

func (b *TkhdBox) Size() uint64

Size - calculated size of box

func (*TkhdBox) Type

func (b *TkhdBox) Type() string

Type - box type

type TrafBox

type TrafBox struct {
	Tfhd     *TfhdBox
	Tfdt     *TfdtBox
	Trun     *TrunBox
	Children []Box
}

TrafBox - Track Fragment Box (traf)

Contained in : Movie Fragment Box (moof)

func (*TrafBox) AddChild

func (t *TrafBox) AddChild(b Box) error

AddChild - add child box

func (*TrafBox) Dump

func (t *TrafBox) Dump(w io.Writer, indent, indentStep string) error

func (*TrafBox) Encode

func (t *TrafBox) Encode(w io.Writer) error

Encode - write box to w

func (*TrafBox) GetChildren

func (t *TrafBox) GetChildren() []Box

GetChildren - list of child boxes

func (*TrafBox) OptimizeTfhdTrun

func (t *TrafBox) OptimizeTfhdTrun() error

OptimizeTfhdTrun - optimize trun by default values in tfhd box

func (*TrafBox) Size

func (t *TrafBox) Size() uint64

Size - return calculated size

func (*TrafBox) Type

func (t *TrafBox) Type() string

Type - return box type

type TrakBox

type TrakBox struct {
	Tkhd     *TkhdBox
	Mdia     *MdiaBox
	Edts     *EdtsBox
	Children []Box
}

TrakBox - Track Box (tkhd - mandatory)

Contained in : Movie Box (moov)

A media file can contain one or more tracks.

func NewTrakBox

func NewTrakBox() *TrakBox

NewTrakBox - Make a new empty TrakBox

func (*TrakBox) AddChild

func (t *TrakBox) AddChild(box Box)

AddChild - Add a child box

func (*TrakBox) Dump

func (t *TrakBox) Dump(w io.Writer, indent, indentStep string) error

func (*TrakBox) Encode

func (t *TrakBox) Encode(w io.Writer) error

Encode - write trak container to w

func (*TrakBox) GetChildren

func (t *TrakBox) GetChildren() []Box

GetChildren - list of child boxes

func (*TrakBox) SetAACDescriptor

func (t *TrakBox) SetAACDescriptor(objType byte, samplingFrequency int) error

SetAACDescriptor - Modify a TrakBox by adding AAC SampleDescriptor objType is one of AAClc, HEAACv1, HEAACv2 For HEAAC, the samplingFrequency is the base frequency (normally 24000)

func (*TrakBox) SetAVCDescriptor

func (t *TrakBox) SetAVCDescriptor(sampleDescriptorType string, spsNALU []byte, ppsNALUs [][]byte)

SetAVCDescriptor - Modify a TrakBox by adding AVC SampleDescriptor from one SPS and multiple PPS Get width and height from SPS and fill into tkhd box.

func (*TrakBox) Size

func (t *TrakBox) Size() uint64

Size - calculated size of box

func (*TrakBox) Type

func (t *TrakBox) Type() string

Type - box type

type TrexBox

type TrexBox struct {
	Version                       byte
	Flags                         uint32
	TrackID                       uint32
	DefaultSampleDescriptionIndex uint32
	DefaultSampleDuration         uint32
	DefaultSampleSize             uint32
	DefaultSampleFlags            uint32
}

TrexBox - Track Extends Box

Contained in : Mvex Box (mvex)

func CreateTrex

func CreateTrex() *TrexBox

CreateTrex - create trex box with good default parameters

func (*TrexBox) Dump

func (t *TrexBox) Dump(w io.Writer, indent, indentStep string) error

func (*TrexBox) Encode

func (t *TrexBox) Encode(w io.Writer) error

Encode - write box to w

func (*TrexBox) Size

func (t *TrexBox) Size() uint64

Size - return calculated size

func (*TrexBox) Type

func (t *TrexBox) Type() string

Type - return box type

type TrunBox

type TrunBox struct {
	Version byte

	DataOffset int32

	Samples []*Sample
	// contains filtered or unexported fields
}

TrunBox - Track Fragment Run Box (trun)

Contained in : Track Fragmnet Box (traf)

func CreateTrun

func CreateTrun() *TrunBox

CreateTrun - create a TrunBox for filling up with samples

func (*TrunBox) AddFullSample

func (t *TrunBox) AddFullSample(s *FullSample)

AddFullSample - add Sample part of FullSample

func (*TrunBox) AddSample

func (t *TrunBox) AddSample(s *Sample)

AddSample - add a Sample

func (*TrunBox) AddSampleDefaultValues

func (t *TrunBox) AddSampleDefaultValues(tfhd *TfhdBox, trex *TrexBox)

AddSampleDefaultValues - add values from tfhd and trex boxes if needed

func (*TrunBox) Dump

func (t *TrunBox) Dump(w io.Writer, indent, indentStep string) error

func (*TrunBox) Duration

func (t *TrunBox) Duration(defaultSampleDuration uint32) uint64

Duration - calculated duration given defaultSampleDuration

func (*TrunBox) Encode

func (t *TrunBox) Encode(w io.Writer) error

Encode - write box to w

func (*TrunBox) GetFullSamples

func (t *TrunBox) GetFullSamples(baseOffset uint32, baseTime uint64, mdat *MdatBox) []*FullSample

GetFullSamples - get all sample data including accumulated time and binary media baseOffset is offset in mdat (normally 8) baseTime is offset in track timescale (from mfhd) To fill missing individual values from thd and trex defaults, call AddSampleDefaultValues() before this call

func (*TrunBox) GetSamples

func (t *TrunBox) GetSamples() []*Sample

GetSamples - get all trun sample data To fill missing individual values from thd and trex defaults, call AddSampleDefaultValues() before this call

func (*TrunBox) HasDataOffset

func (t *TrunBox) HasDataOffset() bool

HasDataOffset - interpreted dataOffsetPresent flag

func (*TrunBox) HasFirstSampleFlags

func (t *TrunBox) HasFirstSampleFlags() bool

HasFirstSampleFlags - interpreted firstSampleFlagsPresent flag

func (*TrunBox) HasSampleCTO

func (t *TrunBox) HasSampleCTO() bool

HasSampleCTO - interpreted sampleCompositionTimeOffset flag

func (*TrunBox) HasSampleDuration

func (t *TrunBox) HasSampleDuration() bool

HasSampleDuration - interpreted sampleDurationPresent flag

func (*TrunBox) HasSampleFlags

func (t *TrunBox) HasSampleFlags() bool

HasSampleFlags - interpreted sampleFlagsPresent flag

func (*TrunBox) HasSampleSize

func (t *TrunBox) HasSampleSize() bool

HasSampleSize - interpreted sampleSizePresent flag

func (*TrunBox) SampleCount

func (t *TrunBox) SampleCount() uint32

SampleCount - return how many samples are defined

func (*TrunBox) Size

func (t *TrunBox) Size() uint64

Size - return calculated size

func (*TrunBox) Type

func (t *TrunBox) Type() string

Type - return box type

type URLBox

type URLBox struct {
	Version  byte
	Flags    uint32
	Location string // Zero-terminated string
}

URLBox - DataEntryUrlBox ('url ')

Contained in : DrefBox (dref

func CreateURLBox

func CreateURLBox() *URLBox

CreateURLBox - Create a self-referencing URL box

func (*URLBox) Dump

func (u *URLBox) Dump(w io.Writer, indent, indentStep string) error

func (*URLBox) Encode

func (u *URLBox) Encode(w io.Writer) error

Encode - write box to w

func (*URLBox) Size

func (u *URLBox) Size() uint64

Size - return calculated size

func (*URLBox) Type

func (u *URLBox) Type() string

Type - return box type

type UUIDBox

type UUIDBox struct {
	UUID    string // 16 bytes
	SubType string
	Tfxd    *TfxdData
	Tfrf    *TfrfData
}

UUIDBox - Used as container for MSS boxes tfxd and tfrf

func (*UUIDBox) Dump

func (u *UUIDBox) Dump(w io.Writer, indent, indentStep string) error

func (*UUIDBox) Encode

func (u *UUIDBox) Encode(w io.Writer) error

Encode - write UUIDBox including tfxd or tfrf to w

func (*UUIDBox) Size

func (u *UUIDBox) Size() uint64

Size - return calculated size including tfxd/tfrf

func (*UUIDBox) Type

func (u *UUIDBox) Type() string

Type - return box type

type UnknownBox

type UnknownBox struct {
	// contains filtered or unexported fields
}

UnknownBox - box that we don't know how to parse

func (*UnknownBox) Dump

func (b *UnknownBox) Dump(w io.Writer, indent, indentStep string) error

func (*UnknownBox) Encode

func (b *UnknownBox) Encode(w io.Writer) error

Encode - write box to w

func (*UnknownBox) Size

func (b *UnknownBox) Size() uint64

Size - return calculated size

func (*UnknownBox) Type

func (b *UnknownBox) Type() string

Type - return box type

type VisualSampleEntryBox

type VisualSampleEntryBox struct {
	DataReferenceIndex uint16
	Width              uint16
	Height             uint16
	Horizresolution    uint32
	Vertresolution     uint32
	FrameCount         uint16
	CompressorName     string
	AvcC               *AvcCBox
	Btrt               *BtrtBox
	Children           []Box
	// contains filtered or unexported fields
}

VisualSampleEntryBox - Video Sample Description box (avc1/avc3)

func CreateVisualSampleEntryBox

func CreateVisualSampleEntryBox(name string, width, height uint16, avcC *AvcCBox) *VisualSampleEntryBox

CreateVisualSampleEntryBox - Create new VisualSampleEntry box such as avc1, avc3

func NewVisualSampleEntryBox

func NewVisualSampleEntryBox(name string) *VisualSampleEntryBox

NewVisualSampleEntryBox - Create new empty avc1 or avc3 box

func (*VisualSampleEntryBox) AddChild

func (a *VisualSampleEntryBox) AddChild(b Box)

AddChild - add a child box (avcC normally, but clap and pasp could be part of visual entry)

func (*VisualSampleEntryBox) Dump

func (a *VisualSampleEntryBox) Dump(w io.Writer, indent, indentStep string) error

func (*VisualSampleEntryBox) Encode

func (a *VisualSampleEntryBox) Encode(w io.Writer) error

Encode - write box to w

func (*VisualSampleEntryBox) Size

func (a *VisualSampleEntryBox) Size() uint64

Size - return calculated size

func (*VisualSampleEntryBox) Type

func (a *VisualSampleEntryBox) Type() string

Type - return box type

type VlabBox

type VlabBox struct {
	SourceLabel string
}

VlabBox - WebVTTSourceLabelBox (vlab)

func (*VlabBox) Dump

func (v *VlabBox) Dump(w io.Writer, indent, indentStep string) error

Dump - write box content with indentation to w

func (*VlabBox) Encode

func (v *VlabBox) Encode(w io.Writer) error

Encode - write box to w

func (*VlabBox) Size

func (v *VlabBox) Size() uint64

Size - calculated size of box

func (*VlabBox) Type

func (v *VlabBox) Type() string

Type - box-specific type

type VmhdBox

type VmhdBox struct {
	Version      byte
	Flags        uint32
	GraphicsMode uint16
	OpColor      [3]uint16
}

VmhdBox - Video Media Header Box (vhmd - mandatory for video tracks)

Contained in : Media Information Box (minf)

func CreateVmhd

func CreateVmhd() *VmhdBox

CreateVmhd - Create Video Media Header Box

func (*VmhdBox) Dump

func (b *VmhdBox) Dump(w io.Writer, indent, indentStep string) error

func (*VmhdBox) Encode

func (b *VmhdBox) Encode(w io.Writer) error

Encode - write box to w

func (*VmhdBox) Size

func (b *VmhdBox) Size() uint64

Size - calculated size of box

func (*VmhdBox) Type

func (b *VmhdBox) Type() string

Type - box-specific type

type VsidBox

type VsidBox struct {
	SourceID uint32
}

VsidBox - CueSourceIDBox (iden)

func (*VsidBox) Dump

func (i *VsidBox) Dump(w io.Writer, indent, indentStep string) error

Dump - write box content with indentation to w

func (*VsidBox) Encode

func (v *VsidBox) Encode(w io.Writer) error

Encode - write box to w

func (*VsidBox) Size

func (v *VsidBox) Size() uint64

Size - calculated size of box

func (*VsidBox) Type

func (v *VsidBox) Type() string

Type - box-specific type

type VttCBox

type VttCBox struct {
	Config string
}

VttCBox - WebVTTConfigurationBox (vttC)

func (*VttCBox) Dump

func (v *VttCBox) Dump(w io.Writer, indent, indentStep string) error

Dump - write box content with indentation to w

func (*VttCBox) Encode

func (v *VttCBox) Encode(w io.Writer) error

Encode - write box to w

func (*VttCBox) Size

func (v *VttCBox) Size() uint64

Size - calculated size of box

func (*VttCBox) Type

func (v *VttCBox) Type() string

Type - box-specific type

type VttaBox

type VttaBox struct {
	CueAdditionalText string
}

VttaBox - VTTAdditionalTextBox (vtta) (corresponds to NOTE in WebVTT)

func (*VttaBox) Dump

func (v *VttaBox) Dump(w io.Writer, indent, indentStep string) error

Dump - write box content with indentation to w

func (*VttaBox) Encode

func (v *VttaBox) Encode(w io.Writer) error

Encode - write box to w

func (*VttaBox) Size

func (v *VttaBox) Size() uint64

Size - calculated size of box

func (*VttaBox) Type

func (v *VttaBox) Type() string

Type - box-specific type

type VttcBox

type VttcBox struct {
	Vsid     *VsidBox
	Iden     *IdenBox
	Ctim     *CtimBox
	Sttg     *SttgBox
	Payl     *PaylBox
	Children []Box
}

func (*VttcBox) AddChild

func (v *VttcBox) AddChild(box Box)

AddChild - Add a child box

func (*VttcBox) Dump

func (v *VttcBox) Dump(w io.Writer, indent, indentStep string) error

func (*VttcBox) Encode

func (v *VttcBox) Encode(w io.Writer) error

Encode - write mvex container to w

func (*VttcBox) GetChildren

func (v *VttcBox) GetChildren() []Box

GetChildren - list of child boxes

func (*VttcBox) Size

func (v *VttcBox) Size() uint64

Size - return calculated size

func (*VttcBox) Type

func (v *VttcBox) Type() string

Type - return box type

type VtteBox

type VtteBox struct {
}

VtteBox - VTTEmptyBox (vtte)

func (*VtteBox) Dump

func (v *VtteBox) Dump(w io.Writer, indent, indentStep string) error

Dump - write box content with indentation to w

func (*VtteBox) Encode

func (v *VtteBox) Encode(w io.Writer) error

Encode - write box to w

func (*VtteBox) Size

func (v *VtteBox) Size() uint64

Size - calculated size of box

func (*VtteBox) Type

func (v *VtteBox) Type() string

Type - box-specific type

type WvttBox

type WvttBox struct {
	VttC               *VttCBox
	Vlab               *VlabBox
	Btrt               *BtrtBox
	Children           []Box
	DataReferenceIndex uint16
}

WvttBox - WVTTSampleEntry (wvtt) Extends PlainTextSampleEntry which extends SampleEntry

func NewWvttBox

func NewWvttBox() *WvttBox

NewAudioSampleEntryBox - Create new empty mp4a box

func (*WvttBox) AddChild

func (w *WvttBox) AddChild(box Box)

AddChild - add a child box (avcC normally, but clap and pasp could be part of visual entry)

func (*WvttBox) Dump

func (a *WvttBox) Dump(w io.Writer, indent, indentStep string) error

func (*WvttBox) Encode

func (a *WvttBox) Encode(w io.Writer) error

Encode - write box to w

func (*WvttBox) Size

func (a *WvttBox) Size() uint64

Size - return calculated size

func (*WvttBox) Type

func (a *WvttBox) Type() string

Type - return box type

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL