av

package
v1.1.4 Latest Latest
Warning

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

Go to latest
Published: Apr 1, 2022 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. Created by RTT. Author: teocci@yandex.com on 2021-Oct-27

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)
)

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 packet(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 implements 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
}

AudioFrame represents a raw audio frame.

func (AudioFrame) Concat

func (af AudioFrame) Concat(in AudioFrame) (out AudioFrame)

Concat two audio frames.

func (AudioFrame) Duration

func (af AudioFrame) Duration() time.Duration

func (AudioFrame) HasSameFormat

func (af AudioFrame) HasSameFormat(other AudioFrame) bool

HasSameFormat checks if an audio frame has same audio format.

func (AudioFrame) Slice

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

Slice splits sample audio sample from this frame.

type AudioResampler

type AudioResampler interface {
	Resample(AudioFrame) (AudioFrame, error) // convert raw audio frames
}

AudioResampler can convert raw audio frames in different sample rate/format/channel layout.

type ChannelLayout

type ChannelLayout uint16

ChannelLayout represents an audio channel layout.

func (ChannelLayout) Count

func (cl ChannelLayout) Count() (n int)

func (ChannelLayout) String

func (cl 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

CodecType represents a Video/Audio codec type. can be H264/AAC/SPEEX/...

func MakeAudioCodecType

func MakeAudioCodecType(base uint32) (c CodecType)

MakeAudioCodecType creates a new audio codec type.

func MakeVideoCodecType

func MakeVideoCodecType(base uint32) (c CodecType)

MakeVideoCodecType creates a new video codec type.

func (CodecType) IsAudio

func (ct CodecType) IsAudio() bool

func (CodecType) IsVideo

func (ct CodecType) IsVideo() bool

func (CodecType) String

func (ct CodecType) String() string

type DemuxCloser

type DemuxCloser interface {
	Demuxer
	Close() error
}

DemuxCloser is a 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 information
}

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

type MuxCloser

type MuxCloser interface {
	Muxer
	Close() error
}

MuxCloser is a 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 SampleFormat

type SampleFormat uint8

SampleFormat Audio sample format.

func (SampleFormat) BytesPerSample

func (sf SampleFormat) BytesPerSample() int

func (SampleFormat) IsPlanar

func (sf SampleFormat) IsPlanar() bool

IsPlanar checks if this sample format is in planar.

func (SampleFormat) String

func (sf SampleFormat) String() string

type VideoCodecData

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

Directories

Path Synopsis
Package avconv Created by RTT.
Package avconv Created by RTT.
Package avutil Created by RTT.
Package avutil Created by RTT.
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