Documentation ¶
Index ¶
- Constants
- Variables
- func AddStream(ctxFormat *avformat.Context) *avformat.Stream
- func CloneStream(i *avformat.Stream, ctxFormat *avformat.Context) (o *avformat.Stream, err error)
- type AvError
- type Context
- type Decoder
- type DecoderOptions
- type Demuxer
- func (d *Demuxer) Connect(h PktHandler)
- func (d *Demuxer) ConnectForStream(h PktHandler, i *avformat.Stream)
- func (d *Demuxer) CtxFormat() *avformat.Context
- func (d *Demuxer) Disconnect(h PktHandler)
- func (d *Demuxer) DisconnectForStream(h PktHandler, i *avformat.Stream)
- func (d *Demuxer) Start(ctx context.Context, t astiencoder.CreateTaskFunc)
- type DemuxerOptions
- type Descriptor
- type Dict
- type Encoder
- func (e *Encoder) AddStream(ctxFormat *avformat.Context) (o *avformat.Stream, err error)
- func (e *Encoder) Connect(h PktHandler)
- func (e *Encoder) Disconnect(h PktHandler)
- func (e *Encoder) FrameSize() int
- func (e *Encoder) HandleFrame(p *FrameHandlerPayload)
- func (e *Encoder) Start(ctx context.Context, t astiencoder.CreateTaskFunc)
- type EncoderOptions
- type Filterer
- func (f *Filterer) Close() error
- func (f *Filterer) Connect(h FrameHandler)
- func (f *Filterer) Disconnect(h FrameHandler)
- func (f *Filterer) HandleFrame(p *FrameHandlerPayload)
- func (f *Filterer) OutputCtx() Context
- func (f *Filterer) SendCommand(target, cmd, arg string, flags int) (err error)
- func (f *Filterer) Start(ctx context.Context, t astiencoder.CreateTaskFunc)
- type FiltererOptions
- type Forwarder
- type ForwarderOptions
- type FrameHandler
- type FrameHandlerConnector
- type FrameHandlerPayload
- type FrameRestamper
- type Muxer
- type MuxerOptions
- type MuxerPktHandler
- type OutputContexter
- type PktCond
- type PktDumper
- type PktDumperHandlerArgs
- type PktDumperOptions
- type PktHandler
- type PktHandlerConnector
- type PktHandlerPayload
- type PktRestamper
- type RateEnforcer
- func (r *RateEnforcer) Connect(h FrameHandler)
- func (r *RateEnforcer) Disconnect(h FrameHandler)
- func (r *RateEnforcer) HandleFrame(p *FrameHandlerPayload)
- func (r *RateEnforcer) OutputCtx() Context
- func (r *RateEnforcer) Start(ctx context.Context, t astiencoder.CreateTaskFunc)
- func (r *RateEnforcer) Switch(n astiencoder.Node)
- type RateEnforcerOptions
- type Versions
Constants ¶
const ( // First packet of new node has been received by the rate enforcer RateEnforcerSwitchedIn = "astilibav.rate.enforcer.switched.in" // First packet of new node has been dispatched by the rate enforcer RateEnforcerSwitchedOut = "astilibav.rate.enforcer.switched.out" )
Event names
const ( StatNameAverageDelay = "astilibav.average.delay" StatNameDispatchRatio = "astilibav.dispatch.ratio" StatNameIncomingRate = "astilibav.incoming.rate" StatNameRepeatedRate = "astilibav.repeated.rate" StatNameWorkRatio = "astilibav.work.ratio" )
Stat names
Variables ¶
var PktDumpFile = func(pkt *avcodec.Packet, args PktDumperHandlerArgs) (err error) { // Create file var f *os.File if f, err = os.Create(args.Pattern); err != nil { err = fmt.Errorf("astilibav: creating file %s failed: %w", args.Pattern, err) return } defer f.Close() if _, err = f.Write(C.GoBytes(unsafe.Pointer(pkt.Data()), (C.int)(pkt.Size()))); err != nil { err = fmt.Errorf("astilibav: writing to file %s failed: %w", args.Pattern, err) return } return }
PktDumpFunc is a PktDumpFunc that dumps the packet to a file
var Version = Versions{ AvCodec: avcodec.AvcodecVersion(), AvDevice: avdevice.AvdeviceVersion(), AvFilter: avfilter.AvfilterVersion(), AvUtil: avutil.AvutilVersion(), Resample: swresample.SwresampleLicense(), SWScale: swscale.SwscaleVersion(), }
Version stores the versions
Functions ¶
Types ¶
type Context ¶
type Context struct { // Shared BitRate int CodecID avcodec.CodecId CodecName string CodecType avcodec.MediaType Dict *Dict GlobalHeader bool ThreadCount *int TimeBase avutil.Rational // Audio ChannelLayout uint64 Channels int SampleFmt avcodec.AvSampleFormat SampleRate int // Video FrameRate avutil.Rational GopSize int Height int PixelFormat avutil.PixelFormat SampleAspectRatio avutil.Rational Width int }
Context represents parameters of an audio or a video context
func NewContextFromStream ¶
NewContextFromStream creates a new context from a stream
type Decoder ¶
type Decoder struct { *astiencoder.BaseNode // contains filtered or unexported fields }
Decoder represents an object capable of decoding packets
func NewDecoder ¶
func NewDecoder(o DecoderOptions, eh *astiencoder.EventHandler, c *astikit.Closer) (d *Decoder, err error)
NewDecoder creates a new decoder
func (*Decoder) Connect ¶
func (d *Decoder) Connect(h FrameHandler)
Connect implements the FrameHandlerConnector interface
func (*Decoder) Disconnect ¶
func (d *Decoder) Disconnect(h FrameHandler)
Disconnect implements the FrameHandlerConnector interface
func (*Decoder) HandlePkt ¶
func (d *Decoder) HandlePkt(p *PktHandlerPayload)
HandlePkt implements the PktHandler interface
type DecoderOptions ¶
type DecoderOptions struct { CodecParams *avcodec.CodecParameters Node astiencoder.NodeOptions OutputCtx Context }
DecoderOptions represents decoder options
type Demuxer ¶
type Demuxer struct { *astiencoder.BaseNode // contains filtered or unexported fields }
Demuxer represents an object capable of demuxing packets out of an input
func NewDemuxer ¶
func NewDemuxer(o DemuxerOptions, eh *astiencoder.EventHandler, c *astikit.Closer) (d *Demuxer, err error)
NewDemuxer creates a new demuxer
func (*Demuxer) Connect ¶
func (d *Demuxer) Connect(h PktHandler)
Connect implements the PktHandlerConnector interface
func (*Demuxer) ConnectForStream ¶
func (d *Demuxer) ConnectForStream(h PktHandler, i *avformat.Stream)
ConnectForStream connects the demuxer to a PktHandler for a specific stream
func (*Demuxer) Disconnect ¶
func (d *Demuxer) Disconnect(h PktHandler)
Disconnect implements the PktHandlerConnector interface
func (*Demuxer) DisconnectForStream ¶
func (d *Demuxer) DisconnectForStream(h PktHandler, i *avformat.Stream)
DisconnectForStream disconnects the demuxer from a PktHandler for a specific stream
type DemuxerOptions ¶
type DemuxerOptions struct { // String content of the demuxer as you would use in ffmpeg Dict *Dict // If true, the demuxer will sleep between packets for the exact duration of the packet EmulateRate bool // Exact input format Format *avformat.InputFormat // If true, at the end of the input the demuxer will seek to its beginning and start over // In this case the packets are restamped Loop bool // Basic node options Node astiencoder.NodeOptions // Context used to cancel probing ProbeCtx context.Context // If true, the demuxer will not dispatch packets of a stream until the following occurs at least 3 times : // 2 consecutive packets are received at an interval >= to the delta of their DTS SeekToLive bool // URL of the input URL string }
DemuxerOptions represents demuxer options
type Descriptor ¶
Descriptor is an object that can describe a set of parameters
type Dict ¶ added in v0.6.0
type Dict struct {
// contains filtered or unexported fields
}
func NewDefaultDict ¶ added in v0.6.0
func NewDefaultDictf ¶ added in v0.6.0
type Encoder ¶
type Encoder struct { *astiencoder.BaseNode // contains filtered or unexported fields }
Encoder represents an object capable of encoding frames
func NewEncoder ¶
func NewEncoder(o EncoderOptions, eh *astiencoder.EventHandler, c *astikit.Closer) (e *Encoder, err error)
NewEncoder creates a new encoder
func (*Encoder) Connect ¶
func (e *Encoder) Connect(h PktHandler)
Connect implements the PktHandlerConnector interface
func (*Encoder) Disconnect ¶
func (e *Encoder) Disconnect(h PktHandler)
Disconnect implements the PktHandlerConnector interface
func (*Encoder) HandleFrame ¶
func (e *Encoder) HandleFrame(p *FrameHandlerPayload)
HandleFrame implements the FrameHandler interface
type EncoderOptions ¶
type EncoderOptions struct { Ctx Context Node astiencoder.NodeOptions }
EncoderOptions represents encoder options
type Filterer ¶
type Filterer struct { *astiencoder.BaseNode // contains filtered or unexported fields }
Filterer represents an object capable of applying a filter to frames
func NewFilterer ¶
func NewFilterer(o FiltererOptions, eh *astiencoder.EventHandler, c *astikit.Closer) (f *Filterer, err error)
NewFilterer creates a new filterer
func (*Filterer) Connect ¶
func (f *Filterer) Connect(h FrameHandler)
Connect implements the FrameHandlerConnector interface
func (*Filterer) Disconnect ¶
func (f *Filterer) Disconnect(h FrameHandler)
Disconnect implements the FrameHandlerConnector interface
func (*Filterer) HandleFrame ¶
func (f *Filterer) HandleFrame(p *FrameHandlerPayload)
HandleFrame implements the FrameHandler interface
func (*Filterer) SendCommand ¶
SendCommand sends a command to the filterer
type FiltererOptions ¶
type FiltererOptions struct { Content string EmulateRate avutil.Rational Inputs map[string]astiencoder.Node Node astiencoder.NodeOptions OutputCtx Context Restamper FrameRestamper }
FiltererOptions represents filterer options
type Forwarder ¶
type Forwarder struct { *astiencoder.BaseNode // contains filtered or unexported fields }
Forwarder represents an object capable of forwarding frames
func NewForwarder ¶
func NewForwarder(o ForwarderOptions, eh *astiencoder.EventHandler, c *astikit.Closer) (f *Forwarder)
NewForwarder creates a new forwarder
func (*Forwarder) Connect ¶
func (f *Forwarder) Connect(h FrameHandler)
Connect implements the FrameHandlerConnector interface
func (*Forwarder) Disconnect ¶
func (f *Forwarder) Disconnect(h FrameHandler)
Disconnect implements the FrameHandlerConnector interface
func (*Forwarder) HandleFrame ¶
func (f *Forwarder) HandleFrame(p *FrameHandlerPayload)
HandleFrame implements the FrameHandler interface
type ForwarderOptions ¶
type ForwarderOptions struct { Node astiencoder.NodeOptions OutputCtx Context Restamper FrameRestamper }
ForwarderOptions represents forwarder options
type FrameHandler ¶
type FrameHandler interface {
astiencoder.Node
HandleFrame(p *FrameHandlerPayload)
}
FrameHandler represents a node that can handle a frame
type FrameHandlerConnector ¶
type FrameHandlerConnector interface { Connect(next FrameHandler) Disconnect(next FrameHandler) }
FrameHandlerConnector represents an object that can connect/disconnect with a frame handler
type FrameHandlerPayload ¶
type FrameHandlerPayload struct { Descriptor Descriptor Frame *avutil.Frame Node astiencoder.Node }
FrameHandlerPayload represents a FrameHandler payload
type FrameRestamper ¶
FrameRestamper represents an object capable of restamping frames
func NewFrameRestamperWithFrameDuration ¶
func NewFrameRestamperWithFrameDuration(frameDuration int64) FrameRestamper
NewFrameRestamperWithFrameDuration creates a new frame restamper that starts timestamps from 0 and increments them of frameDuration frameDuration must be a duration in frame time base
func NewFrameRestamperWithModulo ¶
func NewFrameRestamperWithModulo(frameDuration int64) FrameRestamper
NewFrameRestamperWithModulo creates a new frame restamper that makes sure that PTS % frame duration = 0 frameDuration must be a duration in frame time base
type Muxer ¶
type Muxer struct { *astiencoder.BaseNode // contains filtered or unexported fields }
Muxer represents an object capable of muxing packets into an output
func NewMuxer ¶
func NewMuxer(o MuxerOptions, eh *astiencoder.EventHandler, c *astikit.Closer) (m *Muxer, err error)
NewMuxer creates a new muxer
func (*Muxer) NewPktHandler ¶
func (m *Muxer) NewPktHandler(o *avformat.Stream) *MuxerPktHandler
NewHandler creates
type MuxerOptions ¶
type MuxerOptions struct { Format *avformat.OutputFormat FormatName string Node astiencoder.NodeOptions Restamper PktRestamper URL string }
MuxerOptions represents muxer options
type MuxerPktHandler ¶
type MuxerPktHandler struct { *Muxer // contains filtered or unexported fields }
MuxerPktHandler is an object that can handle a pkt for the muxer
func (*MuxerPktHandler) HandlePkt ¶
func (h *MuxerPktHandler) HandlePkt(p *PktHandlerPayload)
HandlePkt implements the PktHandler interface
type OutputContexter ¶ added in v0.8.0
type OutputContexter interface {
OutputCtx() Context
}
type PktDumper ¶
type PktDumper struct { *astiencoder.BaseNode // contains filtered or unexported fields }
PktDumper represents an object capable of dumping packets
func NewPktDumper ¶
func NewPktDumper(o PktDumperOptions, eh *astiencoder.EventHandler) (d *PktDumper, err error)
NewPktDumper creates a new pk dumper
func (*PktDumper) HandlePkt ¶
func (d *PktDumper) HandlePkt(p *PktHandlerPayload)
HandlePkt implements the PktHandler interface
type PktDumperHandlerArgs ¶
type PktDumperHandlerArgs struct {
Pattern string
}
PktDumperHandlerArgs represents pkt dumper handler args
type PktDumperOptions ¶
type PktDumperOptions struct { Data map[string]interface{} Handler func(pkt *avcodec.Packet, args PktDumperHandlerArgs) error Node astiencoder.NodeOptions Pattern string }
PktDumperOptions represents pkt dumper options
type PktHandler ¶
type PktHandler interface {
astiencoder.Node
HandlePkt(p *PktHandlerPayload)
}
PktHandler represents a node that can handle a pkt
type PktHandlerConnector ¶
type PktHandlerConnector interface { Connect(next PktHandler) Disconnect(next PktHandler) }
PktHandlerConnector represents an object that can connect/disconnect with a pkt handler
type PktHandlerPayload ¶
type PktHandlerPayload struct { Descriptor Descriptor Pkt *avcodec.Packet }
PktHandlerPayload represents a PktHandler payload
type PktRestamper ¶
PktRestamper represents an object capable of restamping packets
func NewPktRestamperStartFromZero ¶
func NewPktRestamperStartFromZero() PktRestamper
NewPktRestamperStartFromZero creates a new pkt restamper that starts timestamps from 0
func NewPktRestamperWithPktDuration ¶
func NewPktRestamperWithPktDuration() PktRestamper
NewPktRestamperWithPktDuration creates a new pkt restamper that starts timestamps from 0 and increments them of the previous pkt.Duration()
type RateEnforcer ¶
type RateEnforcer struct { *astiencoder.BaseNode // contains filtered or unexported fields }
RateEnforcer represents an object capable of enforcing rate based on PTS
func NewRateEnforcer ¶
func NewRateEnforcer(o RateEnforcerOptions, eh *astiencoder.EventHandler, c *astikit.Closer) (r *RateEnforcer)
NewRateEnforcer creates a new rate enforcer
func (*RateEnforcer) Connect ¶
func (r *RateEnforcer) Connect(h FrameHandler)
Connect implements the FrameHandlerConnector interface
func (*RateEnforcer) Disconnect ¶
func (r *RateEnforcer) Disconnect(h FrameHandler)
Disconnect implements the FrameHandlerConnector interface
func (*RateEnforcer) HandleFrame ¶
func (r *RateEnforcer) HandleFrame(p *FrameHandlerPayload)
HandleFrame implements the FrameHandler interface
func (*RateEnforcer) OutputCtx ¶ added in v0.8.0
func (r *RateEnforcer) OutputCtx() Context
OutputCtx returns the output ctx
func (*RateEnforcer) Start ¶
func (r *RateEnforcer) Start(ctx context.Context, t astiencoder.CreateTaskFunc)
Start starts the rate enforcer
func (*RateEnforcer) Switch ¶
func (r *RateEnforcer) Switch(n astiencoder.Node)
Switch switches the source
type RateEnforcerOptions ¶
type RateEnforcerOptions struct { // This is expressed in number of frames in the desired FrameRate Delay uint FrameRate avutil.Rational Node astiencoder.NodeOptions OutputCtx Context Restamper FrameRestamper }
RateEnforcerOptions represents rate enforcer options