Browse Source

upgrade to ffmpeg 4.4 (#182)

* bump docker images from ffmpeg 4.3 to 4.4 (#181)

* fix ffmpeg 4.4 compatibility
pull/183/head
Jason Dove 4 years ago committed by GitHub
parent
commit
b178b7402b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 4
      ErsatzTV.Core.Tests/FFmpeg/FFmpegPlaybackSettingsCalculatorTests.cs
  2. 12
      ErsatzTV.Core/FFmpeg/FFmpegComplexFilterBuilder.cs
  3. 2
      ErsatzTV.Core/FFmpeg/FFmpegPlaybackSettings.cs
  4. 2
      ErsatzTV.Core/FFmpeg/FFmpegPlaybackSettingsCalculator.cs
  5. 8
      ErsatzTV.Core/FFmpeg/FFmpegProcessBuilder.cs
  6. 2
      docker/Dockerfile
  7. 2
      docker/nvidia/Dockerfile
  8. 2
      docker/vaapi/Dockerfile

4
ErsatzTV.Core.Tests/FFmpeg/FFmpegPlaybackSettingsCalculatorTests.cs

@ -106,7 +106,7 @@ namespace ErsatzTV.Core.Tests.FFmpeg @@ -106,7 +106,7 @@ namespace ErsatzTV.Core.Tests.FFmpeg
}
[Test]
public void Should_SetRealtime_ForHttpLiveStreaming()
public void ShouldNot_SetRealtime_ForHttpLiveStreaming()
{
FFmpegProfile ffmpegProfile = TestProfile();
@ -119,7 +119,7 @@ namespace ErsatzTV.Core.Tests.FFmpeg @@ -119,7 +119,7 @@ namespace ErsatzTV.Core.Tests.FFmpeg
DateTimeOffset.Now,
DateTimeOffset.Now);
actual.RealtimeOutput.Should().BeTrue();
actual.RealtimeOutput.Should().BeFalse();
}
[Test]

12
ErsatzTV.Core/FFmpeg/FFmpegComplexFilterBuilder.cs

@ -18,6 +18,7 @@ namespace ErsatzTV.Core.FFmpeg @@ -18,6 +18,7 @@ namespace ErsatzTV.Core.FFmpeg
private string _inputCodec;
private bool _normalizeLoudness;
private Option<IDisplaySize> _padToSize = None;
private bool _realtime;
private Option<IDisplaySize> _scaleToSize = None;
public FFmpegComplexFilterBuilder WithHardwareAcceleration(HardwareAccelerationKind hardwareAccelerationKind)
@ -26,6 +27,12 @@ namespace ErsatzTV.Core.FFmpeg @@ -26,6 +27,12 @@ namespace ErsatzTV.Core.FFmpeg
return this;
}
public FFmpegComplexFilterBuilder WithRealtime(bool realtime)
{
_realtime = realtime;
return this;
}
public FFmpegComplexFilterBuilder WithScaling(IDisplaySize scaleToSize)
{
_scaleToSize = Some(scaleToSize);
@ -95,6 +102,11 @@ namespace ErsatzTV.Core.FFmpeg @@ -95,6 +102,11 @@ 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)

2
ErsatzTV.Core/FFmpeg/FFmpegPlaybackSettings.cs

@ -12,7 +12,7 @@ namespace ErsatzTV.Core.FFmpeg @@ -12,7 +12,7 @@ namespace ErsatzTV.Core.FFmpeg
public List<string> FormatFlags { get; set; }
public HardwareAccelerationKind HardwareAcceleration { get; set; }
public string VideoDecoder { get; set; }
public bool RealtimeOutput => true;
public bool RealtimeOutput { get; set; }
public Option<TimeSpan> StreamSeek { get; set; }
public Option<IDisplaySize> ScaledSize { get; set; }
public bool PadToDesiredResolution { get; set; }

2
ErsatzTV.Core/FFmpeg/FFmpegPlaybackSettingsCalculator.cs

@ -68,8 +68,10 @@ namespace ErsatzTV.Core.FFmpeg @@ -68,8 +68,10 @@ 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))

8
ErsatzTV.Core/FFmpeg/FFmpegProcessBuilder.cs

@ -90,11 +90,7 @@ namespace ErsatzTV.Core.FFmpeg @@ -90,11 +90,7 @@ namespace ErsatzTV.Core.FFmpeg
public FFmpegProcessBuilder WithRealtimeOutput(bool realtimeOutput)
{
if (realtimeOutput)
{
_arguments.Add("-re");
}
_complexFilterBuilder = _complexFilterBuilder.WithRealtime(realtimeOutput);
return this;
}
@ -393,7 +389,7 @@ namespace ErsatzTV.Core.FFmpeg @@ -393,7 +389,7 @@ namespace ErsatzTV.Core.FFmpeg
{
FileName = _ffmpegPath,
RedirectStandardOutput = true,
RedirectStandardError = false,
RedirectStandardError = true,
UseShellExecute = false,
CreateNoWindow = true,
StandardOutputEncoding = Encoding.UTF8

2
docker/Dockerfile

@ -1,6 +1,6 @@ @@ -1,6 +1,6 @@
FROM mcr.microsoft.com/dotnet/aspnet:5.0-focal-amd64 AS dotnet-runtime
FROM jrottenberg/ffmpeg:4.3-ubuntu2004 AS runtime-base
FROM jrottenberg/ffmpeg:4.4-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

2
docker/nvidia/Dockerfile

@ -1,6 +1,6 @@ @@ -1,6 +1,6 @@
FROM mcr.microsoft.com/dotnet/aspnet:5.0-focal-amd64 AS dotnet-runtime
FROM jrottenberg/ffmpeg:4.3-nvidia1804 AS runtime-base
FROM jrottenberg/ffmpeg:4.4-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

2
docker/vaapi/Dockerfile

@ -1,6 +1,6 @@ @@ -1,6 +1,6 @@
FROM mcr.microsoft.com/dotnet/aspnet:5.0-focal-amd64 AS dotnet-runtime
FROM jrottenberg/ffmpeg:4.3-vaapi1804 AS runtime-base
FROM jrottenberg/ffmpeg:4.4-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

Loading…
Cancel
Save