mp4

package module
v1.0.7 Latest Latest
Warning

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

Go to latest
Published: Dec 10, 2023 License: MIT Imports: 8 Imported by: 0

README

mp4

And, in the dream, I knew that he was, going on ahead. He was fixin' to make a fire somewhere out there in all that dark and cold. And I knew that whenever I got there, he'd be there. And then I woke up.

No Country for Old Men (2007)

library for reading and writing MP4

prior art

  1. https://github.com/mozilla/mp4parse-rust/issues/415
  2. https://github.com/Eyevinn/mp4ff/issues/298
  3. https://github.com/alfg/mp4-rust/issues/132
  4. https://github.com/alfg/mp4/issues/27
  5. https://github.com/abema/go-mp4/issues/13
  6. https://github.com/garden4hu/fmp4parser-go/issues/4
  7. https://github.com/eswarantg/mp4box/issues/3
  8. https://github.com/miquels/mp4/issues/2
  9. https://github.com/oikomi/gomp4/issues/2
  10. https://github.com/hr3lxphr6j/mp4-go/issues/1
  11. https://github.com/lomavkin/mp4rs/issues/1
  12. https://github.com/mshafiee/mp4/issues/1
  13. https://github.com/streamer45/libmp4-go/issues/1

the normal place to put the encryption information in the segments is in a senc box, and this is not the case in this file, but they seem to be placed in a [uuid] box instead. This is allowed, but not supported by mp4ff library at the moment. In principle the data can be put in any place given by the offset in the saio box

and:

If the Override TrackEncryptionBox parameters flag is set, then the SampleEncryptionBox specifies the AlgorithmID, IV_size, and KID parameters. If not present, then the default values from the TrackEncryptionBox SHOULD be used for this fragment.

amc

[moov] size=1937
  [trak] size=565
    [mdia] size=465
      [minf] size=372
        [stbl] size=308
          [stsd] size=232 version=0 flags=000000
            [encv] size=216
             - width: 384
             - height: 216
             - compressorName: ""
              [sinf] size=80
                [schi] size=40
                  [tenc] size=32 version=0 flags=000000
                   - defaultIsProtected: 1
                   - defaultPerSampleIVSize: 8
                   - defaultKID: 5c222a3e-2cfb-4b86-9773-ea680f1f3363
[moof] size=6665
  [traf] size=6641
    [saio] size=20 version=0 flags=000000
     - sampleCount: 1
     - offset[1]=2025
    [senc] size=2320 version=0 flags=000002
     - sampleCount: 144
     - perSampleIVSize: 8
    [uuid] size=2336
     - uuid: a2394f52-5a9b-4f14-a244-6c427c648df4
     - subType: unknown

hulu

[moov] size=1502
  [trak] size=584
    [mdia] size=472
      [minf] size=375
        [stbl] size=311
          [stsd] size=235 version=0 flags=000000
            [encv] size=219
             - width: 512
             - height: 288
             - compressorName: ""
              [sinf] size=80
                [schi] size=40
                  [tenc] size=32 version=0 flags=000000
                   - defaultIsProtected: 1
                   - defaultPerSampleIVSize: 8
                   - defaultKID: 21b82dc2-ebb2-4d5a-a9f8-631f04726650
[moof] size=3641
  [traf] size=3617
    [uuid] size=1952
     - uuid: a2394f52-5a9b-4f14-a244-6c427c648df4
     - subType: unknown
    [saio] size=20 version=0 flags=000000
     - sampleCount: 1
     - offset[1]=1564

nbc

[moov] size=1819
  [trak] size=582
    [mdia] size=482
      [minf] size=389
        [stbl] size=325
          [stsd] size=249 version=0 flags=000000
            [encv] size=233
             - width: 512
             - height: 288
             - compressorName: ""
              [sinf] size=80
                [schi] size=40
                  [tenc] size=32 version=0 flags=000000
                   - defaultIsProtected: 1
                   - defaultPerSampleIVSize: 8
                   - defaultKID: 0f8f0b8a-ff43-4541-8a1e-72162017884e
[moof] size=1889
  [traf] size=1865
    [saio] size=20 version=0 flags=000000
     - sampleCount: 1
     - offset[1]=929
    [senc] size=976 version=0 flags=000002
     - sampleCount: 60
     - perSampleIVSize: 8

paramount

[moov] size=1866
  [trak] size=598
    [mdia] size=462
      [minf] size=377
        [stbl] size=313
          [stsd] size=237 version=0 flags=000000
            [encv] size=221
             - width: 416
             - height: 234
             - compressorName: "AVC Coding"
              [sinf] size=80
                [schi] size=40
                  [tenc] size=32 version=0 flags=000000
                   - defaultIsProtected: 1
                   - defaultPerSampleIVSize: 8
                   - defaultKID: bf9eeb01-706e-4067-ac06-3e15c3ba38d0
[moof] size=4177
  [traf] size=4153
    [saio] size=20 version=0 flags=000000
     - sampleCount: 1
     - offset[1]=1873
    [senc] size=2320 version=0 flags=000002
     - sampleCount: 144
     - perSampleIVSize: 8

roku

[moov] size=1484
  [trak] size=600
    [mdia] size=500
      [minf] size=400
        [stbl] size=336
          [stsd] size=260 version=0 flags=000000
            [encv] size=244
             - width: 384
             - height: 216
             - compressorName: "Elemental H.264"
              [sinf] size=80
                [schi] size=40
                  [tenc] size=32 version=0 flags=000000
                   - defaultIsProtected: 1
                   - defaultPerSampleIVSize: 8
                   - defaultKID: bdfa4d6c-db39-702e-5b68-1f90617f9a7e
[moof] size=2574
  [traf] size=1849
    [senc] size=1072 version=0 flags=000002
     - sampleCount: 48
     - perSampleIVSize: 8
    [saio] size=32 version=1 flags=000001
     - auxInfoType: cenc
     - auxInfoTypeParameter: 0
     - sampleCount: 1
     - offset[1]=1389

Documentation

Index

Constants

View Source
const (
	BasicBoxLen = 8
	FullBoxLen  = 12
)
View Source
const (
	TF_FLAG_BASE_DATA_OFFSET                 uint32 = 0x000001
	TF_FLAG_SAMPLE_DESCRIPTION_INDEX_PRESENT uint32 = 0x000002
	TF_FLAG_DEFAULT_SAMPLE_DURATION_PRESENT  uint32 = 0x000008
	TF_FLAG_DEFAULT_SAMPLE_SIZE_PRESENT      uint32 = 0x000010
	TF_FLAG_DEAAULT_SAMPLE_FLAGS_PRESENT     uint32 = 0x000020
	TF_FLAG_DURATION_IS_EMPTY                uint32 = 0x010000
	TF_FLAG_DEAAULT_BASE_IS_MOOF             uint32 = 0x020000

	//ffmpeg isom.h
	MOV_FRAG_SAMPLE_FLAG_DEGRADATION_PRIORITY_MASK uint32 = 0x0000ffff
	MOV_FRAG_SAMPLE_FLAG_IS_NON_SYNC               uint32 = 0x00010000
	MOV_FRAG_SAMPLE_FLAG_PADDING_MASK              uint32 = 0x000e0000
	MOV_FRAG_SAMPLE_FLAG_REDUNDANCY_MASK           uint32 = 0x00300000
	MOV_FRAG_SAMPLE_FLAG_DEPENDED_MASK             uint32 = 0x00c00000
	MOV_FRAG_SAMPLE_FLAG_DEPENDS_MASK              uint32 = 0x03000000

	MOV_FRAG_SAMPLE_FLAG_DEPENDS_NO  uint32 = 0x02000000
	MOV_FRAG_SAMPLE_FLAG_DEPENDS_YES uint32 = 0x01000000
)
View Source
const (
	TR_FLAG_DATA_OFFSET                  uint32 = 0x000001
	TR_FLAG_DATA_FIRST_SAMPLE_FLAGS      uint32 = 0x000004
	TR_FLAG_DATA_SAMPLE_DURATION         uint32 = 0x000100
	TR_FLAG_DATA_SAMPLE_SIZE             uint32 = 0x000200
	TR_FLAG_DATA_SAMPLE_FLAGS            uint32 = 0x000400
	TR_FLAG_DATA_SAMPLE_COMPOSITION_TIME uint32 = 0x000800
)
View Source
const (
	UseSubsampleEncryption uint32 = 0x000002
)

Variables

This section is empty.

Functions

This section is empty.

Types

type AVPacket added in v1.0.7

type AVPacket struct {
	Cid     MP4_CODEC_TYPE
	Data    []byte
	TrackId int
	Pts     uint64
	Dts     uint64
}

type AudioSampleEntry

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

func NewAudioSampleEntry added in v1.0.7

func NewAudioSampleEntry(format [4]byte) *AudioSampleEntry

func (*AudioSampleEntry) Decode added in v1.0.7

func (entry *AudioSampleEntry) Decode(r io.Reader) (offset int, err error)

func (*AudioSampleEntry) Encode added in v1.0.7

func (entry *AudioSampleEntry) Encode() (int, []byte)

func (*AudioSampleEntry) Size added in v1.0.7

func (entry *AudioSampleEntry) Size() uint64

type BaseDescriptor added in v1.0.7

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

func (*BaseDescriptor) Decode added in v1.0.7

func (base *BaseDescriptor) Decode(data []byte) *codec.BitStream

func (*BaseDescriptor) Encode added in v1.0.7

func (base *BaseDescriptor) Encode() []byte

type BasicBox added in v1.0.7

type BasicBox struct {
	Size     uint64
	Type     [4]byte
	UserType [16]byte
}

func NewBasicBox added in v1.0.7

func NewBasicBox(boxtype [4]byte) *BasicBox

func (*BasicBox) Decode added in v1.0.7

func (box *BasicBox) Decode(r io.Reader) (int, error)

func (*BasicBox) Encode added in v1.0.7

func (box *BasicBox) Encode() (int, []byte)

type BoxDecoder added in v1.0.7

type BoxDecoder interface {
	Decode(buf []byte) (int, error)
}

type BoxEncoder added in v1.0.7

type BoxEncoder interface {
	Encode(buf []byte) (int, []byte)
}

type BoxSize added in v1.0.7

type BoxSize interface {
	Size() uint64
}

type ChannelMappingTable added in v1.0.7

type ChannelMappingTable struct {
	StreamCount    uint8
	CoupledCount   uint8
	ChannelMapping []byte
}

type ChunkLargeOffsetBox added in v1.0.7

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

func NewChunkLargeOffsetBox added in v1.0.7

func NewChunkLargeOffsetBox() *ChunkLargeOffsetBox

func (*ChunkLargeOffsetBox) Decode added in v1.0.7

func (co64 *ChunkLargeOffsetBox) Decode(r io.Reader) (offset int, err error)

func (*ChunkLargeOffsetBox) Encode added in v1.0.7

func (co64 *ChunkLargeOffsetBox) Encode() (int, []byte)

func (*ChunkLargeOffsetBox) Size added in v1.0.7

func (co64 *ChunkLargeOffsetBox) Size() uint64

type ChunkOffsetBox added in v1.0.7

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

func NewChunkOffsetBox added in v1.0.7

func NewChunkOffsetBox() *ChunkOffsetBox

func (*ChunkOffsetBox) Decode added in v1.0.7

func (stco *ChunkOffsetBox) Decode(r io.Reader) (offset int, err error)

func (*ChunkOffsetBox) Encode added in v1.0.7

func (stco *ChunkOffsetBox) Encode() (int, []byte)

func (*ChunkOffsetBox) Size added in v1.0.7

func (stco *ChunkOffsetBox) Size() uint64

type CompositionOffsetBox added in v1.0.7

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

func NewCompositionOffsetBox added in v1.0.7

func NewCompositionOffsetBox() *CompositionOffsetBox

func (*CompositionOffsetBox) Decode added in v1.0.7

func (ctts *CompositionOffsetBox) Decode(r io.Reader) (offset int, err error)

func (*CompositionOffsetBox) Encode added in v1.0.7

func (ctts *CompositionOffsetBox) Encode() (int, []byte)

func (*CompositionOffsetBox) Size added in v1.0.7

func (ctts *CompositionOffsetBox) Size() uint64

type EditListBox added in v1.0.7

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

func NewEditListBox added in v1.0.7

func NewEditListBox(version uint32) *EditListBox

func (*EditListBox) Decode added in v1.0.7

func (elst *EditListBox) Decode(r io.Reader) (offset int, err error)

func (*EditListBox) Encode added in v1.0.7

func (elst *EditListBox) Encode() (int, []byte)

type FileTypeBox added in v1.0.7

type FileTypeBox struct {
	Box               *BasicBox
	Major_brand       uint32
	Minor_version     uint32
	Compatible_brands []uint32
}

func NewFileTypeBox added in v1.0.7

func NewFileTypeBox() *FileTypeBox

func NewSegmentTypeBox added in v1.0.7

func NewSegmentTypeBox() *FileTypeBox

func (*FileTypeBox) Encode added in v1.0.7

func (ftyp *FileTypeBox) Encode() (int, []byte)

func (*FileTypeBox) Size added in v1.0.7

func (ftyp *FileTypeBox) Size() uint64

type FreeBox added in v1.0.7

type FreeBox struct {
	Box  BasicBox
	Data []byte
}

func NewFreeBox added in v1.0.7

func NewFreeBox() *FreeBox

func (*FreeBox) Decode added in v1.0.7

func (free *FreeBox) Decode(r io.Reader) (int, error)

func (*FreeBox) Encode added in v1.0.7

func (free *FreeBox) Encode() (int, []byte)

func (*FreeBox) Size added in v1.0.7

func (free *FreeBox) Size() uint64

type FullBox

type FullBox struct {
	Box     *BasicBox
	Version uint8
	Flags   [3]byte
}

func NewFullBox added in v1.0.7

func NewFullBox(boxtype [4]byte, version uint8) *FullBox

func (*FullBox) Decode added in v1.0.7

func (box *FullBox) Decode(r io.Reader) (int, error)

func (*FullBox) Encode added in v1.0.7

func (box *FullBox) Encode() (int, []byte)

func (*FullBox) Size added in v1.0.7

func (box *FullBox) Size() uint64

type HandlerBox added in v1.0.7

type HandlerBox struct {
	Box          *FullBox
	Handler_type HandlerType
	Name         string
}

func NewHandlerBox added in v1.0.7

func NewHandlerBox(handlerType HandlerType, name string) *HandlerBox

func (*HandlerBox) Decode added in v1.0.7

func (hdlr *HandlerBox) Decode(r io.Reader, size uint64) (offset int, err error)

func (*HandlerBox) Encode added in v1.0.7

func (hdlr *HandlerBox) Encode() (int, []byte)

func (*HandlerBox) Size added in v1.0.7

func (hdlr *HandlerBox) Size() uint64

type HandlerType added in v1.0.7

type HandlerType [4]byte

type HintMediaHeaderBox added in v1.0.7

type HintMediaHeaderBox struct {
	Box        *FullBox
	MaxPDUsize uint16
	AvgPDUsize uint16
	Maxbitrate uint32
	Avgbitrate uint32
}

func NewHintMediaHeaderBox added in v1.0.7

func NewHintMediaHeaderBox() *HintMediaHeaderBox

func (*HintMediaHeaderBox) Decode added in v1.0.7

func (hmhd *HintMediaHeaderBox) Decode(r io.Reader) (offset int, err error)

func (*HintMediaHeaderBox) Encode added in v1.0.7

func (hmhd *HintMediaHeaderBox) Encode() (int, []byte)

func (*HintMediaHeaderBox) Size added in v1.0.7

func (hmhd *HintMediaHeaderBox) Size() uint64

type HintSampleEntry added in v1.0.7

type HintSampleEntry struct {
	Entry *SampleEntry
	Data  byte
}

type MP4_CODEC_TYPE added in v1.0.7

type MP4_CODEC_TYPE int
const (
	MP4_CODEC_H264 MP4_CODEC_TYPE = iota + 1
	MP4_CODEC_H265

	MP4_CODEC_AAC MP4_CODEC_TYPE = iota + 100
	MP4_CODEC_G711A
	MP4_CODEC_G711U
	MP4_CODEC_MP2
	MP4_CODEC_MP3
	MP4_CODEC_OPUS
)

type MP4_FLAG added in v1.0.7

type MP4_FLAG uint32
const (
	MP4_FLAG_FRAGMENT MP4_FLAG = (1 << 1)
	MP4_FLAG_KEYFRAME MP4_FLAG = (1 << 3)
	MP4_FLAG_CUSTOM   MP4_FLAG = (1 << 5)
	MP4_FLAG_DASH     MP4_FLAG = (1 << 11)
)

ffmpeg movenc.h

type MediaHeaderBox added in v1.0.7

type MediaHeaderBox struct {
	Box               *FullBox
	Creation_time     uint64
	Modification_time uint64
	Timescale         uint32
	Duration          uint64
	Pad               uint8
	Language          [3]uint8
	Pre_defined       uint16
}

func NewMediaHeaderBox added in v1.0.7

func NewMediaHeaderBox() *MediaHeaderBox

func (*MediaHeaderBox) Decode added in v1.0.7

func (mdhd *MediaHeaderBox) Decode(r io.Reader) (offset int, err error)

func (*MediaHeaderBox) Encode added in v1.0.7

func (mdhd *MediaHeaderBox) Encode() (int, []byte)

func (*MediaHeaderBox) Size added in v1.0.7

func (mdhd *MediaHeaderBox) Size() uint64

type MovDemuxer added in v1.0.7

type MovDemuxer struct {
	OnRawSample func(cid MP4_CODEC_TYPE, sample []byte, subSample *SubSample) error
	// contains filtered or unexported fields
}

func CreateMp4Demuxer added in v1.0.7

func CreateMp4Demuxer(r io.ReadSeeker) *MovDemuxer

func (*MovDemuxer) GetMp4Info added in v1.0.7

func (demuxer *MovDemuxer) GetMp4Info() Mp4Info

func (*MovDemuxer) GetSyncTable added in v1.0.7

func (demuxer *MovDemuxer) GetSyncTable(trackId uint32) ([]SyncSample, error)

func (*MovDemuxer) ReadHead added in v1.0.7

func (demuxer *MovDemuxer) ReadHead() ([]TrackInfo, error)

func (*MovDemuxer) ReadPacket added in v1.0.7

func (demuxer *MovDemuxer) ReadPacket() (*AVPacket, error)

/return error == io.EOF, means read mp4 file completed

func (*MovDemuxer) SeekTime added in v1.0.7

func (demuxer *MovDemuxer) SeekTime(dts uint64) error

type MovieFragmentHeaderBox added in v1.0.7

type MovieFragmentHeaderBox struct {
	Box            *FullBox
	SequenceNumber uint32
}

func NewMovieFragmentHeaderBox added in v1.0.7

func NewMovieFragmentHeaderBox(sequence uint32) *MovieFragmentHeaderBox

func (*MovieFragmentHeaderBox) Decode added in v1.0.7

func (mfhd *MovieFragmentHeaderBox) Decode(r io.Reader) (offset int, err error)

func (*MovieFragmentHeaderBox) Encode added in v1.0.7

func (mfhd *MovieFragmentHeaderBox) Encode() (int, []byte)

func (*MovieFragmentHeaderBox) Size added in v1.0.7

func (mfhd *MovieFragmentHeaderBox) Size() uint64

type MovieFragmentRandomAccessOffsetBox added in v1.0.7

type MovieFragmentRandomAccessOffsetBox struct {
	Box        *FullBox
	SizeOfMfra uint32
}

func NewMovieFragmentRandomAccessOffsetBox added in v1.0.7

func NewMovieFragmentRandomAccessOffsetBox(size uint32) *MovieFragmentRandomAccessOffsetBox

func (*MovieFragmentRandomAccessOffsetBox) Decode added in v1.0.7

func (mfro *MovieFragmentRandomAccessOffsetBox) Decode(r io.Reader) (offset int, err error)

func (*MovieFragmentRandomAccessOffsetBox) Encode added in v1.0.7

func (mfro *MovieFragmentRandomAccessOffsetBox) Encode() (int, []byte)

func (*MovieFragmentRandomAccessOffsetBox) Size added in v1.0.7

type MovieHeaderBox added in v1.0.7

type MovieHeaderBox struct {
	Box               *FullBox
	Creation_time     uint64
	Modification_time uint64
	Timescale         uint32
	Duration          uint64
	Rate              uint32
	Volume            uint16
	Matrix            [9]uint32
	Pre_defined       [6]uint32
	Next_track_ID     uint32
}

func NewMovieHeaderBox added in v1.0.7

func NewMovieHeaderBox() *MovieHeaderBox

func (*MovieHeaderBox) Decode added in v1.0.7

func (mvhd *MovieHeaderBox) Decode(r io.Reader) (offset int, err error)

func (*MovieHeaderBox) Encode added in v1.0.7

func (mvhd *MovieHeaderBox) Encode() (int, []byte)

func (*MovieHeaderBox) Size added in v1.0.7

func (mvhd *MovieHeaderBox) Size() uint64

type Movmuxer added in v1.0.7

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

func CreateMp4Muxer added in v1.0.7

func CreateMp4Muxer(w io.WriteSeeker, options ...MuxerOption) (*Movmuxer, error)

func (*Movmuxer) AddAudioTrack added in v1.0.7

func (muxer *Movmuxer) AddAudioTrack(cid MP4_CODEC_TYPE, options ...TrackOption) uint32

func (*Movmuxer) AddVideoTrack added in v1.0.7

func (muxer *Movmuxer) AddVideoTrack(cid MP4_CODEC_TYPE, options ...TrackOption) uint32

func (*Movmuxer) FlushFragment added in v1.0.7

func (muxer *Movmuxer) FlushFragment() (err error)

func (*Movmuxer) OnNewFragment added in v1.0.7

func (muxer *Movmuxer) OnNewFragment(onFragment OnFragment)

func (*Movmuxer) ReBindWriter added in v1.0.7

func (muxer *Movmuxer) ReBindWriter(w io.WriteSeeker)

func (*Movmuxer) Write added in v1.0.7

func (muxer *Movmuxer) Write(track uint32, data []byte, pts uint64, dts uint64) error

func (*Movmuxer) WriteInitSegment added in v1.0.7

func (muxer *Movmuxer) WriteInitSegment(w io.Writer) error

func (*Movmuxer) WriteTrailer added in v1.0.7

func (muxer *Movmuxer) WriteTrailer() (err error)

type Mp4Info added in v1.0.7

type Mp4Info struct {
	MajorBrand       uint32
	MinorVersion     uint32
	CompatibleBrands []uint32
	Duration         uint32
	Timescale        uint32
	CreateTime       uint64
	ModifyTime       uint64
}

type MuxerOption added in v1.0.7

type MuxerOption func(muxer *Movmuxer)

func WithMp4Flag added in v1.0.7

func WithMp4Flag(f MP4_FLAG) MuxerOption

type OnFragment added in v1.0.7

type OnFragment func(duration uint32, firstPts, firstDts uint64)

type OpusSpecificBox added in v1.0.7

type OpusSpecificBox struct {
	Box                *BasicBox
	Version            uint8
	OutputChannelCount uint8
	PreSkip            uint16
	InputSampleRate    uint32
	OutputGain         int16
	ChanMapTable       *ChannelMappingTable
}

func NewdOpsBox added in v1.0.7

func NewdOpsBox() *OpusSpecificBox

func (*OpusSpecificBox) Decode added in v1.0.7

func (dops *OpusSpecificBox) Decode(r io.Reader, size uint32) (offset int, err error)

func (*OpusSpecificBox) Encode added in v1.0.7

func (dops *OpusSpecificBox) Encode() (int, []byte)

func (*OpusSpecificBox) Size added in v1.0.7

func (dops *OpusSpecificBox) Size() uint64

type SampleDescriptionBox added in v1.0.7

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

func NewSampleDescriptionBox added in v1.0.7

func NewSampleDescriptionBox() *SampleDescriptionBox

func (*SampleDescriptionBox) Decode added in v1.0.7

func (stsd *SampleDescriptionBox) Decode(r io.Reader) (offset int, err error)

func (*SampleDescriptionBox) Encode added in v1.0.7

func (entry *SampleDescriptionBox) Encode() (int, []byte)

func (*SampleDescriptionBox) Size added in v1.0.7

func (stsd *SampleDescriptionBox) Size() uint64

type SampleEntry

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

func NewSampleEntry added in v1.0.7

func NewSampleEntry(format [4]byte) *SampleEntry

func (*SampleEntry) Decode added in v1.0.7

func (entry *SampleEntry) Decode(r io.Reader) (offset int, err error)

func (*SampleEntry) Encode added in v1.0.7

func (entry *SampleEntry) Encode() (int, []byte)

func (*SampleEntry) Size added in v1.0.7

func (entry *SampleEntry) Size() uint64

type SampleEntryType added in v1.0.7

type SampleEntryType uint8
const (
	SAMPLE_AUDIO SampleEntryType = iota
	SAMPLE_VIDEO
)

type SampleSizeBox added in v1.0.7

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

func NewSampleSizeBox added in v1.0.7

func NewSampleSizeBox() *SampleSizeBox

func (*SampleSizeBox) Decode added in v1.0.7

func (stsz *SampleSizeBox) Decode(r io.Reader) (offset int, err error)

func (*SampleSizeBox) Encode added in v1.0.7

func (stsz *SampleSizeBox) Encode() (int, []byte)

func (*SampleSizeBox) Size added in v1.0.7

func (stsz *SampleSizeBox) Size() uint64

type SampleToChunkBox added in v1.0.7

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

func NewSampleToChunkBox added in v1.0.7

func NewSampleToChunkBox() *SampleToChunkBox

func (*SampleToChunkBox) Decode added in v1.0.7

func (stsc *SampleToChunkBox) Decode(r io.Reader) (offset int, err error)

func (*SampleToChunkBox) Encode added in v1.0.7

func (stsc *SampleToChunkBox) Encode() (int, []byte)

func (*SampleToChunkBox) Size added in v1.0.7

func (stsc *SampleToChunkBox) Size() uint64

type SegmentIndexBox added in v1.0.7

type SegmentIndexBox struct {
	Box                      *FullBox
	ReferenceID              uint32
	TimeScale                uint32
	EarliestPresentationTime uint64
	FirstOffset              uint64
	ReferenceCount           uint16
	Entrys                   []sidxEntry
}

func NewSegmentIndexBox added in v1.0.7

func NewSegmentIndexBox() *SegmentIndexBox

func (*SegmentIndexBox) Decode added in v1.0.7

func (sidx *SegmentIndexBox) Decode(r io.Reader) (offset int, err error)

func (*SegmentIndexBox) Encode added in v1.0.7

func (sidx *SegmentIndexBox) Encode() (int, []byte)

func (*SegmentIndexBox) Size added in v1.0.7

func (sidx *SegmentIndexBox) Size() uint64

type SencBox added in v1.0.7

type SencBox struct {
	Box             *FullBox
	SampleCount     uint32
	PerSampleIVSize uint32
	EntryList       *movsenc
}

SencBox - Sample Encryption Box (senc) (in trak or traf box) See ISO/IEC 23001-7 Section 7.2 and CMAF specification Full Box + SampleCount

func (*SencBox) Decode added in v1.0.7

func (senc *SencBox) Decode(r io.Reader, size uint32, perSampleIVSize uint8) (offset int, err error)

type SoundMediaHeaderBox added in v1.0.7

type SoundMediaHeaderBox struct {
	Box     *FullBox
	Balance int16
}

func NewSoundMediaHeaderBox added in v1.0.7

func NewSoundMediaHeaderBox() *SoundMediaHeaderBox

func (*SoundMediaHeaderBox) Decode added in v1.0.7

func (smhd *SoundMediaHeaderBox) Decode(r io.Reader) (offset int, err error)

func (*SoundMediaHeaderBox) Encode added in v1.0.7

func (smhd *SoundMediaHeaderBox) Encode() (int, []byte)

func (*SoundMediaHeaderBox) Size added in v1.0.7

func (smhd *SoundMediaHeaderBox) Size() uint64

type SubSample added in v1.0.7

type SubSample struct {
	DefaultKID            [16]byte
	IV                    [16]byte
	Patterns              []SubSamplePattern
	Number                uint32
	DefaultCryptByteBlock uint8
	DefaultSkipByteBlock  uint8
}

type SubSamplePattern added in v1.0.7

type SubSamplePattern struct {
	BytesClear     uint16
	BytesProtected uint32
}

type SyncSample added in v1.0.7

type SyncSample struct {
	Pts    uint64
	Dts    uint64
	Size   uint32
	Offset uint32
}

type SyncSampleBox added in v1.0.7

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

func NewSyncSampleBox added in v1.0.7

func NewSyncSampleBox() *SyncSampleBox

func (*SyncSampleBox) Decode added in v1.0.7

func (stss *SyncSampleBox) Decode(r io.Reader) (offset int, err error)

func (*SyncSampleBox) Encode added in v1.0.7

func (stss *SyncSampleBox) Encode() (int, []byte)

func (*SyncSampleBox) Size added in v1.0.7

func (stss *SyncSampleBox) Size() uint64

type TimeToSampleBox added in v1.0.7

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

func NewTimeToSampleBox added in v1.0.7

func NewTimeToSampleBox() *TimeToSampleBox

func (*TimeToSampleBox) Decode added in v1.0.7

func (stts *TimeToSampleBox) Decode(r io.Reader) (offset int, err error)

func (*TimeToSampleBox) Encode added in v1.0.7

func (stts *TimeToSampleBox) Encode() (int, []byte)

func (*TimeToSampleBox) Size added in v1.0.7

func (stts *TimeToSampleBox) Size() uint64

type TrackExtendsBox added in v1.0.7

type TrackExtendsBox struct {
	Box                           *FullBox
	TrackID                       uint32
	DefaultSampleDescriptionIndex uint32
	DefaultSampleDuration         uint32
	DefaultSampleSize             uint32
	DefaultSampleFlags            uint32
}

func NewTrackExtendsBox added in v1.0.7

func NewTrackExtendsBox(track uint32) *TrackExtendsBox

func (*TrackExtendsBox) Decode added in v1.0.7

func (trex *TrackExtendsBox) Decode(r io.Reader) (offset int, err error)

func (*TrackExtendsBox) Encode added in v1.0.7

func (trex *TrackExtendsBox) Encode() (int, []byte)

func (*TrackExtendsBox) Size added in v1.0.7

func (trex *TrackExtendsBox) Size() uint64

type TrackFragmentBaseMediaDecodeTimeBox added in v1.0.7

type TrackFragmentBaseMediaDecodeTimeBox struct {
	Box                 *FullBox
	BaseMediaDecodeTime uint64
}

func NewTrackFragmentBaseMediaDecodeTimeBox added in v1.0.7

func NewTrackFragmentBaseMediaDecodeTimeBox(fragStart uint64) *TrackFragmentBaseMediaDecodeTimeBox

func (*TrackFragmentBaseMediaDecodeTimeBox) Decode added in v1.0.7

func (tfdt *TrackFragmentBaseMediaDecodeTimeBox) Decode(r io.Reader, size uint32) (offset int, err error)

func (*TrackFragmentBaseMediaDecodeTimeBox) Encode added in v1.0.7

func (tfdt *TrackFragmentBaseMediaDecodeTimeBox) Encode() (int, []byte)

func (*TrackFragmentBaseMediaDecodeTimeBox) Size added in v1.0.7

type TrackFragmentHeaderBox added in v1.0.7

type TrackFragmentHeaderBox struct {
	Box                    *FullBox
	Track_ID               uint32
	BaseDataOffset         uint64
	SampleDescriptionIndex uint32
	DefaultSampleDuration  uint32
	DefaultSampleSize      uint32
	DefaultSampleFlags     uint32
}

func NewTrackFragmentHeaderBox added in v1.0.7

func NewTrackFragmentHeaderBox(trackid uint32) *TrackFragmentHeaderBox

func (*TrackFragmentHeaderBox) Decode added in v1.0.7

func (tfhd *TrackFragmentHeaderBox) Decode(r io.Reader, size uint32, moofOffset uint64) (offset int, err error)

func (*TrackFragmentHeaderBox) Encode added in v1.0.7

func (tfhd *TrackFragmentHeaderBox) Encode() (int, []byte)

func (*TrackFragmentHeaderBox) Size added in v1.0.7

func (tfhd *TrackFragmentHeaderBox) Size() uint64

type TrackFragmentRandomAccessBox added in v1.0.7

type TrackFragmentRandomAccessBox struct {
	Box                   *FullBox
	TrackID               uint32
	LengthSizeOfTrafNum   uint8
	LengthSizeOfTrunNum   uint8
	LengthSizeOfSampleNum uint8
	NumberOfEntry         uint32
	FragEntrys            *movtfra
}

func NewTrackFragmentRandomAccessBox added in v1.0.7

func NewTrackFragmentRandomAccessBox(trackid uint32) *TrackFragmentRandomAccessBox

func (*TrackFragmentRandomAccessBox) Decode added in v1.0.7

func (tfra *TrackFragmentRandomAccessBox) Decode(r io.Reader) (offset int, err error)

func (*TrackFragmentRandomAccessBox) Encode added in v1.0.7

func (tfra *TrackFragmentRandomAccessBox) Encode() (int, []byte)

func (*TrackFragmentRandomAccessBox) Size added in v1.0.7

func (tfra *TrackFragmentRandomAccessBox) Size() uint64

type TrackHeaderBox added in v1.0.7

type TrackHeaderBox struct {
	Box               *FullBox
	Creation_time     uint64
	Modification_time uint64
	Track_ID          uint32
	Duration          uint64
	Layer             uint16
	Alternate_group   uint16
	Volume            uint16
	Matrix            [9]uint32
	Width             uint32
	Height            uint32
}

func NewTrackHeaderBox added in v1.0.7

func NewTrackHeaderBox() *TrackHeaderBox

func (*TrackHeaderBox) Decode added in v1.0.7

func (tkhd *TrackHeaderBox) Decode(r io.Reader) (offset int, err error)

func (*TrackHeaderBox) Encode added in v1.0.7

func (tkhd *TrackHeaderBox) Encode() (int, []byte)

func (*TrackHeaderBox) Size added in v1.0.7

func (tkhd *TrackHeaderBox) Size() uint64

type TrackInfo

type TrackInfo struct {
	Duration     uint32
	TrackId      int
	Cid          MP4_CODEC_TYPE
	Height       uint32
	Width        uint32
	SampleRate   uint32
	SampleSize   uint16
	SampleCount  uint32
	ChannelCount uint8
	Timescale    uint32
	StartDts     uint64
	EndDts       uint64
}

type TrackOption added in v1.0.7

type TrackOption func(track *mp4track)

func WithAudioChannelCount added in v1.0.7

func WithAudioChannelCount(channelCount uint8) TrackOption

func WithAudioSampleBits added in v1.0.7

func WithAudioSampleBits(sampleBits uint8) TrackOption

func WithAudioSampleRate added in v1.0.7

func WithAudioSampleRate(sampleRate uint32) TrackOption

func WithExtraData added in v1.0.7

func WithExtraData(extraData []byte) TrackOption

func WithVideoHeight added in v1.0.7

func WithVideoHeight(height uint32) TrackOption

func WithVideoWidth added in v1.0.7

func WithVideoWidth(width uint32) TrackOption

type TrackRunBox added in v1.0.7

type TrackRunBox struct {
	Box              *FullBox
	SampleCount      uint32
	Dataoffset       int32
	FirstSampleFlags uint32
	EntryList        *movtrun
}

func NewTrackRunBox added in v1.0.7

func NewTrackRunBox() *TrackRunBox

func (*TrackRunBox) Decode added in v1.0.7

func (trun *TrackRunBox) Decode(r io.Reader, size uint32, dataOffset uint32) (offset int, err error)

func (*TrackRunBox) Encode added in v1.0.7

func (trun *TrackRunBox) Encode() (int, []byte)

func (*TrackRunBox) Size added in v1.0.7

func (trun *TrackRunBox) Size() uint64

type VideoMediaHeaderBox added in v1.0.7

type VideoMediaHeaderBox struct {
	Box          *FullBox
	Graphicsmode uint16
	Opcolor      [3]uint16
}

func NewVideoMediaHeaderBox added in v1.0.7

func NewVideoMediaHeaderBox() *VideoMediaHeaderBox

func (*VideoMediaHeaderBox) Decode added in v1.0.7

func (vmhd *VideoMediaHeaderBox) Decode(r io.Reader) (offset int, err error)

func (*VideoMediaHeaderBox) Encode added in v1.0.7

func (vmhd *VideoMediaHeaderBox) Encode() (int, []byte)

func (*VideoMediaHeaderBox) Size added in v1.0.7

func (vmhd *VideoMediaHeaderBox) Size() uint64

type VisualSampleEntry

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

func NewVisualSampleEntry added in v1.0.7

func NewVisualSampleEntry(format [4]byte) *VisualSampleEntry

func (*VisualSampleEntry) Decode added in v1.0.7

func (entry *VisualSampleEntry) Decode(r io.Reader) (offset int, err error)

func (*VisualSampleEntry) Encode added in v1.0.7

func (entry *VisualSampleEntry) Encode() (int, []byte)

func (*VisualSampleEntry) Size added in v1.0.7

func (entry *VisualSampleEntry) Size() uint64

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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