When configuring an encoding, and specifying how to access the input file, there are 2 mechanisms available to you:

  • Supplying the information directly in the [`Stream` payload](🔗).

  • Or creating an [`IngestInputStream`](🔗) and providing its identifier in the `Stream`

The 2 mechanisms are functionally equivalent, and require the same type of information:

  • `inputId`, the identifier of the `Input` storage

  • `inputPath`, with the full path to the input file on that storage

  • `selectionMode` and `position`, to define what stream to use in the input file.

The difference between the 2 mechanisms is historical. Specifying the information directly on the `Stream` was sufficient for most use cases, until we added support for more complex workflows where more than one input file is involved, such as [trimming and concatenation](🔗), Dolby Vision, Dolby Atmos, etc. For those, we had to create a more flexible and more consistent way to specify files (and transformations on files), with multiple subtypes of `InputStream` objects, the primary one for specifying video and audio input files being the `IngestInputStream`.

So, whilst for simple use cases the 2 methods are equivalent, we strongly recommend, if only for consistency, to use the second one. In the future any new input functionality will be provided through `InputStreams`.

# Conversion

To convert your existing code to use the `IngestInputStream` is very simple. Here is an example for Java:

## Before

## After

Note that unlike `StreamInput`, which is an abstraction internal to the SDKs used in the construction of the `Stream`, `IngestInputStream` is an API endpoint in its own right, and you therefore need to call it (as shown on line 8 above), before you can use it in the definition of the `Stream`.