Documentation ¶
Overview ¶
Package av defines basic interfaces and data structures of container demux/mux and audio encode/decode.
Index ¶
- Constants
- Variables
- type AudioCodecData
- type AudioDecoder
- type AudioEncoder
- type AudioFrame
- type ChannelLayout
- type CodecData
- type CodecType
- type DemuxCloser
- type Demuxer
- type MuxCloser
- type Muxer
- type Packet
- type PacketReader
- type PacketWriter
- type PixelFormat
- type SampleFormat
- type ScanningMode
- type VideoCodecData
Constants ¶
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 )
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) )
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. )
const ( Progressive = ScanningMode(iota + 1) InterlacedTFF // Top Field First InterlacedBFF // Bottom Field First )
Variables ¶
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 ¶
Make a new audio codec type.
func MakeVideoCodecType ¶
Make a new video codec type.
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 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 PacketWriter ¶
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 ¶
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. |