Skip to content

Hudl.FFmpeg Architecture

Casey Bateman edited this page Oct 8, 2015 · 3 revisions

Architecture

Hudl.FFmpeg is architected to closely resemble the structure of an FFmpeg command. FFmpeg commands are broken down in to four very basic parts

  • Filtergraph
  • Settings
  • Inputs
  • Outputs

Filtergraph

For additional information regarding FFmpeg filters, visit the FFmpeg filter documentation.

Hudl.FFmpeg uses the same terminology as FFmpeg in regards to filters. Filters are best described as linear actions to take against one or more input streams. These filters are reprented by the IFilter interface in Hudl.FFmpeg. Collections of filters in any given sequence are known as Filterchains. Finally the Filtergraph is a term used to describe a one or more Filterchains in an FFmpeg command.

Hudl.FFmpeg Filtergraph hierarchy:

-> Filtergraph
   -> List<Filterchain> 
      -> List<IFilter>

Settings

For additional information regarding FFmpeg codecs, visit the FFmpeg codec documentation.

Settings in Hudl.FFmpeg are used to tell encoders / decoders how to interpret or convert the stream. These settings are represented by the ISetting interface in Hudl.FFmpeg. Collections of settings are separated into two groups: input and output settings. Input and output settings are identified in Hudl.FFmpeg by the use the SettingsApplication attribute.

Hudl.FFmpeg Settings hierarchy:

-> SettingsCollection 
   -> List<ISetting>

For more information on creating custom settings, view our Extending Hudl.FFmpeg documentation.

Inputs

An Input is a pointer to a video or audio stream. An input file is loaded in to an IContainer interface object. These IContainer objects are class types that represent the input file type. The classes are named by file extension, which means that a .mp4 file would be loaded into a type of Mp4. We do this so that container can be validated by what is put in and taken out of them.

Hudl.FFmpeg Input heirarchy:

-> CommandInput
   -> SettingsCollection (see above)
   -> IContainer
   -> List<IStream>
      -> VideoStream 
            OR
      -> AudioStream

For more information on creating custom containers, view our Extending Hudl.FFmpeg documentation.

Outputs

An Output is exactly as it sounds, it is where we are going to render the files to. Each FFmpegCommand object is allowed multiple CommandOutput types. These command output types container references to an IContainer object, which is the format in which the files is to be saved.

Hudl.FFmpeg Output heirarchy:

-> CommandOutput
   -> SettingsCollection (see above)
   -> IContainer
   -> List<IStream>
      -> VideoStream 
            OR 
      -> AudioStream