diff --git a/CHANGELOG.md b/CHANGELOG.md index af79d83a..c47380f4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ## [Unreleased] ### Fixed - Fix `HLS Segmenter` bug where it would drift off of the schedule if a playout was changed while the segmenter was running +- Ensure clients that use HDHomeRun emulation (like Plex) always get an `MPEG-TS` stream, regardless of the configured streaming mode ### Added - Add `Preferred Subtitle Language` and `Subtitle Mode` to channel settings diff --git a/ErsatzTV.Core/Hdhr/LineupItem.cs b/ErsatzTV.Core/Hdhr/LineupItem.cs index c5815fff..a9360f9f 100644 --- a/ErsatzTV.Core/Hdhr/LineupItem.cs +++ b/ErsatzTV.Core/Hdhr/LineupItem.cs @@ -22,7 +22,7 @@ public class LineupItem public string URL => _channel.StreamingMode switch { - StreamingMode.TransportStream => $"{_scheme}://{_host}/iptv/channel/{_channel.Number}.ts?mode=ts-legacy", - _ => $"{_scheme}://{_host}/iptv/channel/{_channel.Number}.ts" + StreamingMode.TransportStream => $"{_scheme}://{_host}/iptv/hdhr/channel/{_channel.Number}.ts?mode=ts-legacy", + _ => $"{_scheme}://{_host}/iptv/hdhr/channel/{_channel.Number}.ts" }; } \ No newline at end of file diff --git a/ErsatzTV.Core/Scheduling/PlayoutBuilder.cs b/ErsatzTV.Core/Scheduling/PlayoutBuilder.cs index 938895b2..d46943f5 100644 --- a/ErsatzTV.Core/Scheduling/PlayoutBuilder.cs +++ b/ErsatzTV.Core/Scheduling/PlayoutBuilder.cs @@ -277,17 +277,17 @@ public class PlayoutBuilder : IPlayoutBuilder DateTimeOffset start = playoutStart; DateTimeOffset finish = playoutStart.Date.AddDays(1); - _logger.LogDebug( - "Trim before: {TrimBefore}, Start: {Start}, Finish: {Finish}, PlayoutFinish: {PlayoutFinish}", - trimBefore, - start, - finish, - playoutFinish); + // _logger.LogDebug( + // "Trim before: {TrimBefore}, Start: {Start}, Finish: {Finish}, PlayoutFinish: {PlayoutFinish}", + // trimBefore, + // start, + // finish, + // playoutFinish); // build each day with "continue" anchors while (finish < playoutFinish) { - _logger.LogDebug("Building playout from {Start} to {Finish}", start, finish); + // _logger.LogDebug("Building playout from {Start} to {Finish}", start, finish); playout = await BuildPlayoutItems(playout, start, finish, collectionMediaItems, true); start = playout.Anchor.NextStartOffset; @@ -297,7 +297,7 @@ public class PlayoutBuilder : IPlayoutBuilder if (start < playoutFinish) { // build one final time without continue anchors - _logger.LogDebug("Building final playout from {Start} to {Finish}", start, playoutFinish); + // _logger.LogDebug("Building final playout from {Start} to {Finish}", start, playoutFinish); playout = await BuildPlayoutItems( playout, start, diff --git a/ErsatzTV/Controllers/IptvController.cs b/ErsatzTV/Controllers/IptvController.cs index 9fd96a75..71212436 100644 --- a/ErsatzTV/Controllers/IptvController.cs +++ b/ErsatzTV/Controllers/IptvController.cs @@ -43,6 +43,18 @@ public class IptvController : ControllerBase _mediator.Send(new GetChannelGuide(Request.Scheme, Request.Host.ToString())) .Map(Ok); + [HttpGet("iptv/hdhr/channel/{channelNumber}.ts")] + public Task GetHDHRVideo(string channelNumber, [FromQuery] string mode = "ts") + { + // don't redirect to the correct channel mode for HDHR clients; always use TS + if (mode != "ts" && mode != "ts-legacy") + { + mode = "ts"; + } + + return GetTransportStreamVideo(channelNumber, mode); + } + [HttpGet("iptv/channel/{channelNumber}.ts")] public async Task GetTransportStreamVideo( string channelNumber,