Browse Source

fix next playback of items with no audio

pull/2865/head
Jason Dove 3 months ago
parent
commit
2750ad0c54
No known key found for this signature in database
  1. 43
      ErsatzTV.Application/Playouts/Commands/SyncNextPlayoutHandler.cs

43
ErsatzTV.Application/Playouts/Commands/SyncNextPlayoutHandler.cs

@ -125,14 +125,27 @@ public partial class SyncNextPlayoutHandler(
.ThenInclude(i => (i as Episode).MediaVersions) .ThenInclude(i => (i as Episode).MediaVersions)
.ThenInclude(mv => mv.MediaFiles) .ThenInclude(mv => mv.MediaFiles)
.Include(i => i.MediaItem) .Include(i => i.MediaItem)
.ThenInclude(i => (i as Episode).MediaVersions)
.ThenInclude(mv => mv.Streams)
.Include(i => i.MediaItem)
.ThenInclude(i => (i as Movie).MediaVersions) .ThenInclude(i => (i as Movie).MediaVersions)
.ThenInclude(mv => mv.MediaFiles) .ThenInclude(mv => mv.MediaFiles)
.Include(i => i.MediaItem) .Include(i => i.MediaItem)
.ThenInclude(i => (i as Movie).MediaVersions)
.ThenInclude(mv => mv.Streams)
.Include(i => i.MediaItem)
.ThenInclude(i => (i as OtherVideo).MediaVersions) .ThenInclude(i => (i as OtherVideo).MediaVersions)
.ThenInclude(mv => mv.MediaFiles) .ThenInclude(mv => mv.MediaFiles)
.Include(i => i.MediaItem) .Include(i => i.MediaItem)
.ThenInclude(i => (i as OtherVideo).MediaVersions)
.ThenInclude(mv => mv.Streams)
.Include(i => i.MediaItem)
.ThenInclude(i => (i as MusicVideo).MediaVersions) .ThenInclude(i => (i as MusicVideo).MediaVersions)
.ThenInclude(mv => mv.MediaFiles) .ThenInclude(mv => mv.MediaFiles)
.Include(i => i.MediaItem)
.ThenInclude(i => (i as MusicVideo).MediaVersions)
.ThenInclude(mv => mv.Streams)
.AsSplitQuery()
.ToListAsync(cancellationToken); .ToListAsync(cancellationToken);
logger.LogDebug("Located {Count} local playout items", playoutItems.Count); logger.LogDebug("Located {Count} local playout items", playoutItems.Count);
@ -156,7 +169,8 @@ public partial class SyncNextPlayoutHandler(
continue; continue;
} }
string path = playoutItem.MediaItem.GetHeadVersion().MediaFiles.Head().Path; MediaVersion headVersion = playoutItem.MediaItem.GetHeadVersion();
string path = headVersion.MediaFiles.Head().Path;
playoutItem.Start += playoutOffset; playoutItem.Start += playoutOffset;
playoutItem.Finish += playoutOffset; playoutItem.Finish += playoutOffset;
@ -173,6 +187,33 @@ public partial class SyncNextPlayoutHandler(
} }
}; };
// if no audio streams, use lavfi to insert silence
if (headVersion.Streams.All(s => s.MediaStreamKind is not MediaStreamKind.Audio))
{
var videoSource = nextPlayoutItem.Source;
nextPlayoutItem.Source = null;
nextPlayoutItem.Tracks = new TracksClass
{
Audio = new AudioClass
{
Source = new AudioSource
{
SourceType = SourceType.Lavfi,
Params = "anullsrc=channel_layout=stereo:sample_rate=48000"
}
},
Video = new AudioClass
{
Source = new AudioSource
{
SourceType = videoSource.SourceType,
Path = videoSource.Path,
}
}
};
}
playout.Items.Add(nextPlayoutItem); playout.Items.Add(nextPlayoutItem);
} }

Loading…
Cancel
Save