av

package
v0.0.0-...-639ab39 Latest Latest
Warning

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

Go to latest
Published: May 16, 2023 License: MIT Imports: 2 Imported by: 0

Documentation

Overview

Package av defines basic interfaces and data structures of container demux/mux and audio encode/decode.

Index

Constants

View Source
const (
	U8   = SampleFormat(iota + 1) // 8-bit unsigned integer
	S16                           // signed 16-bit integer
	S32                           // signed 32-bit integer
	FLT                           // 32-bit float
	DBL                           // 64-bit float
	U8P                           // 8-bit unsigned integer in planar
	S16P                          // signed 16-bit integer in planar
	S32P                          // signed 32-bit integer in planar
	FLTP                          // 32-bit float in planar
	DBLP                          // 64-bit float in planar
	U32                           // unsigned 32-bit integer
)
View Source
const (
	CH_FRONT_CENTER = ChannelLayout(1 << iota)
	CH_FRONT_LEFT
	CH_FRONT_RIGHT
	CH_BACK_CENTER
	CH_BACK_LEFT
	CH_BACK_RIGHT
	CH_SIDE_LEFT
	CH_SIDE_RIGHT
	CH_LOW_FREQ
	CH_NR

	CH_MONO     = ChannelLayout(CH_FRONT_CENTER)
	CH_STEREO   = ChannelLayout(CH_FRONT_LEFT | CH_FRONT_RIGHT)
	CH_2_1      = ChannelLayout(CH_STEREO | CH_BACK_CENTER)
	CH_2POINT1  = ChannelLayout(CH_STEREO | CH_LOW_FREQ)
	CH_SURROUND = ChannelLayout(CH_STEREO | CH_FRONT_CENTER)
	CH_3POINT1  = ChannelLayout(CH_SURROUND | CH_LOW_FREQ)
)
View Source
const (
	// Planar formats
	I420 = PixelFormat(iota + 1) // 4:2:0 8 bit, 12 bpp. Y plane followed by 8 bit 2x2 subsampled U and V planes
	NV12                         // 4:2:0 8 bit, 12 bpp. Y plane followed by an interleaved U/V plane with 2x2 subsampling
	NV21                         // 4:2:0 8 bit, 12 bpp. As NV12 with U and V reversed in the interleaved plane

	// Packed formats
	UYVY // 4:2:2 8-bit, 16 bpp. YUV (Y sample at every pixel, U and V sampled at every second pixel horizontally on each line). A macropixel contains 2 pixels in 1 u_int32.
	//YUY2 // 4:2:2 8-bit, 16 bpp. Same as UYVY but with different component ordering within the u_int32 macropixel.
	YUYV // 4:2:2 8-bit, 16 bpp as for UYVY but with different component ordering within the u_int32 macropixel.

)
View Source
const (
	Progressive   = ScanningMode(iota + 1)
	InterlacedTFF // Top Field First
	InterlacedBFF // Bottom Field First
)

Variables

View Source
var (
	H264       = MakeVideoCodecType(avCodecTypeMagic + 1)
	H265       = MakeVideoCodecType(avCodecTypeMagic + 2)
	JPEG       = MakeVideoCodecType(avCodecTypeMagic + 3)
	VP8        = MakeVideoCodecType(avCodecTypeMagic + 4)
	VP9        = MakeVideoCodecType(avCodecTypeMagic + 5)
	AV1        = MakeVideoCodecType(avCodecTypeMagic + 6)
	AAC        = MakeAudioCodecType(avCodecTypeMagic + 1)
	PCM_MULAW  = MakeAudioCodecType(avCodecTypeMagic + 2)
	PCM_ALAW   = MakeAudioCodecType(avCodecTypeMagic + 3)
	SPEEX      = MakeAudioCodecType(avCodecTypeMagic + 4)
	NELLYMOSER = MakeAudioCodecType(avCodecTypeMagic + 5)
	PCM        = MakeAudioCodecType(avCodecTypeMagic + 6)
	OPUS       = MakeAudioCodecType(avCodecTypeMagic + 7)
)

Functions

This section is empty.

Types

type AudioCodecData

type AudioCodecData interface {
	CodecData
	SampleFormat() SampleFormat                   // audio sample format
	SampleRate() int                              // audio sample rate
	ChannelLayout() ChannelLayout                 // audio channel layout
	PacketDuration([]byte) (time.Duration, error) // get audio compressed packet duration
}

type AudioDecoder

type AudioDecoder interface {
	Decode([]byte) (bool, AudioFrame, error) // decode one compressed audio packet
	Close()                                  // close decode, free cgo contexts
}

AudioDecoder can decode compressed audio packets into raw audio frame. use ffmpeg.NewAudioDecoder to create it.

type AudioEncoder

type AudioEncoder interface {
	CodecData() (AudioCodecData, error)   // encoder's codec data can put into container
	Encode(AudioFrame) ([][]byte, error)  // encode raw audio frame into compressed pakcet(s)
	Close()                               // close encoder, free cgo contexts
	SetSampleRate(int) error              // set encoder sample rate
	SetChannelLayout(ChannelLayout) error // set encoder channel layout
	SetSampleFormat(SampleFormat) error   // set encoder sample format
	SetBitrate(int) error                 // set encoder bitrate
	SetOption(string, interface{}) error  // encoder setopt, in ffmpeg is av_opt_set_dict()
	GetOption(string, interface{}) error  // encoder getopt
}

AudioEncoder can encode raw audio frame into compressed audio packets. cgo/ffmpeg inplements AudioEncoder, using ffmpeg.NewAudioEncoder to create it.

type AudioFrame

type AudioFrame struct {
	SampleFormat  SampleFormat  // audio sample format, e.g: S16,FLTP,...
	ChannelLayout ChannelLayout // audio channel layout, e.g: CH_MONO,CH_STEREO,...
	SampleCount   int           // sample count in this frame
	SampleRate    int           // sample rate
	Data          [][]byte      // data array for planar format len(Data) > 1
}

Raw audio frame.

func (AudioFrame) Concat

func (self AudioFrame) Concat(in AudioFrame) (out AudioFrame)

Concat two audio frames.

func (AudioFrame) Duration

func (self AudioFrame) Duration() time.Duration

func (AudioFrame) HasSameFormat

func (self AudioFrame) HasSameFormat(other AudioFrame) bool

Check this audio frame has same format as other audio frame.

func (AudioFrame) Slice

func (self AudioFrame) Slice(start int, end int) (out AudioFrame)

Split sample audio sample from this frame.

type ChannelLayout

type ChannelLayout uint16

Audio channel layout.

func (ChannelLayout) Count

func (self ChannelLayout) Count() (n int)

func (ChannelLayout) String

func (self ChannelLayout) String() string

type CodecData

type CodecData interface {
	Type() CodecType // Video/Audio codec type
}

CodecData is some important bytes for initializing audio/video decoder, can be converted to VideoCodecData or AudioCodecData using:

codecdata.(AudioCodecData) or codecdata.(VideoCodecData)

for H264, CodecData is AVCDecoderConfigure bytes, includes SPS/PPS.

type CodecType

type CodecType uint32

Video/Audio codec type. can be H264/AAC/SPEEX/...

func MakeAudioCodecType

func MakeAudioCodecType(base uint32) (c CodecType)

Make a new audio codec type.

func MakeVideoCodecType

func MakeVideoCodecType(base uint32) (c CodecType)

Make a new video codec type.

func (CodecType) IsAudio

func (self CodecType) IsAudio() bool

func (CodecType) IsVideo

func (self CodecType) IsVideo() bool

func (CodecType) String

func (self CodecType) String() string

type DemuxCloser

type DemuxCloser interface {
	Demuxer
	Close() error
}

Demuxer with Close() method

type Demuxer

type Demuxer interface {
	PacketReader                   // read compressed audio/video packets
	Streams() ([]CodecData, error) // reads the file header, contains video/audio meta infomations
}

Demuxer can read compressed audio/video packets from container formats like MP4/FLV/MPEG-TS.

type MuxCloser

type MuxCloser interface {
	Muxer
	Close() error
}

Muxer with Close() method

type Muxer

type Muxer interface {
	WriteHeader([]CodecData) error // write the file header
	PacketWriter                   // write compressed audio/video packets
	WriteTrailer() error           // finish writing file, this func can be called only once
}

Muxer describes the steps of writing compressed audio/video packets into container formats like MP4/FLV/MPEG-TS.

Container formats, rtmp.Conn, and transcode.Muxer implements Muxer interface.

type Packet

type Packet struct {
	IsKeyFrame      bool          // video packet is key frame
	Idx             int8          // stream index in container format
	CompositionTime time.Duration // packet presentation time minus decode time for H264 B-Frame
	Time            time.Duration // packet decode time
	Duration        time.Duration // packet duration
	Data            []byte        // packet data
}

Packet stores compressed audio/video data.

type PacketReader

type PacketReader interface {
	ReadPacket() (Packet, error)
}

type PacketWriter

type PacketWriter interface {
	WritePacket(Packet) error
}

type PixelFormat

type PixelFormat uint8

Video frame format.

func (PixelFormat) BytesPerPixel

func (pixFmt PixelFormat) BytesPerPixel() int

BytesPerPixel returns the number of bytes (rounded up) used by a pixel in a given format

func (PixelFormat) HorizontalSubsampleRatio

func (pixFmt PixelFormat) HorizontalSubsampleRatio() int

HorizontalSubsampleRatio returns the ratio of Y bytes over U or V bytes in a row of pixels

func (PixelFormat) IsPlanar

func (pixFmt PixelFormat) IsPlanar() bool

IsPlanar return true if this pixel format is planar.

func (PixelFormat) String

func (pixFmt PixelFormat) String() string

func (PixelFormat) VerticalSubsampleRatio

func (pixFmt PixelFormat) VerticalSubsampleRatio() int

VerticalSubsampleRatio returns the ratio of Y bytes over U or V bytes in a column of pixels

type SampleFormat

type SampleFormat uint8

Audio sample format.

func (SampleFormat) BytesPerSample

func (self SampleFormat) BytesPerSample() int

func (SampleFormat) IsPlanar

func (self SampleFormat) IsPlanar() bool

Check if this sample format is in planar.

func (SampleFormat) String

func (self SampleFormat) String() string

type ScanningMode

type ScanningMode uint8

Video scanning mode.

func (ScanningMode) String

func (s ScanningMode) String() string

type VideoCodecData

type VideoCodecData interface {
	CodecData
	Width() int  // Video width
	Height() int // Video height
}

Directories

Path Synopsis
Package pktque provides packet Filter interface and structures used by other components.
Package pktque provides packet Filter interface and structures used by other components.
Packege pubsub implements publisher-subscribers model used in multi-channel streaming.
Packege pubsub implements publisher-subscribers model used in multi-channel streaming.
Package transcoder implements Transcoder based on Muxer/Demuxer and AudioEncoder/AudioDecoder interface.
Package transcoder implements Transcoder based on Muxer/Demuxer and AudioEncoder/AudioDecoder interface.

Jump to

Keyboard shortcuts

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