From 60a96400097bc336463a850544a10b4cfc51c953 Mon Sep 17 00:00:00 2001 From: Jason Dove Date: Sun, 23 May 2021 09:55:40 -0500 Subject: [PATCH] use ffmpeg 4.3 in docker (#202) * Revert "fix ffmpeg 4.4 compatibility" This reverts commit 1ca0df038c6b927cbb78a4e22fbdbfed4f7f7952. * use ffmpeg 4.3 in docker --- .../FFmpeg/FFmpegPlaybackSettingsCalculatorTests.cs | 4 ++-- ErsatzTV.Core/FFmpeg/FFmpegComplexFilterBuilder.cs | 12 ------------ ErsatzTV.Core/FFmpeg/FFmpegPlaybackSettings.cs | 2 +- .../FFmpeg/FFmpegPlaybackSettingsCalculator.cs | 2 -- ErsatzTV.Core/FFmpeg/FFmpegProcessBuilder.cs | 8 ++++++-- docker/Dockerfile | 2 +- docker/nvidia/Dockerfile | 2 +- docker/vaapi/Dockerfile | 2 +- 8 files changed, 12 insertions(+), 22 deletions(-) diff --git a/ErsatzTV.Core.Tests/FFmpeg/FFmpegPlaybackSettingsCalculatorTests.cs b/ErsatzTV.Core.Tests/FFmpeg/FFmpegPlaybackSettingsCalculatorTests.cs index 300c075cf..9ac603db2 100644 --- a/ErsatzTV.Core.Tests/FFmpeg/FFmpegPlaybackSettingsCalculatorTests.cs +++ b/ErsatzTV.Core.Tests/FFmpeg/FFmpegPlaybackSettingsCalculatorTests.cs @@ -107,7 +107,7 @@ namespace ErsatzTV.Core.Tests.FFmpeg } [Test] - public void ShouldNot_SetRealtime_ForHttpLiveStreaming() + public void Should_SetRealtime_ForHttpLiveStreaming() { FFmpegProfile ffmpegProfile = TestProfile(); @@ -120,7 +120,7 @@ namespace ErsatzTV.Core.Tests.FFmpeg DateTimeOffset.Now, DateTimeOffset.Now); - actual.RealtimeOutput.Should().BeFalse(); + actual.RealtimeOutput.Should().BeTrue(); } [Test] diff --git a/ErsatzTV.Core/FFmpeg/FFmpegComplexFilterBuilder.cs b/ErsatzTV.Core/FFmpeg/FFmpegComplexFilterBuilder.cs index 0e076e7ab..89ae37382 100644 --- a/ErsatzTV.Core/FFmpeg/FFmpegComplexFilterBuilder.cs +++ b/ErsatzTV.Core/FFmpeg/FFmpegComplexFilterBuilder.cs @@ -18,7 +18,6 @@ namespace ErsatzTV.Core.FFmpeg private string _inputCodec; private bool _normalizeLoudness; private Option _padToSize = None; - private bool _realtime; private Option _scaleToSize = None; public FFmpegComplexFilterBuilder WithHardwareAcceleration(HardwareAccelerationKind hardwareAccelerationKind) @@ -27,12 +26,6 @@ namespace ErsatzTV.Core.FFmpeg return this; } - public FFmpegComplexFilterBuilder WithRealtime(bool realtime) - { - _realtime = realtime; - return this; - } - public FFmpegComplexFilterBuilder WithScaling(IDisplaySize scaleToSize) { _scaleToSize = Some(scaleToSize); @@ -102,11 +95,6 @@ namespace ErsatzTV.Core.FFmpeg _audioDuration.IfSome( audioDuration => audioFilterQueue.Add($"apad=whole_dur={audioDuration.TotalMilliseconds}ms")); - if (_realtime) - { - videoFilterQueue.Add("realtime"); - } - bool usesHardwareFilters = acceleration != HardwareAccelerationKind.None && !isHardwareDecode && (_deinterlace || _scaleToSize.IsSome); if (usesHardwareFilters) diff --git a/ErsatzTV.Core/FFmpeg/FFmpegPlaybackSettings.cs b/ErsatzTV.Core/FFmpeg/FFmpegPlaybackSettings.cs index abd239946..9c49ded3e 100644 --- a/ErsatzTV.Core/FFmpeg/FFmpegPlaybackSettings.cs +++ b/ErsatzTV.Core/FFmpeg/FFmpegPlaybackSettings.cs @@ -12,7 +12,7 @@ namespace ErsatzTV.Core.FFmpeg public List FormatFlags { get; set; } public HardwareAccelerationKind HardwareAcceleration { get; set; } public string VideoDecoder { get; set; } - public bool RealtimeOutput { get; set; } + public bool RealtimeOutput => true; public Option StreamSeek { get; set; } public Option ScaledSize { get; set; } public bool PadToDesiredResolution { get; set; } diff --git a/ErsatzTV.Core/FFmpeg/FFmpegPlaybackSettingsCalculator.cs b/ErsatzTV.Core/FFmpeg/FFmpegPlaybackSettingsCalculator.cs index b1d17cedb..1f730af3d 100644 --- a/ErsatzTV.Core/FFmpeg/FFmpegPlaybackSettingsCalculator.cs +++ b/ErsatzTV.Core/FFmpeg/FFmpegPlaybackSettingsCalculator.cs @@ -68,10 +68,8 @@ namespace ErsatzTV.Core.FFmpeg result.AudioCodec = "copy"; result.VideoCodec = "copy"; result.Deinterlace = false; - result.RealtimeOutput = false; break; case StreamingMode.TransportStream: - result.RealtimeOutput = true; result.HardwareAcceleration = ffmpegProfile.HardwareAcceleration; if (NeedToScale(ffmpegProfile, version)) diff --git a/ErsatzTV.Core/FFmpeg/FFmpegProcessBuilder.cs b/ErsatzTV.Core/FFmpeg/FFmpegProcessBuilder.cs index 8d910c284..629c1163f 100644 --- a/ErsatzTV.Core/FFmpeg/FFmpegProcessBuilder.cs +++ b/ErsatzTV.Core/FFmpeg/FFmpegProcessBuilder.cs @@ -90,7 +90,11 @@ namespace ErsatzTV.Core.FFmpeg public FFmpegProcessBuilder WithRealtimeOutput(bool realtimeOutput) { - _complexFilterBuilder = _complexFilterBuilder.WithRealtime(realtimeOutput); + if (realtimeOutput) + { + _arguments.Add("-re"); + } + return this; } @@ -389,7 +393,7 @@ namespace ErsatzTV.Core.FFmpeg { FileName = _ffmpegPath, RedirectStandardOutput = true, - RedirectStandardError = true, + RedirectStandardError = false, UseShellExecute = false, CreateNoWindow = true, StandardOutputEncoding = Encoding.UTF8 diff --git a/docker/Dockerfile b/docker/Dockerfile index 31f3fe00c..a7e9fe1bf 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,6 +1,6 @@ FROM mcr.microsoft.com/dotnet/aspnet:5.0-focal-amd64 AS dotnet-runtime -FROM jrottenberg/ffmpeg:4.4-ubuntu2004 AS runtime-base +FROM jrottenberg/ffmpeg:4.3-ubuntu2004 AS runtime-base COPY --from=dotnet-runtime /usr/share/dotnet /usr/share/dotnet RUN apt-get update && DEBIAN_FRONTEND="noninteractive" apt-get install -y libicu-dev tzdata diff --git a/docker/nvidia/Dockerfile b/docker/nvidia/Dockerfile index c43344033..e7625f9b5 100644 --- a/docker/nvidia/Dockerfile +++ b/docker/nvidia/Dockerfile @@ -1,6 +1,6 @@ FROM mcr.microsoft.com/dotnet/aspnet:5.0-focal-amd64 AS dotnet-runtime -FROM jrottenberg/ffmpeg:4.4-nvidia1804 AS runtime-base +FROM jrottenberg/ffmpeg:4.3-nvidia1804 AS runtime-base COPY --from=dotnet-runtime /usr/share/dotnet /usr/share/dotnet RUN apt-get update && DEBIAN_FRONTEND="noninteractive" apt-get install -y libicu-dev tzdata diff --git a/docker/vaapi/Dockerfile b/docker/vaapi/Dockerfile index f4038f059..7dee22662 100644 --- a/docker/vaapi/Dockerfile +++ b/docker/vaapi/Dockerfile @@ -1,6 +1,6 @@ FROM mcr.microsoft.com/dotnet/aspnet:5.0-focal-amd64 AS dotnet-runtime -FROM jrottenberg/ffmpeg:4.4-vaapi2004 AS runtime-base +FROM jrottenberg/ffmpeg:4.3-vaapi2004 AS runtime-base COPY --from=dotnet-runtime /usr/share/dotnet /usr/share/dotnet RUN apt-get update && DEBIAN_FRONTEND="noninteractive" apt-get install -y libicu-dev tzdata