From 5f28707cce7a552def1d34c026e1a5fdab8c248c Mon Sep 17 00:00:00 2001 From: Jason Dove Date: Sat, 10 Jul 2021 06:16:46 -0500 Subject: [PATCH] include audio language metadata in all streaming modes (#295) * include audio language metadata in all streaming modes * cleanup --- CHANGELOG.md | 5 +++++ ErsatzTV.Core/FFmpeg/FFmpegProcessBuilder.cs | 18 ++++++++++++++++-- ErsatzTV.Core/FFmpeg/FFmpegProcessService.cs | 6 +++--- 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 34ca4725..c2ee1ee7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,11 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ## [Unreleased] +### Added +- Include audio language metadata in all streaming modes + +### Fixed +- Fix flooding schedule items that have a fixed start time ## [0.0.48-prealpha] - 2021-06-22 ### Added diff --git a/ErsatzTV.Core/FFmpeg/FFmpegProcessBuilder.cs b/ErsatzTV.Core/FFmpeg/FFmpegProcessBuilder.cs index 9c8c8d59..8925f925 100644 --- a/ErsatzTV.Core/FFmpeg/FFmpegProcessBuilder.cs +++ b/ErsatzTV.Core/FFmpeg/FFmpegProcessBuilder.cs @@ -230,14 +230,29 @@ namespace ErsatzTV.Core.FFmpeg return this; } - public FFmpegProcessBuilder WithMetadata(Channel channel) + public FFmpegProcessBuilder WithMetadata(Channel channel, Option maybeAudioStream) { + if (channel.StreamingMode == StreamingMode.TransportStream) + { + _arguments.AddRange(new[] { "-map_metadata", "-1" }); + } + + foreach (MediaStream audioStream in maybeAudioStream) + { + if (!string.IsNullOrWhiteSpace(audioStream.Language)) + { + _arguments.AddRange(new[] { "-metadata:s:a:0", $"language={audioStream.Language}" }); + } + } + var arguments = new List { "-metadata", "service_provider=\"ErsatzTV\"", "-metadata", $"service_name=\"{channel.Name}\"" }; + _arguments.AddRange(arguments); + return this; } @@ -323,7 +338,6 @@ namespace ErsatzTV.Core.FFmpeg new[] { "-c:a", playbackSettings.AudioCodec, - "-map_metadata", "-1", "-movflags", "+faststart", "-muxdelay", "0", "-muxpreload", "0" diff --git a/ErsatzTV.Core/FFmpeg/FFmpegProcessService.cs b/ErsatzTV.Core/FFmpeg/FFmpegProcessService.cs index cce2eea9..e2c5d010 100644 --- a/ErsatzTV.Core/FFmpeg/FFmpegProcessService.cs +++ b/ErsatzTV.Core/FFmpeg/FFmpegProcessService.cs @@ -105,7 +105,7 @@ namespace ErsatzTV.Core.FFmpeg }); return builder.WithPlaybackArgs(playbackSettings) - .WithMetadata(channel) + .WithMetadata(channel, maybeAudioStream) .WithFormat("mpegts") .WithDuration(start + version.Duration - now) .WithPipe() @@ -130,7 +130,7 @@ namespace ErsatzTV.Core.FFmpeg .WithErrorText(desiredResolution, errorMessage) .WithPixfmt("yuv420p") .WithPlaybackArgs(playbackSettings) - .WithMetadata(channel) + .WithMetadata(channel, None) .WithFormat("mpegts"); duration.IfSome(d => builder = builder.WithDuration(d)); @@ -149,7 +149,7 @@ namespace ErsatzTV.Core.FFmpeg .WithRealtimeOutput(playbackSettings.RealtimeOutput) .WithInfiniteLoop() .WithConcat($"http://localhost:{Settings.ListenPort}/ffmpeg/concat/{channel.Number}") - .WithMetadata(channel) + .WithMetadata(channel, None) .WithFormat("mpegts") .WithPipe() .Build();