Browse Source

ensure HDHR clients always get an MPEG-TS stream (#721)

pull/723/head
Jason Dove 3 years ago committed by GitHub
parent
commit
25bc500a2b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 1
      CHANGELOG.md
  2. 4
      ErsatzTV.Core/Hdhr/LineupItem.cs
  3. 16
      ErsatzTV.Core/Scheduling/PlayoutBuilder.cs
  4. 12
      ErsatzTV/Controllers/IptvController.cs

1
CHANGELOG.md

@ -6,6 +6,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). @@ -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

4
ErsatzTV.Core/Hdhr/LineupItem.cs

@ -22,7 +22,7 @@ public class LineupItem @@ -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"
};
}

16
ErsatzTV.Core/Scheduling/PlayoutBuilder.cs

@ -277,17 +277,17 @@ public class PlayoutBuilder : IPlayoutBuilder @@ -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 @@ -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,

12
ErsatzTV/Controllers/IptvController.cs

@ -43,6 +43,18 @@ public class IptvController : ControllerBase @@ -43,6 +43,18 @@ public class IptvController : ControllerBase
_mediator.Send(new GetChannelGuide(Request.Scheme, Request.Host.ToString()))
.Map<ChannelGuide, IActionResult>(Ok);
[HttpGet("iptv/hdhr/channel/{channelNumber}.ts")]
public Task<IActionResult> 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<IActionResult> GetTransportStreamVideo(
string channelNumber,

Loading…
Cancel
Save