|
@@ -36,7 +36,6 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
|
|
|
private readonly IHttpClientFactory _httpClientFactory;
|
|
|
private readonly IServerApplicationHost _appHost;
|
|
|
private readonly ISocketFactory _socketFactory;
|
|
|
- private readonly INetworkManager _networkManager;
|
|
|
private readonly IStreamHelper _streamHelper;
|
|
|
|
|
|
private readonly JsonSerializerOptions _jsonOptions;
|
|
@@ -50,7 +49,6 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
|
|
|
IHttpClientFactory httpClientFactory,
|
|
|
IServerApplicationHost appHost,
|
|
|
ISocketFactory socketFactory,
|
|
|
- INetworkManager networkManager,
|
|
|
IStreamHelper streamHelper,
|
|
|
IMemoryCache memoryCache)
|
|
|
: base(config, logger, fileSystem, memoryCache)
|
|
@@ -58,7 +56,6 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
|
|
|
_httpClientFactory = httpClientFactory;
|
|
|
_appHost = appHost;
|
|
|
_socketFactory = socketFactory;
|
|
|
- _networkManager = networkManager;
|
|
|
_streamHelper = streamHelper;
|
|
|
|
|
|
_jsonOptions = JsonDefaults.Options;
|
|
@@ -70,7 +67,7 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
|
|
|
|
|
|
protected override string ChannelIdPrefix => "hdhr_";
|
|
|
|
|
|
- private string GetChannelId(TunerHostInfo info, Channels i)
|
|
|
+ private string GetChannelId(Channels i)
|
|
|
=> ChannelIdPrefix + i.GuideNumber;
|
|
|
|
|
|
internal async Task<List<Channels>> GetLineup(TunerHostInfo info, CancellationToken cancellationToken)
|
|
@@ -103,7 +100,7 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
|
|
|
{
|
|
|
Name = i.GuideName,
|
|
|
Number = i.GuideNumber,
|
|
|
- Id = GetChannelId(tuner, i),
|
|
|
+ Id = GetChannelId(i),
|
|
|
IsFavorite = i.Favorite,
|
|
|
TunerHostId = tuner.Id,
|
|
|
IsHD = i.HD,
|
|
@@ -255,7 +252,7 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
|
|
|
{
|
|
|
var model = await GetModelInfo(info, false, cancellationToken).ConfigureAwait(false);
|
|
|
|
|
|
- var tuners = new List<LiveTvTunerInfo>();
|
|
|
+ var tuners = new List<LiveTvTunerInfo>(model.TunerCount);
|
|
|
|
|
|
var uri = new Uri(GetApiUrl(info));
|
|
|
|
|
@@ -264,10 +261,10 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
|
|
|
// Legacy HdHomeruns are IPv4 only
|
|
|
var ipInfo = IPAddress.Parse(uri.Host);
|
|
|
|
|
|
- for (int i = 0; i < model.TunerCount; ++i)
|
|
|
+ for (int i = 0; i < model.TunerCount; i++)
|
|
|
{
|
|
|
var name = string.Format(CultureInfo.InvariantCulture, "Tuner {0}", i + 1);
|
|
|
- var currentChannel = "none"; // @todo Get current channel and map back to Station Id
|
|
|
+ var currentChannel = "none"; // TODO: Get current channel and map back to Station Id
|
|
|
var isAvailable = await manager.CheckTunerAvailability(ipInfo, i, cancellationToken).ConfigureAwait(false);
|
|
|
var status = isAvailable ? LiveTvTunerStatus.Available : LiveTvTunerStatus.LiveTv;
|
|
|
tuners.Add(new LiveTvTunerInfo
|
|
@@ -455,28 +452,28 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
|
|
|
Path = url,
|
|
|
Protocol = MediaProtocol.Udp,
|
|
|
MediaStreams = new List<MediaStream>
|
|
|
- {
|
|
|
- new MediaStream
|
|
|
- {
|
|
|
- Type = MediaStreamType.Video,
|
|
|
- // Set the index to -1 because we don't know the exact index of the video stream within the container
|
|
|
- Index = -1,
|
|
|
- IsInterlaced = isInterlaced,
|
|
|
- Codec = videoCodec,
|
|
|
- Width = width,
|
|
|
- Height = height,
|
|
|
- BitRate = videoBitrate,
|
|
|
- NalLengthSize = nal
|
|
|
- },
|
|
|
- new MediaStream
|
|
|
- {
|
|
|
- Type = MediaStreamType.Audio,
|
|
|
- // Set the index to -1 because we don't know the exact index of the audio stream within the container
|
|
|
- Index = -1,
|
|
|
- Codec = audioCodec,
|
|
|
- BitRate = audioBitrate
|
|
|
- }
|
|
|
- },
|
|
|
+ {
|
|
|
+ new MediaStream
|
|
|
+ {
|
|
|
+ Type = MediaStreamType.Video,
|
|
|
+ // Set the index to -1 because we don't know the exact index of the video stream within the container
|
|
|
+ Index = -1,
|
|
|
+ IsInterlaced = isInterlaced,
|
|
|
+ Codec = videoCodec,
|
|
|
+ Width = width,
|
|
|
+ Height = height,
|
|
|
+ BitRate = videoBitrate,
|
|
|
+ NalLengthSize = nal
|
|
|
+ },
|
|
|
+ new MediaStream
|
|
|
+ {
|
|
|
+ Type = MediaStreamType.Audio,
|
|
|
+ // Set the index to -1 because we don't know the exact index of the audio stream within the container
|
|
|
+ Index = -1,
|
|
|
+ Codec = audioCodec,
|
|
|
+ BitRate = audioBitrate
|
|
|
+ }
|
|
|
+ },
|
|
|
RequiresOpening = true,
|
|
|
RequiresClosing = true,
|
|
|
BufferMs = 0,
|
|
@@ -551,7 +548,7 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- var profile = streamId.Split('_')[0];
|
|
|
+ var profile = streamId.AsSpan().LeftPart('_').ToString();
|
|
|
|
|
|
Logger.LogInformation("GetChannelStream: channel id: {0}. stream id: {1} profile: {2}", channel.Id, streamId, profile);
|
|
|
|