From 8a6093ce8dd015c0222221357144bfdfe82efc6b Mon Sep 17 00:00:00 2001 From: Jason Dove Date: Wed, 16 Feb 2022 11:29:54 -0600 Subject: [PATCH] properly specify audio codec even when source has correct format (#641) --- ErsatzTV.Core.Tests/FFmpeg/TranscodingTests.cs | 3 ++- ErsatzTV.FFmpeg/PipelineBuilder.cs | 18 +++++++++--------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/ErsatzTV.Core.Tests/FFmpeg/TranscodingTests.cs b/ErsatzTV.Core.Tests/FFmpeg/TranscodingTests.cs index c223226f8..6949f6adf 100644 --- a/ErsatzTV.Core.Tests/FFmpeg/TranscodingTests.cs +++ b/ErsatzTV.Core.Tests/FFmpeg/TranscodingTests.cs @@ -271,7 +271,8 @@ namespace ErsatzTV.Core.Tests.FFmpeg FFmpegProfile = FFmpegProfile.New("test", profileResolution) with { HardwareAcceleration = profileAcceleration, - VideoCodec = profileCodec + VideoCodec = profileCodec, + AudioCodec = "aac" }, StreamingMode = StreamingMode.TransportStream }, diff --git a/ErsatzTV.FFmpeg/PipelineBuilder.cs b/ErsatzTV.FFmpeg/PipelineBuilder.cs index 72028bbdc..b0c8ff717 100644 --- a/ErsatzTV.FFmpeg/PipelineBuilder.cs +++ b/ErsatzTV.FFmpeg/PipelineBuilder.cs @@ -360,19 +360,19 @@ public class PipelineBuilder { _pipelineSteps.Add(new EncoderCopyAudio()); } - - // TODO: while? - if (!IsDesiredAudioState(currentState, desiredState)) + else { - if (currentState.AudioFormat != desiredState.AudioFormat) + // always need to specify audio codec so ffmpeg doesn't default to a codec we don't want + foreach (IEncoder step in AvailableEncoders.ForAudioFormat(desiredState, _logger)) { - foreach (IEncoder step in AvailableEncoders.ForAudioFormat(desiredState, _logger)) - { - currentState = step.NextState(currentState); - _pipelineSteps.Add(step); - } + currentState = step.NextState(currentState); + _pipelineSteps.Add(step); } + } + // TODO: while? + if (!IsDesiredAudioState(currentState, desiredState)) + { foreach (int desiredAudioChannels in desiredState.AudioChannels) { if (currentState.AudioChannels != desiredAudioChannels)