Hi Maarten!
When creating a Stream with an e.g. AacAudioConfiguration
, you can add a condition to it that needs to be met, so any other resources that rely on it (e.g. Mp4Muxings) are processed or not. We don’t have a public sample for that in particular for dotnet, but please have a look at this code snippet we created based on our FixedBitrateLadder
example for our dotnet SDK.
We’ve modified the “CreateStream” method to add a Condition to the Stream, in case an AacAudioConfiguration is provided. AUDIOSTREAMCOUNT
checks the total number of audio tracks available in the input file. If it is greater than zero, the condition is met, and subsequent resources will be processed instead of being ignored based on their streamConditionMode
. There are also other input file details you can use for that as well as logically group multiple conditions. All that gets explained in more detail in our documentation about Stream Conditions.
FixedBitrateLadder.cs at line 245:
private Task<Stream> CreateStream(Models.Encoding encoding, Input input, string inputPath,
CodecConfiguration configuration)
{
var streamInput = new StreamInput()
{
InputId = input.Id,
InputPath = inputPath,
SelectionMode = StreamSelectionMode.AUTO
};
var stream = new Stream()
{
InputStreams = new List<StreamInput>() { streamInput },
CodecConfigId = configuration.Id
};
//Adds a condition to AAC Audio Streams to process them only, if there is an audio track available in the input file
if (configuration.GetType() == typeof(AacAudioConfiguration))
{
var audioTrackExistsCondition = new Condition()
{
Attribute = "AUDIOSTREAMCOUNT",
Operator = ConditionOperator.GREATER_THAN,
Value = "0"
};
stream.Conditions = audioTrackExistsCondition;
}
return _bitmovinApi.Encoding.Encodings.Streams.CreateAsync(encoding.Id, stream);
}
As you are creating MP4 files where video and audio streams get merged, you need to set an additional configuration to your MP4 Muxing which is called streamConditionsMode
(API Reference - Create MP4 Muxing). It can either be set to “DROP MUXING” (default) or “DROP STREAM”. Set it to “DROP STREAM” so the MP4 Muxing takes Streams into account, that met their condition.
FixedBitrateLadder.cs at line 321:
private Task CreateMp4Muxing(Models.Encoding encoding, Output output, string outputPath,
List<Stream> streams, string fileName)
{
var muxing = new Mp4Muxing()
{
Outputs = new List<EncodingOutput>() {BuildEncodingOutput(output, outputPath)},
Filename = fileName,
StreamConditionsMode = StreamConditionsMode.DROP_STREAM
};
foreach (var stream in streams)
{
var muxingSteam = new MuxingStream()
{
StreamId = stream.Id,
};
muxing.Streams.Add(muxingSteam);
}
return _bitmovinApi.Encoding.Encodings.Muxings.Mp4.CreateAsync(encoding.Id, muxing);
}
By doing that, your encoding configuration knows how to handle input files with, and without, an audio track
Some additional information on stream conditions can also be found here.
I hope this is understandable and helpful. In case you have any further questions, please let me know
Best regards,
Yuliia
Customer Success Manager,
Bitmovin, Inc