update sat/ip
This commit is contained in:
parent
31e98681fa
commit
1381447bda
|
@ -2450,7 +2450,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
||||||
|
|
||||||
public List<NameValuePair> GetSatIniMappings()
|
public List<NameValuePair> GetSatIniMappings()
|
||||||
{
|
{
|
||||||
var names = GetType().Assembly.GetManifestResourceNames().Where(i => i.IndexOf("SatIp.ini.satellite", StringComparison.OrdinalIgnoreCase) != -1).ToList();
|
var names = GetType().Assembly.GetManifestResourceNames().Where(i => i.IndexOf("SatIp.ini", StringComparison.OrdinalIgnoreCase) != -1).ToList();
|
||||||
|
|
||||||
return names.Select(GetSatIniMappings).Where(i => i != null).DistinctBy(i => i.Value.Split('|')[0]).ToList();
|
return names.Select(GetSatIniMappings).Where(i => i != null).DistinctBy(i => i.Value.Split('|')[0]).ToList();
|
||||||
}
|
}
|
||||||
|
@ -2472,20 +2472,21 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var srch = "SatIp.ini.";
|
||||||
|
var filename = Path.GetFileName(resource);
|
||||||
|
|
||||||
return new NameValuePair
|
return new NameValuePair
|
||||||
{
|
{
|
||||||
Name = satType1 + " " + satType2,
|
Name = satType1 + " " + satType2,
|
||||||
Value = satType2 + "|" + Path.GetFileName(resource)
|
Value = satType2 + "|" + filename.Substring(filename.IndexOf(srch) + srch.Length)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<List<ChannelInfo>> GetSatChannelScanResult(TunerHostInfo info, CancellationToken cancellationToken)
|
public Task<List<ChannelInfo>> GetSatChannelScanResult(TunerHostInfo info, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
var result = await new TunerHosts.SatIp.ChannelScan().Scan(info, cancellationToken).ConfigureAwait(false);
|
return new TunerHosts.SatIp.ChannelScan(_logger).Scan(info, cancellationToken);
|
||||||
|
|
||||||
return result.Select(i => new ChannelInfo()).ToList();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,15 +1,104 @@
|
||||||
using System.Collections.Generic;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Globalization;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using IniParser;
|
||||||
|
using IniParser.Model;
|
||||||
|
using MediaBrowser.Controller.LiveTv;
|
||||||
using MediaBrowser.Model.LiveTv;
|
using MediaBrowser.Model.LiveTv;
|
||||||
|
using MediaBrowser.Model.Logging;
|
||||||
|
using MediaBrowser.Server.Implementations.LiveTv.TunerHosts.SatIp.Rtsp;
|
||||||
|
|
||||||
namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.SatIp
|
namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.SatIp
|
||||||
{
|
{
|
||||||
public class ChannelScan
|
public class ChannelScan
|
||||||
{
|
{
|
||||||
public async Task<List<SatChannel>> Scan(TunerHostInfo info, CancellationToken cancellationToken)
|
private readonly ILogger _logger;
|
||||||
|
|
||||||
|
public ChannelScan(ILogger logger)
|
||||||
{
|
{
|
||||||
return new List<SatChannel>();
|
_logger = logger;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<List<ChannelInfo>> Scan(TunerHostInfo info, CancellationToken cancellationToken)
|
||||||
|
{
|
||||||
|
var timedToken = new CancellationTokenSource(TimeSpan.FromSeconds(30));
|
||||||
|
var linkedToken = CancellationTokenSource.CreateLinkedTokenSource(timedToken.Token, cancellationToken);
|
||||||
|
|
||||||
|
using (var rtspSession = new RtspSession(info.Url, _logger))
|
||||||
|
{
|
||||||
|
var ini = info.SourceA.Split('|')[1];
|
||||||
|
var resource = GetType().Assembly.GetManifestResourceNames().FirstOrDefault(i => i.EndsWith(ini, StringComparison.OrdinalIgnoreCase));
|
||||||
|
|
||||||
|
_logger.Info("Opening ini file {0}", resource);
|
||||||
|
using (var stream = GetType().Assembly.GetManifestResourceStream(resource))
|
||||||
|
{
|
||||||
|
using (var reader = new StreamReader(stream))
|
||||||
|
{
|
||||||
|
var parser = new StreamIniDataParser();
|
||||||
|
var data = parser.ReadData(reader);
|
||||||
|
|
||||||
|
var count = GetInt(data, "DVB", "0", 0);
|
||||||
|
|
||||||
|
var index = 1;
|
||||||
|
var source = "1";
|
||||||
|
|
||||||
|
while (!linkedToken.IsCancellationRequested)
|
||||||
|
{
|
||||||
|
float percent = count == 0 ? 0 : (float)(index) / count;
|
||||||
|
percent = Math.Max(percent * 100, 100);
|
||||||
|
|
||||||
|
//SetControlPropertyThreadSafe(pgbSearchResult, "Value", (int)percent);
|
||||||
|
var strArray = data["DVB"][index.ToString(CultureInfo.InvariantCulture)].Split(',');
|
||||||
|
|
||||||
|
string tuning;
|
||||||
|
if (strArray[4] == "S2")
|
||||||
|
{
|
||||||
|
tuning = string.Format("src={0}&freq={1}&pol={2}&sr={3}&fec={4}&msys=dvbs2&mtype={5}&plts=on&ro=0.35&pids=0,16,17,18,20", source, strArray[0], strArray[1].ToLower(), strArray[2].ToLower(), strArray[3], strArray[5].ToLower());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
tuning = string.Format("src={0}&freq={1}&pol={2}&sr={3}&fec={4}&msys=dvbs&mtype={5}&pids=0,16,17,18,20", source, strArray[0], strArray[1].ToLower(), strArray[2], strArray[3], strArray[5].ToLower());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (string.IsNullOrEmpty(rtspSession.RtspSessionId))
|
||||||
|
{
|
||||||
|
rtspSession.Setup(tuning, "unicast");
|
||||||
|
|
||||||
|
rtspSession.Play(string.Empty);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rtspSession.Play(tuning);
|
||||||
|
}
|
||||||
|
|
||||||
|
int signallevel;
|
||||||
|
int signalQuality;
|
||||||
|
rtspSession.Describe(out signallevel, out signalQuality);
|
||||||
|
|
||||||
|
await Task.Delay(500).ConfigureAwait(false);
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return new List<ChannelInfo>();
|
||||||
|
}
|
||||||
|
|
||||||
|
private int GetInt(IniData data, string s1, string s2, int defaultValue)
|
||||||
|
{
|
||||||
|
var value = data[s1][s2];
|
||||||
|
int numericValue;
|
||||||
|
if (int.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, out numericValue))
|
||||||
|
{
|
||||||
|
return numericValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
return defaultValue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.SatIp.SatIp
|
namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.SatIp.Rtsp
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Standard RTSP request methods.
|
/// Standard RTSP request methods.
|
||||||
|
|
|
@ -18,8 +18,7 @@
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
|
namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.SatIp.Rtsp
|
||||||
namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.SatIp.SatIp
|
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// A simple class that can be used to serialise RTSP requests.
|
/// A simple class that can be used to serialise RTSP requests.
|
||||||
|
|
|
@ -21,8 +21,7 @@ using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
|
|
||||||
|
namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.SatIp.Rtsp
|
||||||
namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.SatIp.SatIp
|
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// A simple class that can be used to deserialise RTSP responses.
|
/// A simple class that can be used to deserialise RTSP responses.
|
||||||
|
|
|
@ -25,7 +25,7 @@ using System.Net.Sockets;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
using MediaBrowser.Model.Logging;
|
using MediaBrowser.Model.Logging;
|
||||||
|
|
||||||
namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.SatIp.SatIp
|
namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.SatIp.Rtsp
|
||||||
{
|
{
|
||||||
public class RtspSession : IDisposable
|
public class RtspSession : IDisposable
|
||||||
{
|
{
|
||||||
|
@ -58,15 +58,22 @@ namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.SatIp.SatIp
|
||||||
private Socket _rtspSocket;
|
private Socket _rtspSocket;
|
||||||
private int _rtspSequenceNum = 1;
|
private int _rtspSequenceNum = 1;
|
||||||
private bool _disposed = false;
|
private bool _disposed = false;
|
||||||
private ILogger _logger;
|
private readonly ILogger _logger;
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Constructor
|
#region Constructor
|
||||||
|
|
||||||
public RtspSession(string address, ILogger logger)
|
public RtspSession(string address, ILogger logger)
|
||||||
{
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(address))
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("address");
|
||||||
|
}
|
||||||
|
|
||||||
_address = address;
|
_address = address;
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
|
|
||||||
|
_logger.Info("Creating RtspSession with url {0}", address);
|
||||||
}
|
}
|
||||||
~RtspSession()
|
~RtspSession()
|
||||||
{
|
{
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
|
|
||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
|
|
||||||
namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.SatIp.SatIp
|
namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.SatIp.Rtsp
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Standard RTSP status codes.
|
/// Standard RTSP status codes.
|
||||||
|
|
|
@ -40,7 +40,8 @@ namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.SatIp
|
||||||
return await new M3uParser(Logger, _fileSystem, _httpClient).Parse(tuner.M3UUrl, ChannelIdPrefix, tuner.Id, cancellationToken).ConfigureAwait(false);
|
return await new M3uParser(Logger, _fileSystem, _httpClient).Parse(tuner.M3UUrl, ChannelIdPrefix, tuner.Id, cancellationToken).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
return new List<ChannelInfo>();
|
var channels = await new ChannelScan(Logger).Scan(tuner, cancellationToken).ConfigureAwait(false);
|
||||||
|
return channels;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static string DeviceType
|
public static string DeviceType
|
||||||
|
|
Loading…
Reference in New Issue
Block a user