Merge pull request #2504 from MediaBrowser/dev

Dev
This commit is contained in:
Luke 2017-03-03 00:53:47 -05:00 committed by GitHub
commit 9f8cbc668d
214 changed files with 1042 additions and 12110 deletions

View File

@ -8,14 +8,14 @@ using MediaBrowser.Model.Logging;
namespace Emby.Common.Implementations.Net
{
public class NetSocket : ISocket
public class NetAcceptSocket : IAcceptSocket
{
public Socket Socket { get; private set; }
private readonly ILogger _logger;
public bool DualMode { get; private set; }
public NetSocket(Socket socket, ILogger logger, bool isDualMode)
public NetAcceptSocket(Socket socket, ILogger logger, bool isDualMode)
{
if (socket == null)
{
@ -47,6 +47,13 @@ namespace Emby.Common.Implementations.Net
}
}
public void Connect(IpEndPointInfo endPoint)
{
var nativeEndpoint = NetworkManager.ToIPEndPoint(endPoint);
Socket.Connect(nativeEndpoint);
}
public void Close()
{
#if NET46
@ -82,7 +89,7 @@ namespace Emby.Common.Implementations.Net
}
private SocketAcceptor _acceptor;
public void StartAccept(Action<ISocket> onAccept, Func<bool> isClosed)
public void StartAccept(Action<IAcceptSocket> onAccept, Func<bool> isClosed)
{
_acceptor = new SocketAcceptor(_logger, Socket, onAccept, isClosed, DualMode);

View File

@ -10,10 +10,10 @@ namespace Emby.Common.Implementations.Net
private readonly ILogger _logger;
private readonly Socket _originalSocket;
private readonly Func<bool> _isClosed;
private readonly Action<ISocket> _onAccept;
private readonly Action<IAcceptSocket> _onAccept;
private readonly bool _isDualMode;
public SocketAcceptor(ILogger logger, Socket originalSocket, Action<ISocket> onAccept, Func<bool> isClosed, bool isDualMode)
public SocketAcceptor(ILogger logger, Socket originalSocket, Action<IAcceptSocket> onAccept, Func<bool> isClosed, bool isDualMode)
{
if (logger == null)
{
@ -54,7 +54,7 @@ namespace Emby.Common.Implementations.Net
}
else
{
// socket must be cleared since the context object is being reused
// acceptSocket must be cleared since the context object is being reused
acceptEventArg.AcceptSocket = null;
}
@ -102,7 +102,7 @@ namespace Emby.Common.Implementations.Net
return;
}
// http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.acceptasync%28v=vs.110%29.aspx
// http://msdn.microsoft.com/en-us/library/system.net.sockets.acceptSocket.acceptasync%28v=vs.110%29.aspx
// Under certain conditions ConnectionReset can occur
// Need to attept to re-accept
if (e.SocketError == SocketError.ConnectionReset)
@ -117,7 +117,7 @@ namespace Emby.Common.Implementations.Net
if (acceptSocket != null)
{
//ProcessAccept(acceptSocket);
_onAccept(new NetSocket(acceptSocket, _logger, _isDualMode));
_onAccept(new NetAcceptSocket(acceptSocket, _logger, _isDualMode));
}
// Accept the next connection request

View File

@ -31,7 +31,7 @@ namespace Emby.Common.Implementations.Net
_logger = logger;
}
public ISocket CreateSocket(IpAddressFamily family, MediaBrowser.Model.Net.SocketType socketType, MediaBrowser.Model.Net.ProtocolType protocolType, bool dualMode)
public IAcceptSocket CreateSocket(IpAddressFamily family, MediaBrowser.Model.Net.SocketType socketType, MediaBrowser.Model.Net.ProtocolType protocolType, bool dualMode)
{
try
{
@ -46,7 +46,7 @@ namespace Emby.Common.Implementations.Net
socket.DualMode = true;
}
return new NetSocket(socket, _logger, dualMode);
return new NetAcceptSocket(socket, _logger, dualMode);
}
catch (SocketException ex)
{
@ -54,13 +54,30 @@ namespace Emby.Common.Implementations.Net
}
}
#region ISocketFactory Members
public ISocket CreateTcpSocket(IpAddressInfo remoteAddress, int remotePort)
{
if (remotePort < 0) throw new ArgumentException("remotePort cannot be less than zero.", "remotePort");
var retVal = new Socket(AddressFamily.InterNetwork, System.Net.Sockets.SocketType.Stream, System.Net.Sockets.ProtocolType.Tcp);
try
{
retVal.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
return new UdpSocket(retVal, new IpEndPointInfo(remoteAddress, remotePort));
}
catch
{
if (retVal != null)
retVal.Dispose();
throw;
}
}
/// <summary>
/// Creates a new UDP socket and binds it to the specified local port.
/// Creates a new UDP acceptSocket and binds it to the specified local port.
/// </summary>
/// <param name="localPort">An integer specifying the local port to bind the socket to.</param>
public IUdpSocket CreateUdpSocket(int localPort)
/// <param name="localPort">An integer specifying the local port to bind the acceptSocket to.</param>
public ISocket CreateUdpSocket(int localPort)
{
if (localPort < 0) throw new ArgumentException("localPort cannot be less than zero.", "localPort");
@ -80,10 +97,10 @@ namespace Emby.Common.Implementations.Net
}
/// <summary>
/// Creates a new UDP socket that is a member of the SSDP multicast local admin group and binds it to the specified local port.
/// Creates a new UDP acceptSocket that is a member of the SSDP multicast local admin group and binds it to the specified local port.
/// </summary>
/// <returns>An implementation of the <see cref="IUdpSocket"/> interface used by RSSDP components to perform socket operations.</returns>
public IUdpSocket CreateSsdpUdpSocket(IpAddressInfo localIpAddress, int localPort)
/// <returns>An implementation of the <see cref="ISocket"/> interface used by RSSDP components to perform acceptSocket operations.</returns>
public ISocket CreateSsdpUdpSocket(IpAddressInfo localIpAddress, int localPort)
{
if (localPort < 0) throw new ArgumentException("localPort cannot be less than zero.", "localPort");
@ -108,13 +125,13 @@ namespace Emby.Common.Implementations.Net
}
/// <summary>
/// Creates a new UDP socket that is a member of the specified multicast IP address, and binds it to the specified local port.
/// Creates a new UDP acceptSocket that is a member of the specified multicast IP address, and binds it to the specified local port.
/// </summary>
/// <param name="ipAddress">The multicast IP address to make the socket a member of.</param>
/// <param name="multicastTimeToLive">The multicast time to live value for the socket.</param>
/// <param name="ipAddress">The multicast IP address to make the acceptSocket a member of.</param>
/// <param name="multicastTimeToLive">The multicast time to live value for the acceptSocket.</param>
/// <param name="localPort">The number of the local port to bind to.</param>
/// <returns></returns>
public IUdpSocket CreateUdpMulticastSocket(string ipAddress, int multicastTimeToLive, int localPort)
public ISocket CreateUdpMulticastSocket(string ipAddress, int multicastTimeToLive, int localPort)
{
if (ipAddress == null) throw new ArgumentNullException("ipAddress");
if (ipAddress.Length == 0) throw new ArgumentException("ipAddress cannot be an empty string.", "ipAddress");
@ -128,7 +145,7 @@ namespace Emby.Common.Implementations.Net
#if NET46
retVal.ExclusiveAddressUse = false;
#else
// The ExclusiveAddressUse socket option is a Windows-specific option that, when set to "true," tells Windows not to allow another socket to use the same local address as this socket
// The ExclusiveAddressUse acceptSocket option is a Windows-specific option that, when set to "true," tells Windows not to allow another acceptSocket to use the same local address as this acceptSocket
// See https://github.com/dotnet/corefx/pull/11509 for more details
if (System.Runtime.InteropServices.RuntimeInformation.IsOSPlatform(System.Runtime.InteropServices.OSPlatform.Windows))
{
@ -154,7 +171,5 @@ namespace Emby.Common.Implementations.Net
throw;
}
}
#endregion
}
}

View File

@ -14,7 +14,7 @@ namespace Emby.Common.Implementations.Net
// THIS IS A LINKED FILE - SHARED AMONGST MULTIPLE PLATFORMS
// Be careful to check any changes compile and work for all platform projects it is shared in.
internal sealed class UdpSocket : DisposableManagedObjectBase, IUdpSocket
internal sealed class UdpSocket : DisposableManagedObjectBase, ISocket
{
#region Fields
@ -23,8 +23,6 @@ namespace Emby.Common.Implementations.Net
private int _LocalPort;
#endregion
#region Constructors
public UdpSocket(Socket socket, int localPort, IPAddress ip)
{
if (socket == null) throw new ArgumentNullException("socket");
@ -36,7 +34,13 @@ namespace Emby.Common.Implementations.Net
_Socket.Bind(new IPEndPoint(ip, _LocalPort));
}
#endregion
public UdpSocket(Socket socket, IpEndPointInfo endPoint)
{
if (socket == null) throw new ArgumentNullException("socket");
_Socket = socket;
_Socket.Connect(NetworkManager.ToIPEndPoint(endPoint));
}
public IpAddressInfo LocalIPAddress
{
@ -44,9 +48,9 @@ namespace Emby.Common.Implementations.Net
private set;
}
#region IUdpSocket Members
#region ISocket Members
public Task<SocketReceiveResult> ReceiveAsync()
public Task<SocketReceiveResult> ReceiveAsync(CancellationToken cancellationToken)
{
ThrowIfDisposed();

View File

@ -234,7 +234,7 @@ namespace Emby.Common.Implementations.Networking
// Try to exclude virtual adapters
// http://stackoverflow.com/questions/8089685/c-sharp-finding-my-machines-local-ip-address-and-not-the-vms
var addr = ipProperties.GatewayAddresses.FirstOrDefault();
if (addr == null|| string.Equals(addr.Address.ToString(), "0.0.0.0", StringComparison.OrdinalIgnoreCase))
if (addr == null || string.Equals(addr.Address.ToString(), "0.0.0.0", StringComparison.OrdinalIgnoreCase))
{
return new List<IPAddress>();
}
@ -275,7 +275,7 @@ namespace Emby.Common.Implementations.Networking
/// Gets a random port number that is currently available
/// </summary>
/// <returns>System.Int32.</returns>
public int GetRandomUnusedPort()
public int GetRandomUnusedTcpPort()
{
var listener = new TcpListener(IPAddress.Any, 0);
listener.Start();
@ -284,6 +284,16 @@ namespace Emby.Common.Implementations.Networking
return port;
}
public int GetRandomUnusedUdpPort()
{
IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Any, 0);
using (var udpClient = new UdpClient(localEndPoint))
{
var port = ((IPEndPoint)(udpClient.Client.LocalEndPoint)).Port;
return port;
}
}
/// <summary>
/// Returns MAC Address from first Network Card in Computer
/// </summary>

View File

@ -76,9 +76,9 @@ namespace Emby.Server.Core
public class StreamFactory : IStreamFactory
{
public Stream CreateNetworkStream(ISocket socket, bool ownsSocket)
public Stream CreateNetworkStream(IAcceptSocket acceptSocket, bool ownsSocket)
{
var netSocket = (NetSocket)socket;
var netSocket = (NetAcceptSocket)acceptSocket;
return new NetworkStream(netSocket.Socket, ownsSocket);
}

View File

@ -169,9 +169,11 @@
<Compile Include="LiveTv\RecordingImageProvider.cs" />
<Compile Include="LiveTv\RefreshChannelsScheduledTask.cs" />
<Compile Include="LiveTv\TunerHosts\BaseTunerHost.cs" />
<Compile Include="LiveTv\TunerHosts\HdHomerun\HdHomerunManager.cs" />
<Compile Include="LiveTv\TunerHosts\HdHomerun\HdHomerunDiscovery.cs" />
<Compile Include="LiveTv\TunerHosts\HdHomerun\HdHomerunHost.cs" />
<Compile Include="LiveTv\TunerHosts\HdHomerun\HdHomerunLiveStream.cs" />
<Compile Include="LiveTv\TunerHosts\HdHomerun\HdHomerunHttpStream.cs" />
<Compile Include="LiveTv\TunerHosts\HdHomerun\HdHomerunUdpStream.cs" />
<Compile Include="LiveTv\TunerHosts\M3uParser.cs" />
<Compile Include="LiveTv\TunerHosts\M3UTunerHost.cs" />
<Compile Include="LiveTv\TunerHosts\MulticastStream.cs" />

View File

@ -28,13 +28,17 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
private readonly IHttpClient _httpClient;
private readonly IFileSystem _fileSystem;
private readonly IServerApplicationHost _appHost;
private readonly ISocketFactory _socketFactory;
private readonly INetworkManager _networkManager;
public HdHomerunHost(IServerConfigurationManager config, ILogger logger, IJsonSerializer jsonSerializer, IMediaEncoder mediaEncoder, IHttpClient httpClient, IFileSystem fileSystem, IServerApplicationHost appHost)
public HdHomerunHost(IServerConfigurationManager config, ILogger logger, IJsonSerializer jsonSerializer, IMediaEncoder mediaEncoder, IHttpClient httpClient, IFileSystem fileSystem, IServerApplicationHost appHost, ISocketFactory socketFactory, INetworkManager networkManager)
: base(config, logger, jsonSerializer, mediaEncoder)
{
_httpClient = httpClient;
_fileSystem = fileSystem;
_appHost = appHost;
_socketFactory = socketFactory;
_networkManager = networkManager;
}
public string Name
@ -84,11 +88,17 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
}
}
private class HdHomerunChannelInfo : ChannelInfo
{
public bool IsLegacyTuner { get; set; }
public string Url { get; set; }
}
protected override async Task<List<ChannelInfo>> GetChannelsInternal(TunerHostInfo info, CancellationToken cancellationToken)
{
var lineup = await GetLineup(info, cancellationToken).ConfigureAwait(false);
return lineup.Select(i => new ChannelInfo
return lineup.Select(i => new HdHomerunChannelInfo
{
Name = i.GuideName,
Number = i.GuideNumber,
@ -98,20 +108,22 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
IsHD = i.HD == 1,
AudioCodec = i.AudioCodec,
VideoCodec = i.VideoCodec,
ChannelType = ChannelType.TV
ChannelType = ChannelType.TV,
IsLegacyTuner = (i.URL ?? string.Empty).StartsWith("hdhomerun", StringComparison.OrdinalIgnoreCase),
Url = i.URL
}).ToList();
}).Cast<ChannelInfo>().ToList();
}
private readonly Dictionary<string, DiscoverResponse> _modelCache = new Dictionary<string, DiscoverResponse>();
private async Task<string> GetModelInfo(TunerHostInfo info, CancellationToken cancellationToken)
private async Task<DiscoverResponse> GetModelInfo(TunerHostInfo info, bool throwAllExceptions, CancellationToken cancellationToken)
{
lock (_modelCache)
{
DiscoverResponse response;
if (_modelCache.TryGetValue(info.Url, out response))
{
return response.ModelNumber;
return response;
}
}
@ -135,68 +147,60 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
_modelCache[info.Id] = response;
}
return response.ModelNumber;
return response;
}
}
catch (HttpException ex)
{
if (ex.StatusCode.HasValue && ex.StatusCode.Value == System.Net.HttpStatusCode.NotFound)
if (!throwAllExceptions && ex.StatusCode.HasValue && ex.StatusCode.Value == System.Net.HttpStatusCode.NotFound)
{
var defaultValue = "HDHR";
// HDHR4 doesn't have this api
lock (_modelCache)
{
_modelCache[info.Id] = new DiscoverResponse
var response = new DiscoverResponse
{
ModelNumber = defaultValue
};
// HDHR4 doesn't have this api
lock (_modelCache)
{
_modelCache[info.Id] = response;
}
return defaultValue;
return response;
}
throw;
}
}
public async Task<List<LiveTvTunerInfo>> GetTunerInfos(TunerHostInfo info, CancellationToken cancellationToken)
private async Task<List<LiveTvTunerInfo>> GetTunerInfos(TunerHostInfo info, CancellationToken cancellationToken)
{
var model = await GetModelInfo(info, cancellationToken).ConfigureAwait(false);
var model = await GetModelInfo(info, false, cancellationToken).ConfigureAwait(false);
using (var stream = await _httpClient.Get(new HttpRequestOptions()
{
Url = string.Format("{0}/tuners.html", GetApiUrl(info, false)),
CancellationToken = cancellationToken,
TimeoutMs = Convert.ToInt32(TimeSpan.FromSeconds(5).TotalMilliseconds),
BufferContent = false
}).ConfigureAwait(false))
{
var tuners = new List<LiveTvTunerInfo>();
using (var sr = new StreamReader(stream, System.Text.Encoding.UTF8))
var uri = new Uri(GetApiUrl(info, false));
using (var manager = new HdHomerunManager(_socketFactory))
{
while (!sr.EndOfStream)
// Legacy HdHomeruns are IPv4 only
var ipInfo = new IpAddressInfo(uri.Host, IpAddressFamily.InterNetwork);
for (int i = 0; i < model.TunerCount; ++i)
{
string line = StripXML(sr.ReadLine());
if (line.Contains("Channel"))
{
LiveTvTunerStatus status;
var index = line.IndexOf("Channel", StringComparison.OrdinalIgnoreCase);
var name = line.Substring(0, index - 1);
var currentChannel = line.Substring(index + 7);
if (currentChannel != "none") { status = LiveTvTunerStatus.LiveTv; } else { status = LiveTvTunerStatus.Available; }
var name = String.Format("Tuner {0}", i + 1);
var currentChannel = "none"; /// @todo Get current channel and map back to Station Id
var isAvailable = await manager.CheckTunerAvailability(ipInfo, i, cancellationToken).ConfigureAwait(false);
LiveTvTunerStatus status = isAvailable ? LiveTvTunerStatus.Available : LiveTvTunerStatus.LiveTv;
tuners.Add(new LiveTvTunerInfo
{
Name = name,
SourceType = string.IsNullOrWhiteSpace(model) ? Name : model,
SourceType = string.IsNullOrWhiteSpace(model.ModelNumber) ? Name : model.ModelNumber,
ProgramName = currentChannel,
Status = status
});
}
}
}
return tuners;
}
}
public async Task<List<LiveTvTunerInfo>> GetTunerInfos(CancellationToken cancellationToken)
{
@ -244,34 +248,6 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
return uri.AbsoluteUri.TrimEnd('/');
}
private static string StripXML(string source)
{
char[] buffer = new char[source.Length];
int bufferIndex = 0;
bool inside = false;
for (int i = 0; i < source.Length; i++)
{
char let = source[i];
if (let == '<')
{
inside = true;
continue;
}
if (let == '>')
{
inside = false;
continue;
}
if (!inside)
{
buffer[bufferIndex] = let;
bufferIndex++;
}
}
return new string(buffer, 0, bufferIndex);
}
private class Channels
{
public string GuideNumber { get; set; }
@ -284,13 +260,13 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
public int HD { get; set; }
}
private async Task<MediaSourceInfo> GetMediaSource(TunerHostInfo info, string channelId, string profile)
private MediaSourceInfo GetMediaSource(TunerHostInfo info, string channelId, ChannelInfo channelInfo, string profile)
{
int? width = null;
int? height = null;
bool isInterlaced = true;
string videoCodec = null;
string audioCodec = "ac3";
string audioCodec = null;
int? videoBitrate = null;
int? audioBitrate = null;
@ -344,21 +320,19 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
videoBitrate = 1000000;
}
var channels = await GetChannels(info, true, CancellationToken.None).ConfigureAwait(false);
var channel = channels.FirstOrDefault(i => string.Equals(i.Number, channelId, StringComparison.OrdinalIgnoreCase));
if (channel != null)
if (channelInfo != null)
{
if (string.IsNullOrWhiteSpace(videoCodec))
{
videoCodec = channel.VideoCodec;
videoCodec = channelInfo.VideoCodec;
}
audioCodec = channel.AudioCodec;
audioCodec = channelInfo.AudioCodec;
if (!videoBitrate.HasValue)
{
videoBitrate = (channel.IsHD ?? true) ? 15000000 : 2000000;
videoBitrate = (channelInfo.IsHD ?? true) ? 15000000 : 2000000;
}
audioBitrate = (channel.IsHD ?? true) ? 448000 : 192000;
audioBitrate = (channelInfo.IsHD ?? true) ? 448000 : 192000;
}
// normalize
@ -443,6 +417,82 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
return channelId.Split('_')[1];
}
private MediaSourceInfo GetLegacyMediaSource(TunerHostInfo info, string channelId, ChannelInfo channel)
{
int? width = null;
int? height = null;
bool isInterlaced = true;
string videoCodec = null;
string audioCodec = null;
int? videoBitrate = null;
int? audioBitrate = null;
if (channel != null)
{
if (string.IsNullOrWhiteSpace(videoCodec))
{
videoCodec = channel.VideoCodec;
}
audioCodec = channel.AudioCodec;
}
// normalize
if (string.Equals(videoCodec, "mpeg2", StringComparison.OrdinalIgnoreCase))
{
videoCodec = "mpeg2video";
}
string nal = null;
var url = info.Url;
var id = channelId;
id += "_" + url.GetMD5().ToString("N");
var mediaSource = new MediaSourceInfo
{
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
}
},
RequiresOpening = true,
RequiresClosing = true,
BufferMs = 0,
Container = "ts",
Id = id,
SupportsDirectPlay = false,
SupportsDirectStream = true,
SupportsTranscoding = true,
IsInfiniteStream = true
};
mediaSource.InferTotalBitrate();
return mediaSource;
}
protected override async Task<List<MediaSourceInfo>> GetChannelStreamMediaSources(TunerHostInfo info, string channelId, CancellationToken cancellationToken)
{
var list = new List<MediaSourceInfo>();
@ -453,24 +503,37 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
}
var hdhrId = GetHdHrIdFromChannelId(channelId);
var channels = await GetChannels(info, true, CancellationToken.None).ConfigureAwait(false);
var channelInfo = channels.FirstOrDefault(i => string.Equals(i.Id, channelId, StringComparison.OrdinalIgnoreCase));
var hdHomerunChannelInfo = channelInfo as HdHomerunChannelInfo;
var isLegacyTuner = hdHomerunChannelInfo != null && hdHomerunChannelInfo.IsLegacyTuner;
if (isLegacyTuner)
{
list.Add(GetLegacyMediaSource(info, hdhrId, channelInfo));
}
else
{
try
{
var model = await GetModelInfo(info, cancellationToken).ConfigureAwait(false);
model = model ?? string.Empty;
var modelInfo = await GetModelInfo(info, false, cancellationToken).ConfigureAwait(false);
var model = modelInfo == null ? string.Empty : (modelInfo.ModelNumber ?? string.Empty);
if ((model.IndexOf("hdtc", StringComparison.OrdinalIgnoreCase) != -1))
{
list.Add(await GetMediaSource(info, hdhrId, "native").ConfigureAwait(false));
list.Add(GetMediaSource(info, hdhrId, channelInfo, "native"));
if (info.AllowHWTranscoding)
{
list.Add(await GetMediaSource(info, hdhrId, "heavy").ConfigureAwait(false));
list.Add(GetMediaSource(info, hdhrId, channelInfo, "heavy"));
list.Add(await GetMediaSource(info, hdhrId, "internet540").ConfigureAwait(false));
list.Add(await GetMediaSource(info, hdhrId, "internet480").ConfigureAwait(false));
list.Add(await GetMediaSource(info, hdhrId, "internet360").ConfigureAwait(false));
list.Add(await GetMediaSource(info, hdhrId, "internet240").ConfigureAwait(false));
list.Add(await GetMediaSource(info, hdhrId, "mobile").ConfigureAwait(false));
list.Add(GetMediaSource(info, hdhrId, channelInfo, "internet540"));
list.Add(GetMediaSource(info, hdhrId, channelInfo, "internet480"));
list.Add(GetMediaSource(info, hdhrId, channelInfo, "internet360"));
list.Add(GetMediaSource(info, hdhrId, channelInfo, "internet240"));
list.Add(GetMediaSource(info, hdhrId, channelInfo, "mobile"));
}
}
}
@ -481,7 +544,8 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
if (list.Count == 0)
{
list.Add(await GetMediaSource(info, hdhrId, "native").ConfigureAwait(false));
list.Add(GetMediaSource(info, hdhrId, channelInfo, "native"));
}
}
return list;
@ -509,12 +573,27 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
}
var hdhrId = GetHdHrIdFromChannelId(channelId);
var mediaSource = await GetMediaSource(info, hdhrId, profile).ConfigureAwait(false);
var channels = await GetChannels(info, true, CancellationToken.None).ConfigureAwait(false);
var channelInfo = channels.FirstOrDefault(i => string.Equals(i.Id, channelId, StringComparison.OrdinalIgnoreCase));
var liveStream = new HdHomerunLiveStream(mediaSource, streamId, _fileSystem, _httpClient, Logger, Config.ApplicationPaths, _appHost);
liveStream.EnableStreamSharing = true;
var hdhomerunChannel = channelInfo as HdHomerunChannelInfo;
if (hdhomerunChannel != null && hdhomerunChannel.IsLegacyTuner)
{
var modelInfo = await GetModelInfo(info, false, cancellationToken).ConfigureAwait(false);
var mediaSource = GetLegacyMediaSource(info, hdhrId, channelInfo);
var liveStream = new HdHomerunUdpStream(mediaSource, streamId, hdhomerunChannel.Url, modelInfo.TunerCount, _fileSystem, _httpClient, Logger, Config.ApplicationPaths, _appHost, _socketFactory, _networkManager);
return liveStream;
}
else
{
var mediaSource = GetMediaSource(info, hdhrId, channelInfo, profile);
var liveStream = new HdHomerunHttpStream(mediaSource, streamId, _fileSystem, _httpClient, Logger, Config.ApplicationPaths, _appHost);
return liveStream;
}
}
public async Task Validate(TunerHostInfo info)
{
@ -531,18 +610,8 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
try
{
// Test it by pulling down the lineup
using (var stream = await _httpClient.Get(new HttpRequestOptions
{
Url = string.Format("{0}/discover.json", GetApiUrl(info, false)),
CancellationToken = CancellationToken.None,
BufferContent = false
}).ConfigureAwait(false))
{
var response = JsonSerializer.DeserializeFromStream<DiscoverResponse>(stream);
info.DeviceId = response.DeviceID;
}
var modelInfo = await GetModelInfo(info, true, CancellationToken.None).ConfigureAwait(false);
info.DeviceId = modelInfo.DeviceID;
}
catch (HttpException ex)
{
@ -573,6 +642,7 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
public string DeviceAuth { get; set; }
public string BaseURL { get; set; }
public string LineupURL { get; set; }
public int TunerCount { get; set; }
}
}
}

View File

@ -13,7 +13,7 @@ using MediaBrowser.Model.MediaInfo;
namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
{
public class HdHomerunLiveStream : LiveStream, IDirectStreamProvider
public class HdHomerunHttpStream : LiveStream, IDirectStreamProvider
{
private readonly ILogger _logger;
private readonly IHttpClient _httpClient;
@ -25,7 +25,7 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
private readonly TaskCompletionSource<bool> _liveStreamTaskCompletionSource = new TaskCompletionSource<bool>();
private readonly MulticastStream _multicastStream;
public HdHomerunLiveStream(MediaSourceInfo mediaSource, string originalStreamId, IFileSystem fileSystem, IHttpClient httpClient, ILogger logger, IServerApplicationPaths appPaths, IServerApplicationHost appHost)
public HdHomerunHttpStream(MediaSourceInfo mediaSource, string originalStreamId, IFileSystem fileSystem, IHttpClient httpClient, ILogger logger, IServerApplicationPaths appPaths, IServerApplicationHost appHost)
: base(mediaSource)
{
_fileSystem = fileSystem;

View File

@ -0,0 +1,406 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using MediaBrowser.Model.Net;
namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
{
public class HdHomerunManager : IDisposable
{
public static int HdHomeRunPort = 65001;
// Message constants
private static byte GetSetName = 3;
private static byte GetSetValue = 4;
private static byte GetSetLockkey = 21;
private static ushort GetSetRequest = 4;
private static ushort GetSetReply = 5;
private uint? _lockkey = null;
private int _activeTuner = 0;
private readonly ISocketFactory _socketFactory;
private IpAddressInfo _remoteIp;
public HdHomerunManager(ISocketFactory socketFactory)
{
_socketFactory = socketFactory;
}
public void Dispose()
{
var task = StopStreaming();
Task.WaitAll(task);
}
public async Task<bool> CheckTunerAvailability(IpAddressInfo remoteIp, int tuner, CancellationToken cancellationToken)
{
using (var socket = _socketFactory.CreateTcpSocket(remoteIp, HdHomeRunPort))
{
return await CheckTunerAvailability(socket, remoteIp, tuner, cancellationToken).ConfigureAwait(false);
}
}
private async Task<bool> CheckTunerAvailability(ISocket socket, IpAddressInfo remoteIp, int tuner, CancellationToken cancellationToken)
{
var ipEndPoint = new IpEndPointInfo(remoteIp, HdHomeRunPort);
var lockkeyMsg = CreateGetMessage(tuner, "lockkey");
await socket.SendAsync(lockkeyMsg, lockkeyMsg.Length, ipEndPoint, cancellationToken);
var response = await socket.ReceiveAsync(cancellationToken).ConfigureAwait(false);
string returnVal;
ParseReturnMessage(response.Buffer, response.ReceivedBytes, out returnVal);
return string.Equals(returnVal, "none", StringComparison.OrdinalIgnoreCase);
}
public async Task StartStreaming(IpAddressInfo remoteIp, IpAddressInfo localIp, int localPort, string url, int numTuners, CancellationToken cancellationToken)
{
_remoteIp = remoteIp;
// parse url for channel and program
string frequency, program;
if (!ParseUrl(url, out frequency, out program))
{
return;
}
using (var tcpClient = _socketFactory.CreateTcpSocket(_remoteIp, HdHomeRunPort))
{
if (!_lockkey.HasValue)
{
var rand = new Random();
_lockkey = (uint)rand.Next();
}
var ipEndPoint = new IpEndPointInfo(_remoteIp, HdHomeRunPort);
for (int i = 0; i < numTuners; ++i)
{
if (!await CheckTunerAvailability(tcpClient, _remoteIp, i, cancellationToken).ConfigureAwait(false))
continue;
_activeTuner = i;
var lockKeyString = String.Format("{0:d}", _lockkey.Value);
var lockkeyMsg = CreateSetMessage(i, "lockkey", lockKeyString, null);
await tcpClient.SendAsync(lockkeyMsg, lockkeyMsg.Length, ipEndPoint, cancellationToken).ConfigureAwait(false);
var response = await tcpClient.ReceiveAsync(cancellationToken).ConfigureAwait(false);
string returnVal;
// parse response to make sure it worked
if (!ParseReturnMessage(response.Buffer, response.ReceivedBytes, out returnVal))
continue;
var channelMsg = CreateSetMessage(i, "channel", frequency, _lockkey.Value);
await tcpClient.SendAsync(channelMsg, channelMsg.Length, ipEndPoint, cancellationToken).ConfigureAwait(false);
await tcpClient.ReceiveAsync(cancellationToken).ConfigureAwait(false);
// parse response to make sure it worked
if (!ParseReturnMessage(response.Buffer, response.ReceivedBytes, out returnVal))
{
await ReleaseLockkey(tcpClient).ConfigureAwait(false);
continue;
}
if (program != String.Empty)
{
var programMsg = CreateSetMessage(i, "program", program, _lockkey.Value);
await tcpClient.SendAsync(programMsg, programMsg.Length, ipEndPoint, cancellationToken).ConfigureAwait(false);
await tcpClient.ReceiveAsync(cancellationToken).ConfigureAwait(false);
// parse response to make sure it worked
if (!ParseReturnMessage(response.Buffer, response.ReceivedBytes, out returnVal))
{
await ReleaseLockkey(tcpClient).ConfigureAwait(false);
continue;
}
}
var targetValue = String.Format("rtp://{0}:{1}", localIp, localPort);
var targetMsg = CreateSetMessage(i, "target", targetValue, _lockkey.Value);
await tcpClient.SendAsync(targetMsg, targetMsg.Length, ipEndPoint, cancellationToken).ConfigureAwait(false);
response = await tcpClient.ReceiveAsync(cancellationToken).ConfigureAwait(false);
// parse response to make sure it worked
if (!ParseReturnMessage(response.Buffer, response.ReceivedBytes, out returnVal))
{
await ReleaseLockkey(tcpClient).ConfigureAwait(false);
continue;
}
break;
}
}
}
public async Task StopStreaming()
{
if (!_lockkey.HasValue)
return;
using (var socket = _socketFactory.CreateTcpSocket(_remoteIp, HdHomeRunPort))
{
await ReleaseLockkey(socket).ConfigureAwait(false);
}
}
private async Task ReleaseLockkey(ISocket tcpClient)
{
var releaseTarget = CreateSetMessage(_activeTuner, "target", "none", _lockkey);
await tcpClient.SendAsync(releaseTarget, releaseTarget.Length, new IpEndPointInfo(_remoteIp, HdHomeRunPort), CancellationToken.None).ConfigureAwait(false);
await tcpClient.ReceiveAsync(CancellationToken.None).ConfigureAwait(false);
var releaseKeyMsg = CreateSetMessage(_activeTuner, "lockkey", "none", _lockkey);
_lockkey = null;
await tcpClient.SendAsync(releaseKeyMsg, releaseKeyMsg.Length, new IpEndPointInfo(_remoteIp, HdHomeRunPort), CancellationToken.None).ConfigureAwait(false);
await tcpClient.ReceiveAsync(CancellationToken.None).ConfigureAwait(false);
}
private static bool ParseUrl(string url, out string frequency, out string program)
{
frequency = String.Empty;
program = String.Empty;
var regExp = new Regex(@"\/ch(\d+)-?(\d*)");
var match = regExp.Match(url);
if (match.Success)
{
frequency = match.Groups[1].Value;
program = match.Groups[2].Value;
return true;
}
return false;
}
private static byte[] CreateGetMessage(int tuner, string name)
{
var byteName = Encoding.UTF8.GetBytes(String.Format("/tuner{0}/{1}\0", tuner, name));
int messageLength = byteName.Length + 10; // 4 bytes for header + 4 bytes for crc + 2 bytes for tag name and length
var message = new byte[messageLength];
int offset = InsertHeaderAndName(byteName, messageLength, message);
bool flipEndian = BitConverter.IsLittleEndian;
// calculate crc and insert at the end of the message
var crcBytes = BitConverter.GetBytes(HdHomerunCrc.GetCrc32(message, messageLength - 4));
if (flipEndian)
Array.Reverse(crcBytes);
Buffer.BlockCopy(crcBytes, 0, message, offset, 4);
return message;
}
private static byte[] CreateSetMessage(int tuner, String name, String value, uint? lockkey)
{
var byteName = Encoding.UTF8.GetBytes(String.Format("/tuner{0}/{1}\0", tuner, name));
var byteValue = Encoding.UTF8.GetBytes(String.Format("{0}\0", value));
int messageLength = byteName.Length + byteValue.Length + 12;
if (lockkey.HasValue)
messageLength += 6;
var message = new byte[messageLength];
int offset = InsertHeaderAndName(byteName, messageLength, message);
bool flipEndian = BitConverter.IsLittleEndian;
message[offset] = GetSetValue;
offset++;
message[offset] = Convert.ToByte(byteValue.Length);
offset++;
Buffer.BlockCopy(byteValue, 0, message, offset, byteValue.Length);
offset += byteValue.Length;
if (lockkey.HasValue)
{
message[offset] = GetSetLockkey;
offset++;
message[offset] = (byte)4;
offset++;
var lockKeyBytes = BitConverter.GetBytes(lockkey.Value);
if (flipEndian)
Array.Reverse(lockKeyBytes);
Buffer.BlockCopy(lockKeyBytes, 0, message, offset, 4);
offset += 4;
}
// calculate crc and insert at the end of the message
var crcBytes = BitConverter.GetBytes(HdHomerunCrc.GetCrc32(message, messageLength - 4));
if (flipEndian)
Array.Reverse(crcBytes);
Buffer.BlockCopy(crcBytes, 0, message, offset, 4);
return message;
}
private static int InsertHeaderAndName(byte[] byteName, int messageLength, byte[] message)
{
// check to see if we need to flip endiannes
bool flipEndian = BitConverter.IsLittleEndian;
int offset = 0;
// create header bytes
var getSetBytes = BitConverter.GetBytes(GetSetRequest);
var msgLenBytes = BitConverter.GetBytes((ushort)(messageLength - 8)); // Subtrace 4 bytes for header and 4 bytes for crc
if (flipEndian)
{
Array.Reverse(getSetBytes);
Array.Reverse(msgLenBytes);
}
// insert header bytes into message
Buffer.BlockCopy(getSetBytes, 0, message, offset, 2);
offset += 2;
Buffer.BlockCopy(msgLenBytes, 0, message, offset, 2);
offset += 2;
// insert tag name and length
message[offset] = GetSetName;
offset++;
message[offset] = Convert.ToByte(byteName.Length);
offset++;
// insert name string
Buffer.BlockCopy(byteName, 0, message, offset, byteName.Length);
offset += byteName.Length;
return offset;
}
private static bool ParseReturnMessage(byte[] buf, int numBytes, out string returnVal)
{
returnVal = String.Empty;
if (numBytes < 4)
return false;
var flipEndian = BitConverter.IsLittleEndian;
int offset = 0;
byte[] msgTypeBytes = new byte[2];
Buffer.BlockCopy(buf, offset, msgTypeBytes, 0, msgTypeBytes.Length);
if (flipEndian)
Array.Reverse(msgTypeBytes);
var msgType = BitConverter.ToUInt16(msgTypeBytes, 0);
offset += 2;
if (msgType != GetSetReply)
return false;
byte[] msgLengthBytes = new byte[2];
Buffer.BlockCopy(buf, offset, msgLengthBytes, 0, msgLengthBytes.Length);
if (flipEndian)
Array.Reverse(msgLengthBytes);
var msgLength = BitConverter.ToUInt16(msgLengthBytes, 0);
offset += 2;
if (numBytes < msgLength + 8)
return false;
var nameTag = buf[offset];
offset++;
var nameLength = buf[offset];
offset++;
// skip the name field to get to value for return
offset += nameLength;
var valueTag = buf[offset];
offset++;
var valueLength = buf[offset];
offset++;
returnVal = Encoding.UTF8.GetString(buf, offset, valueLength - 1); // remove null terminator
return true;
}
private class HdHomerunCrc
{
private static UInt32[] crc_table = {
0x00000000, 0x77073096, 0xee0e612c, 0x990951ba,
0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,
0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec,
0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,
0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940,
0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116,
0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,
0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,
0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a,
0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818,
0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,
0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c,
0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,
0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,
0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086,
0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4,
0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,
0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,
0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe,
0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,
0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252,
0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60,
0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,
0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,
0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04,
0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a,
0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,
0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e,
0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,
0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,
0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0,
0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6,
0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,
0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d };
public static UInt32 GetCrc32(byte[] bytes, int numBytes)
{
var hash = 0xffffffff;
for (var i = 0; i < numBytes; i++)
hash = (hash >> 8) ^ crc_table[(hash ^ bytes[i]) & 0xff];
var tmp = ~hash & 0xffffffff;
var b0 = tmp & 0xff;
var b1 = (tmp >> 8) & 0xff;
var b2 = (tmp >> 16) & 0xff;
var b3 = (tmp >> 24) & 0xff;
hash = (b0 << 24) | (b1 << 16) | (b2 << 8) | b3;
return hash;
}
}
}
}

View File

@ -0,0 +1,294 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using MediaBrowser.Common.Net;
using MediaBrowser.Controller;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.LiveTv;
using MediaBrowser.Model.Dto;
using MediaBrowser.Model.IO;
using MediaBrowser.Model.Logging;
using MediaBrowser.Model.MediaInfo;
using MediaBrowser.Model.Net;
namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
{
public class HdHomerunUdpStream : LiveStream, IDirectStreamProvider
{
private readonly ILogger _logger;
private readonly IHttpClient _httpClient;
private readonly IFileSystem _fileSystem;
private readonly IServerApplicationPaths _appPaths;
private readonly IServerApplicationHost _appHost;
private readonly ISocketFactory _socketFactory;
private readonly CancellationTokenSource _liveStreamCancellationTokenSource = new CancellationTokenSource();
private readonly TaskCompletionSource<bool> _liveStreamTaskCompletionSource = new TaskCompletionSource<bool>();
private readonly MulticastStream _multicastStream;
private readonly string _channelUrl;
private readonly int _numTuners;
private readonly INetworkManager _networkManager;
public HdHomerunUdpStream(MediaSourceInfo mediaSource, string originalStreamId, string channelUrl, int numTuners, IFileSystem fileSystem, IHttpClient httpClient, ILogger logger, IServerApplicationPaths appPaths, IServerApplicationHost appHost, ISocketFactory socketFactory, INetworkManager networkManager)
: base(mediaSource)
{
_fileSystem = fileSystem;
_httpClient = httpClient;
_logger = logger;
_appPaths = appPaths;
_appHost = appHost;
_socketFactory = socketFactory;
_networkManager = networkManager;
OriginalStreamId = originalStreamId;
_multicastStream = new MulticastStream(_logger);
_channelUrl = channelUrl;
_numTuners = numTuners;
}
protected override async Task OpenInternal(CancellationToken openCancellationToken)
{
_liveStreamCancellationTokenSource.Token.ThrowIfCancellationRequested();
var mediaSource = OriginalMediaSource;
var uri = new Uri(mediaSource.Path);
var localPort = _networkManager.GetRandomUnusedUdpPort();
_logger.Info("Opening HDHR UDP Live stream from {0}", uri.Host);
var taskCompletionSource = new TaskCompletionSource<bool>();
StartStreaming(uri.Host, localPort, taskCompletionSource, _liveStreamCancellationTokenSource.Token);
//OpenedMediaSource.Protocol = MediaProtocol.File;
//OpenedMediaSource.Path = tempFile;
//OpenedMediaSource.ReadAtNativeFramerate = true;
OpenedMediaSource.Path = _appHost.GetLocalApiUrl("127.0.0.1") + "/LiveTv/LiveStreamFiles/" + UniqueId + "/stream.ts";
OpenedMediaSource.Protocol = MediaProtocol.Http;
OpenedMediaSource.SupportsDirectPlay = false;
OpenedMediaSource.SupportsDirectStream = true;
OpenedMediaSource.SupportsTranscoding = true;
await taskCompletionSource.Task.ConfigureAwait(false);
//await Task.Delay(5000).ConfigureAwait(false);
}
public override Task Close()
{
_logger.Info("Closing HDHR UDP live stream");
_liveStreamCancellationTokenSource.Cancel();
return _liveStreamTaskCompletionSource.Task;
}
private async Task StartStreaming(string remoteIp, int localPort, TaskCompletionSource<bool> openTaskCompletionSource, CancellationToken cancellationToken)
{
await Task.Run(async () =>
{
var isFirstAttempt = true;
using (var udpClient = _socketFactory.CreateUdpSocket(localPort))
{
using (var hdHomerunManager = new HdHomerunManager(_socketFactory))
{
var remoteAddress = new IpAddressInfo(remoteIp, IpAddressFamily.InterNetwork);
IpAddressInfo localAddress = null;
using (var tcpSocket = _socketFactory.CreateSocket(IpAddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp, false))
{
try
{
tcpSocket.Connect(new IpEndPointInfo(remoteAddress, HdHomerunManager.HdHomeRunPort));
localAddress = tcpSocket.LocalEndPoint.IpAddress;
tcpSocket.Close();
}
catch (Exception)
{
_logger.Error("Unable to determine local ip address for Legacy HDHomerun stream.");
return;
}
}
while (!cancellationToken.IsCancellationRequested)
{
try
{
// send url to start streaming
await hdHomerunManager.StartStreaming(remoteAddress, localAddress, localPort, _channelUrl, _numTuners, cancellationToken).ConfigureAwait(false);
var response = await udpClient.ReceiveAsync(cancellationToken).ConfigureAwait(false);
_logger.Info("Opened HDHR UDP stream from {0}", _channelUrl);
if (!cancellationToken.IsCancellationRequested)
{
Action onStarted = null;
if (isFirstAttempt)
{
onStarted = () => openTaskCompletionSource.TrySetResult(true);
}
var stream = new UdpClientStream(udpClient);
await _multicastStream.CopyUntilCancelled(stream, onStarted, cancellationToken).ConfigureAwait(false);
}
}
catch (OperationCanceledException)
{
break;
}
catch (Exception ex)
{
if (isFirstAttempt)
{
_logger.ErrorException("Error opening live stream:", ex);
openTaskCompletionSource.TrySetException(ex);
break;
}
_logger.ErrorException("Error copying live stream, will reopen", ex);
}
isFirstAttempt = false;
}
await hdHomerunManager.StopStreaming().ConfigureAwait(false);
udpClient.Dispose();
_liveStreamTaskCompletionSource.TrySetResult(true);
}
}
}).ConfigureAwait(false);
}
public Task CopyToAsync(Stream stream, CancellationToken cancellationToken)
{
return _multicastStream.CopyToAsync(stream);
}
}
// This handles the ReadAsync function only of a Stream object
// This is used to wrap a UDP socket into a stream for MulticastStream which only uses ReadAsync
public class UdpClientStream : Stream
{
private static int RtpHeaderBytes = 12;
private static int PacketSize = 1316;
private readonly ISocket _udpClient;
bool disposed;
public UdpClientStream(ISocket udpClient) : base()
{
_udpClient = udpClient;
}
public override async Task<int> ReadAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken)
{
if (buffer == null)
throw new ArgumentNullException("buffer");
if (offset + count < 0)
throw new ArgumentOutOfRangeException("offset + count must not be negative", "offset+count");
if (offset + count > buffer.Length)
throw new ArgumentException("offset + count must not be greater than the length of buffer", "offset+count");
if (disposed)
throw new ObjectDisposedException(typeof(UdpClientStream).ToString());
// This will always receive a 1328 packet size (PacketSize + RtpHeaderSize)
// The RTP header will be stripped so see how many reads we need to make to fill the buffer.
int numReads = count / PacketSize;
int totalBytesRead = 0;
for (int i = 0; i < numReads; ++i)
{
var data = await _udpClient.ReceiveAsync(cancellationToken).ConfigureAwait(false);
var bytesRead = data.ReceivedBytes - RtpHeaderBytes;
// remove rtp header
Buffer.BlockCopy(data.Buffer, RtpHeaderBytes, buffer, offset, bytesRead);
offset += bytesRead;
totalBytesRead += bytesRead;
}
return totalBytesRead;
}
protected override void Dispose(bool disposing)
{
disposed = true;
}
public override bool CanRead
{
get
{
throw new NotImplementedException();
}
}
public override bool CanSeek
{
get
{
throw new NotImplementedException();
}
}
public override bool CanWrite
{
get
{
throw new NotImplementedException();
}
}
public override long Length
{
get
{
throw new NotImplementedException();
}
}
public override long Position
{
get
{
throw new NotImplementedException();
}
set
{
throw new NotImplementedException();
}
}
public override void Flush()
{
throw new NotImplementedException();
}
public override int Read(byte[] buffer, int offset, int count)
{
throw new NotImplementedException();
}
public override long Seek(long offset, SeekOrigin origin)
{
throw new NotImplementedException();
}
public override void SetLength(long value)
{
throw new NotImplementedException();
}
public override void Write(byte[] buffer, int offset, int count)
{
throw new NotImplementedException();
}
}
}

View File

@ -128,7 +128,7 @@ namespace Emby.Server.Implementations.Udp
/// <summary>
/// The _udp client
/// </summary>
private IUdpSocket _udpClient;
private ISocket _udpClient;
private readonly ISocketFactory _socketFactory;
/// <summary>
@ -148,7 +148,7 @@ namespace Emby.Server.Implementations.Udp
{
try
{
var result = await _udpClient.ReceiveAsync().ConfigureAwait(false);
var result = await _udpClient.ReceiveAsync(CancellationToken.None).ConfigureAwait(false);
OnMessageReceived(result);
}

View File

@ -12,7 +12,9 @@ namespace MediaBrowser.Common.Net
/// Gets a random port number that is currently available
/// </summary>
/// <returns>System.Int32.</returns>
int GetRandomUnusedPort();
int GetRandomUnusedTcpPort();
int GetRandomUnusedUdpPort();
/// <summary>
/// Returns MAC Address from first Network Card in Computer

View File

@ -137,9 +137,9 @@
<Compile Include="Dto\NameValuePair.cs" />
<Compile Include="Logging\IConsoleLogger.cs" />
<Compile Include="Net\IpEndPointInfo.cs" />
<Compile Include="Net\ISocket.cs" />
<Compile Include="Net\IAcceptSocket.cs" />
<Compile Include="Net\ISocketFactory.cs" />
<Compile Include="Net\IUdpSocket.cs" />
<Compile Include="Net\ISocket.cs" />
<Compile Include="Net\SocketReceiveResult.cs" />
<Compile Include="Services\IHttpResult.cs" />
<Compile Include="Social\ISharingRepository.cs" />

View File

@ -0,0 +1,28 @@
using System;
namespace MediaBrowser.Model.Net
{
public interface IAcceptSocket : IDisposable
{
bool DualMode { get; }
IpEndPointInfo LocalEndPoint { get; }
IpEndPointInfo RemoteEndPoint { get; }
void Close();
void Shutdown(bool both);
void Listen(int backlog);
void Bind(IpEndPointInfo endpoint);
void Connect(IpEndPointInfo endPoint);
void StartAccept(Action<IAcceptSocket> onAccept, Func<bool> isClosed);
}
public class SocketCreateException : Exception
{
public SocketCreateException(string errorCode, Exception originalException)
: base(errorCode, originalException)
{
ErrorCode = errorCode;
}
public string ErrorCode { get; private set; }
}
}

View File

@ -1,28 +1,28 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace MediaBrowser.Model.Net
{
/// <summary>
/// Provides a common interface across platforms for UDP sockets used by this SSDP implementation.
/// </summary>
public interface ISocket : IDisposable
{
bool DualMode { get; }
IpEndPointInfo LocalEndPoint { get; }
IpEndPointInfo RemoteEndPoint { get; }
void Close();
void Shutdown(bool both);
void Listen(int backlog);
void Bind(IpEndPointInfo endpoint);
IpAddressInfo LocalIPAddress { get; }
void StartAccept(Action<ISocket> onAccept, Func<bool> isClosed);
}
/// <summary>
/// Waits for and returns the next UDP message sent to this socket (uni or multicast).
/// </summary>
/// <returns></returns>
Task<SocketReceiveResult> ReceiveAsync(CancellationToken cancellationToken);
public class SocketCreateException : Exception
{
public SocketCreateException(string errorCode, Exception originalException)
: base(errorCode, originalException)
{
ErrorCode = errorCode;
}
public string ErrorCode { get; private set; }
/// <summary>
/// Sends a UDP message to a particular end point (uni or multicast).
/// </summary>
Task SendAsync(byte[] buffer, int bytes, IpEndPointInfo endPoint, CancellationToken cancellationToken);
}
}

View File

@ -2,7 +2,7 @@
namespace MediaBrowser.Model.Net
{
/// <summary>
/// Implemented by components that can create a platform specific UDP socket implementation, and wrap it in the cross platform <see cref="IUdpSocket"/> interface.
/// Implemented by components that can create a platform specific UDP socket implementation, and wrap it in the cross platform <see cref="ISocket"/> interface.
/// </summary>
public interface ISocketFactory
{
@ -11,13 +11,15 @@ namespace MediaBrowser.Model.Net
/// Createa a new unicast socket using the specified local port number.
/// </summary>
/// <param name="localPort">The local port to bind to.</param>
/// <returns>A <see cref="IUdpSocket"/> implementation.</returns>
IUdpSocket CreateUdpSocket(int localPort);
/// <returns>A <see cref="ISocket"/> implementation.</returns>
ISocket CreateUdpSocket(int localPort);
ISocket CreateTcpSocket(IpAddressInfo remoteAddress, int remotePort);
/// <summary>
/// Createa a new unicast socket using the specified local port number.
/// </summary>
IUdpSocket CreateSsdpUdpSocket(IpAddressInfo localIp, int localPort);
ISocket CreateSsdpUdpSocket(IpAddressInfo localIp, int localPort);
/// <summary>
/// Createa a new multicast socket using the specified multicast IP address, multicast time to live and local port.
@ -25,10 +27,10 @@ namespace MediaBrowser.Model.Net
/// <param name="ipAddress">The multicast IP address to bind to.</param>
/// <param name="multicastTimeToLive">The multicast time to live value. Actually a maximum number of network hops for UDP packets.</param>
/// <param name="localPort">The local port to bind to.</param>
/// <returns>A <see cref="IUdpSocket"/> implementation.</returns>
IUdpSocket CreateUdpMulticastSocket(string ipAddress, int multicastTimeToLive, int localPort);
/// <returns>A <see cref="ISocket"/> implementation.</returns>
ISocket CreateUdpMulticastSocket(string ipAddress, int multicastTimeToLive, int localPort);
ISocket CreateSocket(IpAddressFamily family, SocketType socketType, ProtocolType protocolType, bool dualMode);
IAcceptSocket CreateSocket(IpAddressFamily family, SocketType socketType, ProtocolType protocolType, bool dualMode);
}
public enum SocketType

View File

@ -1,28 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace MediaBrowser.Model.Net
{
/// <summary>
/// Provides a common interface across platforms for UDP sockets used by this SSDP implementation.
/// </summary>
public interface IUdpSocket : IDisposable
{
IpAddressInfo LocalIPAddress { get; }
/// <summary>
/// Waits for and returns the next UDP message sent to this socket (uni or multicast).
/// </summary>
/// <returns></returns>
Task<SocketReceiveResult> ReceiveAsync();
/// <summary>
/// Sends a UDP message to a particular end point (uni or multicast).
/// </summary>
Task SendAsync(byte[] buffer, int bytes, IpEndPointInfo endPoint, CancellationToken cancellationToken);
}
}

View File

@ -1,105 +0,0 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using IniParser;
using IniParser.Model;
using MediaBrowser.Controller.LiveTv;
using MediaBrowser.Model.LiveTv;
using MediaBrowser.Model.Logging;
using MediaBrowser.Server.Implementations.LiveTv.TunerHosts.SatIp.Rtsp;
namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.SatIp
{
public class ChannelScan
{
private readonly ILogger _logger;
public ChannelScan(ILogger logger)
{
_logger = logger;
}
public async Task<List<ChannelInfo>> Scan(TunerHostInfo info, CancellationToken cancellationToken)
{
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);
var list = new List<ChannelInfo>();
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);
_logger.Info("DVB Count: {0}", count);
var index = 1;
var source = "1";
while (index <= count)
{
cancellationToken.ThrowIfCancellationRequested();
using (var rtspSession = new RtspSession(info.Url, _logger))
{
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());
}
rtspSession.Setup(tuning, "unicast");
rtspSession.Play(string.Empty);
int signallevel;
int signalQuality;
rtspSession.Describe(out signallevel, out signalQuality);
await Task.Delay(500).ConfigureAwait(false);
index++;
}
}
}
}
return list;
}
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;
}
}
public class SatChannel
{
// TODO: Add properties
}
}

View File

@ -1,79 +0,0 @@
/*
Copyright (C) <2007-2016> <Kay Diefenthal>
SatIp.RtspSample is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
SatIp.RtspSample is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with SatIp.RtspSample. If not, see <http://www.gnu.org/licenses/>.
*/
namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.SatIp.Rtcp
{
public class ReportBlock
{
/// <summary>
/// Get the length of the block.
/// </summary>
public int BlockLength { get { return (24); } }
/// <summary>
/// Get the synchronization source.
/// </summary>
public string SynchronizationSource { get; private set; }
/// <summary>
/// Get the fraction lost.
/// </summary>
public int FractionLost { get; private set; }
/// <summary>
/// Get the cumulative packets lost.
/// </summary>
public int CumulativePacketsLost { get; private set; }
/// <summary>
/// Get the highest number received.
/// </summary>
public int HighestNumberReceived { get; private set; }
/// <summary>
/// Get the inter arrival jitter.
/// </summary>
public int InterArrivalJitter { get; private set; }
/// <summary>
/// Get the timestamp of the last report.
/// </summary>
public int LastReportTimeStamp { get; private set; }
/// <summary>
/// Get the delay since the last report.
/// </summary>
public int DelaySinceLastReport { get; private set; }
/// <summary>
/// Initialize a new instance of the ReportBlock class.
/// </summary>
public ReportBlock() { }
/// <summary>
/// Unpack the data in a packet.
/// </summary>
/// <param name="buffer">The buffer containing the packet.</param>
/// <param name="offset">The offset to the first byte of the packet within the buffer.</param>
/// <returns>An ErrorSpec instance if an error occurs; null otherwise.</returns>
public void Process(byte[] buffer, int offset)
{
SynchronizationSource = Utils.ConvertBytesToString(buffer, offset, 4);
FractionLost = buffer[offset + 4];
CumulativePacketsLost = Utils.Convert3BytesToInt(buffer, offset + 5);
HighestNumberReceived = Utils.Convert4BytesToInt(buffer, offset + 8);
InterArrivalJitter = Utils.Convert4BytesToInt(buffer, offset + 12);
LastReportTimeStamp = Utils.Convert4BytesToInt(buffer, offset + 16);
DelaySinceLastReport = Utils.Convert4BytesToInt(buffer, offset + 20);
}
}
}

View File

@ -1,68 +0,0 @@
/*
Copyright (C) <2007-2016> <Kay Diefenthal>
SatIp.RtspSample is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
SatIp.RtspSample is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with SatIp.RtspSample. If not, see <http://www.gnu.org/licenses/>.
*/
using System.Text;
namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.SatIp.Rtcp
{
class RtcpAppPacket : RtcpPacket
{
/// <summary>
/// Get the synchronization source.
/// </summary>
public int SynchronizationSource { get; private set; }
/// <summary>
/// Get the name.
/// </summary>
public string Name { get; private set; }
/// <summary>
/// Get the identity.
/// </summary>
public int Identity { get; private set; }
/// <summary>
/// Get the variable data portion.
/// </summary>
public string Data { get; private set; }
public override void Parse(byte[] buffer, int offset)
{
base.Parse(buffer, offset);
SynchronizationSource = Utils.Convert4BytesToInt(buffer, offset + 4);
Name = Utils.ConvertBytesToString(buffer, offset + 8, 4);
Identity = Utils.Convert2BytesToInt(buffer, offset + 12);
int dataLength = Utils.Convert2BytesToInt(buffer, offset + 14);
if (dataLength != 0)
Data = Utils.ConvertBytesToString(buffer, offset + 16, dataLength);
}
public override string ToString()
{
StringBuilder sb = new StringBuilder();
sb.AppendFormat("Application Specific.\n");
sb.AppendFormat("Version : {0} .\n", Version);
sb.AppendFormat("Padding : {0} .\n", Padding);
sb.AppendFormat("Report Count : {0} .\n", ReportCount);
sb.AppendFormat("PacketType: {0} .\n", Type);
sb.AppendFormat("Length : {0} .\n", Length);
sb.AppendFormat("SynchronizationSource : {0} .\n", SynchronizationSource);
sb.AppendFormat("Name : {0} .\n", Name);
sb.AppendFormat("Identity : {0} .\n", Identity);
sb.AppendFormat("Data : {0} .\n", Data);
sb.AppendFormat(".\n");
return sb.ToString();
}
}
}

View File

@ -1,59 +0,0 @@
using System.Collections.ObjectModel;
/*
Copyright (C) <2007-2016> <Kay Diefenthal>
SatIp.RtspSample is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
SatIp.RtspSample is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with SatIp.RtspSample. If not, see <http://www.gnu.org/licenses/>.
*/
using System.Text;
namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.SatIp.Rtcp
{
public class RtcpByePacket :RtcpPacket
{
public Collection<string> SynchronizationSources { get; private set; }
public string ReasonForLeaving { get; private set; }
public override void Parse(byte[] buffer, int offset)
{
base.Parse(buffer, offset);
SynchronizationSources = new Collection<string>();
int index = 4;
while (SynchronizationSources.Count < ReportCount)
{
SynchronizationSources.Add(Utils.ConvertBytesToString(buffer, offset + index, 4));
index += 4;
}
if (index < Length)
{
int reasonLength = buffer[offset + index];
ReasonForLeaving = Utils.ConvertBytesToString(buffer, offset + index + 1, reasonLength);
}
}
public override string ToString()
{
StringBuilder sb = new StringBuilder();
sb.AppendFormat("ByeBye .\n");
sb.AppendFormat("Version : {0} .\n", Version);
sb.AppendFormat("Padding : {0} .\n", Padding);
sb.AppendFormat("Report Count : {0} .\n", ReportCount);
sb.AppendFormat("PacketType: {0} .\n", Type);
sb.AppendFormat("Length : {0} .\n", Length);
sb.AppendFormat("SynchronizationSources : {0} .\n", SynchronizationSources);
sb.AppendFormat("ReasonForLeaving : {0} .\n", ReasonForLeaving);
sb.AppendFormat(".\n");
return sb.ToString();
}
}
}

View File

@ -1,203 +0,0 @@
/*
Copyright (C) <2007-2016> <Kay Diefenthal>
SatIp.RtspSample is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
SatIp.RtspSample is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with SatIp.RtspSample. If not, see <http://www.gnu.org/licenses/>.
*/
using System;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using MediaBrowser.Model.Logging;
namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.SatIp.Rtcp
{
public class RtcpListener
{
private readonly ILogger _logger;
private Thread _rtcpListenerThread;
private AutoResetEvent _rtcpListenerThreadStopEvent = null;
private UdpClient _udpClient;
private IPEndPoint _multicastEndPoint;
private IPEndPoint _serverEndPoint;
private TransmissionMode _transmissionMode;
public RtcpListener(String address, int port, TransmissionMode mode,ILogger logger)
{
_logger = logger;
_transmissionMode = mode;
switch (mode)
{
case TransmissionMode.Unicast:
_udpClient = new UdpClient(new IPEndPoint(IPAddress.Parse(address), port));
_serverEndPoint = new IPEndPoint(IPAddress.Any, 0);
break;
case TransmissionMode.Multicast:
_multicastEndPoint = new IPEndPoint(IPAddress.Parse(address), port);
_serverEndPoint = new IPEndPoint(IPAddress.Any, 0);
_udpClient = new UdpClient();
_udpClient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 1);
_udpClient.ExclusiveAddressUse = false;
_udpClient.Client.Bind(new IPEndPoint(IPAddress.Any, port));
_udpClient.JoinMulticastGroup(_multicastEndPoint.Address);
break;
}
//StartRtcpListenerThread();
}
public void StartRtcpListenerThread()
{
// Kill the existing thread if it is in "zombie" state.
if (_rtcpListenerThread != null && !_rtcpListenerThread.IsAlive)
{
StopRtcpListenerThread();
}
if (_rtcpListenerThread == null)
{
_logger.Info("SAT>IP : starting new RTCP listener thread");
_rtcpListenerThreadStopEvent = new AutoResetEvent(false);
_rtcpListenerThread = new Thread(new ThreadStart(RtcpListenerThread));
_rtcpListenerThread.Name = string.Format("SAT>IP tuner RTCP listener");
_rtcpListenerThread.IsBackground = true;
_rtcpListenerThread.Priority = ThreadPriority.Lowest;
_rtcpListenerThread.Start();
}
}
public void StopRtcpListenerThread()
{
if (_rtcpListenerThread != null)
{
if (!_rtcpListenerThread.IsAlive)
{
_logger.Info("SAT>IP : aborting old RTCP listener thread");
_rtcpListenerThread.Abort();
}
else
{
_rtcpListenerThreadStopEvent.Set();
if (!_rtcpListenerThread.Join(400 * 2))
{
_logger.Info("SAT>IP : failed to join RTCP listener thread, aborting thread");
_rtcpListenerThread.Abort();
}
}
_rtcpListenerThread = null;
if (_rtcpListenerThreadStopEvent != null)
{
_rtcpListenerThreadStopEvent.Close();
_rtcpListenerThreadStopEvent = null;
}
}
}
private void RtcpListenerThread()
{
try
{
bool receivedGoodBye = false;
try
{
_udpClient.Client.ReceiveTimeout = 400;
IPEndPoint serverEndPoint = new IPEndPoint(IPAddress.Any, 0);
while (!receivedGoodBye && !_rtcpListenerThreadStopEvent.WaitOne(1))
{
byte[] packets = _udpClient.Receive(ref serverEndPoint);
if (packets == null)
{
continue;
}
int offset = 0;
while (offset < packets.Length)
{
switch (packets[offset + 1])
{
case 200: //sr
var sr = new RtcpSenderReportPacket();
sr.Parse(packets, offset);
offset += sr.Length;
break;
case 201: //rr
var rr = new RtcpReceiverReportPacket();
rr.Parse(packets, offset);
offset += rr.Length;
break;
case 202: //sd
var sd = new RtcpSourceDescriptionPacket();
sd.Parse(packets, offset);
offset += sd.Length;
break;
case 203: // bye
var bye = new RtcpByePacket();
bye.Parse(packets, offset);
receivedGoodBye = true;
OnPacketReceived(new RtcpPacketReceivedArgs(bye));
offset += bye.Length;
break;
case 204: // app
var app = new RtcpAppPacket();
app.Parse(packets, offset);
OnPacketReceived(new RtcpPacketReceivedArgs(app));
offset += app.Length;
break;
}
}
}
}
finally
{
switch (_transmissionMode)
{
case TransmissionMode.Multicast:
_udpClient.DropMulticastGroup(_multicastEndPoint.Address);
_udpClient.Close();
break;
case TransmissionMode.Unicast:
_udpClient.Close();
break;
}
}
}
catch (ThreadAbortException)
{
}
catch (Exception ex)
{
_logger.Info(string.Format("SAT>IP : RTCP listener thread exception"), ex);
return;
}
_logger.Info("SAT>IP : RTCP listener thread stopping");
}
public delegate void PacketReceivedHandler(object sender, RtcpPacketReceivedArgs e);
public event PacketReceivedHandler PacketReceived;
public class RtcpPacketReceivedArgs : EventArgs
{
public Object Packet { get; private set; }
public RtcpPacketReceivedArgs(Object packet)
{
Packet = packet;
}
}
protected void OnPacketReceived(RtcpPacketReceivedArgs args)
{
if (PacketReceived != null)
{
PacketReceived(this, args);
}
}
}
}

View File

@ -1,37 +0,0 @@
/*
Copyright (C) <2007-2016> <Kay Diefenthal>
SatIp.RtspSample is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
SatIp.RtspSample is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with SatIp.RtspSample. If not, see <http://www.gnu.org/licenses/>.
*/
namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.SatIp.Rtcp
{
public abstract class RtcpPacket
{
public int Version { get; private set; }
public bool Padding { get; private set; }
public int ReportCount { get; private set; }
public int Type { get; private set; }
public int Length { get; private set; }
public virtual void Parse(byte[] buffer, int offset)
{
Version = buffer[offset] >> 6;
Padding = (buffer[offset] & 0x20) != 0;
ReportCount = buffer[offset] & 0x1f;
Type = buffer[offset + 1];
Length = (Utils.Convert2BytesToInt(buffer, offset + 2) * 4) + 4;
}
}
}

View File

@ -1,68 +0,0 @@
using System.Collections.ObjectModel;
/*
Copyright (C) <2007-2016> <Kay Diefenthal>
SatIp.RtspSample is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
SatIp.RtspSample is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with SatIp.RtspSample. If not, see <http://www.gnu.org/licenses/>.
*/
using System.Text;
namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.SatIp.Rtcp
{
public class RtcpReceiverReportPacket :RtcpPacket
{
public string SynchronizationSource { get; private set; }
public Collection<ReportBlock> ReportBlocks { get; private set; }
public byte[] ProfileExtension { get; private set; }
public override void Parse(byte[] buffer, int offset)
{
base.Parse(buffer, offset);
SynchronizationSource = Utils.ConvertBytesToString(buffer, offset + 4, 4);
ReportBlocks = new Collection<ReportBlock>();
int index = 8;
while (ReportBlocks.Count < ReportCount)
{
ReportBlock reportBlock = new ReportBlock();
reportBlock.Process(buffer, offset + index);
ReportBlocks.Add(reportBlock);
index += reportBlock.BlockLength;
}
if (index < Length)
{
ProfileExtension = new byte[Length - index];
for (int extensionIndex = 0; index < Length; index++)
{
ProfileExtension[extensionIndex] = buffer[offset + index];
extensionIndex++;
}
}
}
public override string ToString()
{
StringBuilder sb = new StringBuilder();
sb.AppendFormat("Receiver Report.\n");
sb.AppendFormat("Version : {0} .\n", Version);
sb.AppendFormat("Padding : {0} .\n", Padding);
sb.AppendFormat("Report Count : {0} .\n", ReportCount);
sb.AppendFormat("PacketType: {0} .\n", Type);
sb.AppendFormat("Length : {0} .\n", Length);
sb.AppendFormat("SynchronizationSource : {0} .\n", SynchronizationSource);
sb.AppendFormat(".\n");
return sb.ToString();
}
}
}

View File

@ -1,105 +0,0 @@
using System.Collections.ObjectModel;
/*
Copyright (C) <2007-2016> <Kay Diefenthal>
SatIp.RtspSample is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
SatIp.RtspSample is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with SatIp.RtspSample. If not, see <http://www.gnu.org/licenses/>.
*/
using System.Text;
namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.SatIp.Rtcp
{
public class RtcpSenderReportPacket : RtcpPacket
{
#region Properties
/// <summary>
/// Get the synchronization source.
/// </summary>
public int SynchronizationSource { get; private set; }
/// <summary>
/// Get the NPT timestamp.
/// </summary>
public long NPTTimeStamp { get; private set; }
/// <summary>
/// Get the RTP timestamp.
/// </summary>
public int RTPTimeStamp { get; private set; }
/// <summary>
/// Get the packet count.
/// </summary>
public int SenderPacketCount { get; private set; }
/// <summary>
/// Get the octet count.
/// </summary>
public int SenderOctetCount { get; private set; }
/// <summary>
/// Get the list of report blocks.
/// </summary>
public Collection<ReportBlock> ReportBlocks { get; private set; }
/// <summary>
/// Get the profile extension data.
/// </summary>
public byte[] ProfileExtension { get; private set; }
#endregion
public override void Parse(byte[] buffer, int offset)
{
base.Parse(buffer, offset);
SynchronizationSource = Utils.Convert4BytesToInt(buffer, offset + 4);
NPTTimeStamp = Utils.Convert8BytesToLong(buffer, offset + 8);
RTPTimeStamp = Utils.Convert4BytesToInt(buffer, offset + 16);
SenderPacketCount = Utils.Convert4BytesToInt(buffer, offset + 20);
SenderOctetCount = Utils.Convert4BytesToInt(buffer, offset + 24);
ReportBlocks = new Collection<ReportBlock>();
int index = 28;
while (ReportBlocks.Count < ReportCount)
{
ReportBlock reportBlock = new ReportBlock();
reportBlock.Process(buffer, offset + index);
ReportBlocks.Add(reportBlock);
index += reportBlock.BlockLength;
}
if (index < Length)
{
ProfileExtension = new byte[Length - index];
for (int extensionIndex = 0; index < Length; index++)
{
ProfileExtension[extensionIndex] = buffer[offset + index];
extensionIndex++;
}
}
}
public override string ToString()
{
StringBuilder sb = new StringBuilder();
sb.AppendFormat("Sender Report.\n");
sb.AppendFormat("Version : {0} .\n", Version);
sb.AppendFormat("Padding : {0} .\n", Padding);
sb.AppendFormat("Report Count : {0} .\n", ReportCount);
sb.AppendFormat("PacketType: {0} .\n", Type);
sb.AppendFormat("Length : {0} .\n", Length);
sb.AppendFormat("SynchronizationSource : {0} .\n", SynchronizationSource);
sb.AppendFormat("NTP Timestamp : {0} .\n", Utils.NptTimestampToDateTime(NPTTimeStamp));
sb.AppendFormat("RTP Timestamp : {0} .\n", RTPTimeStamp);
sb.AppendFormat("Sender PacketCount : {0} .\n", SenderPacketCount);
sb.AppendFormat("Sender Octet Count : {0} .\n", SenderOctetCount);
sb.AppendFormat(".\n");
return sb.ToString();
}
}
}

View File

@ -1,57 +0,0 @@
using System.Collections.ObjectModel;
/*
Copyright (C) <2007-2016> <Kay Diefenthal>
SatIp.RtspSample is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
SatIp.RtspSample is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with SatIp.RtspSample. If not, see <http://www.gnu.org/licenses/>.
*/
using System.Text;
namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.SatIp.Rtcp
{
class RtcpSourceDescriptionPacket :RtcpPacket
{ /// <summary>
/// Get the list of source descriptions.
/// </summary>
public Collection<SourceDescriptionBlock> Descriptions;
public override void Parse(byte[] buffer, int offset)
{
base.Parse(buffer, offset);
Descriptions = new Collection<SourceDescriptionBlock>();
int index = 4;
while (Descriptions.Count < ReportCount)
{
SourceDescriptionBlock descriptionBlock = new SourceDescriptionBlock();
descriptionBlock.Process(buffer, offset + index);
Descriptions.Add(descriptionBlock);
index += descriptionBlock.BlockLength;
}
}
public override string ToString()
{
StringBuilder sb = new StringBuilder();
sb.AppendFormat("Source Description.\n");
sb.AppendFormat("Version : {0} .\n", Version);
sb.AppendFormat("Padding : {0} .\n", Padding);
sb.AppendFormat("Report Count : {0} .\n", ReportCount);
sb.AppendFormat("PacketType: {0} .\n", Type);
sb.AppendFormat("Length : {0} .\n", Length);
sb.AppendFormat("Descriptions : {0} .\n", Descriptions);
sb.AppendFormat(".\n");
return sb.ToString();
}
}
}

View File

@ -1,65 +0,0 @@
/*
Copyright (C) <2007-2016> <Kay Diefenthal>
SatIp.RtspSample is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
SatIp.RtspSample is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with SatIp.RtspSample. If not, see <http://www.gnu.org/licenses/>.
*/
using System.Collections.ObjectModel;
namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.SatIp.Rtcp
{
class SourceDescriptionBlock
{
/// <summary>
/// Get the length of the block.
/// </summary>
public int BlockLength { get { return (blockLength + (blockLength % 4)); } }
/// <summary>
/// Get the synchronization source.
/// </summary>
public string SynchronizationSource { get; private set; }
/// <summary>
/// Get the list of source descriptioni items.
/// </summary>
public Collection<SourceDescriptionItem> Items;
private int blockLength;
public void Process(byte[] buffer, int offset)
{
SynchronizationSource = Utils.ConvertBytesToString(buffer, offset, 4);
Items = new Collection<SourceDescriptionItem>();
int index = 4;
bool done = false;
do
{
SourceDescriptionItem item = new SourceDescriptionItem();
item.Process(buffer, offset + index);
if (item.Type != 0)
{
Items.Add(item);
index += item.ItemLength;
blockLength += item.ItemLength;
}
else
{
blockLength++;
done = true;
}
}
while (!done);
}
}
}

View File

@ -1,60 +0,0 @@
/*
Copyright (C) <2007-2016> <Kay Diefenthal>
SatIp.RtspSample is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
SatIp.RtspSample is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with SatIp.RtspSample. If not, see <http://www.gnu.org/licenses/>.
*/
namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.SatIp.Rtcp
{
/// <summary>
/// The class that describes a source description item.
/// </summary>
public class SourceDescriptionItem
{
/// <summary>
/// Get the type.
/// </summary>
public int Type { get; private set; }
/// <summary>
/// Get the text.
/// </summary>
public string Text { get; private set; }
/// <summary>
/// Get the length of the item.
/// </summary>
public int ItemLength { get { return (Text.Length + 2); } }
/// <summary>
/// Initialize a new instance of the SourceDescriptionItem class.
/// </summary>
public SourceDescriptionItem() { }
/// <summary>
/// Unpack the data in a packet.
/// </summary>
/// <param name="buffer">The buffer containing the packet.</param>
/// <param name="offset">The offset to the first byte of the packet within the buffer.</param>
/// <returns>An ErrorSpec instance if an error occurs; null otherwise.</returns>
public void Process(byte[] buffer, int offset)
{
Type = buffer[offset];
if (Type != 0)
{
int length = buffer[offset + 1];
Text = Utils.ConvertBytesToString(buffer, offset + 2, length);
}
}
}
}

View File

@ -1,160 +0,0 @@
/*
Copyright (C) <2007-2016> <Kay Diefenthal>
SatIp.RtspSample is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
SatIp.RtspSample is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with SatIp.RtspSample. If not, see <http://www.gnu.org/licenses/>.
*/
using System;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using MediaBrowser.Model.Logging;
namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.SatIp.Rtp
{
public class RtpListener
{
private readonly ILogger _logger;
private AutoResetEvent _rtpListenerThreadStopEvent;
private Thread _rtpListenerThread;
private UdpClient _udpClient;
private IPEndPoint _multicastEndPoint;
private IPEndPoint _serverEndPoint;
private TransmissionMode _transmissionMode;
public RtpListener(String address, int port,TransmissionMode mode,ILogger logger)
{
_logger = logger;
_transmissionMode = mode;
switch (mode)
{
case TransmissionMode.Unicast:
_udpClient = new UdpClient(new IPEndPoint(IPAddress.Parse(address), port));
_serverEndPoint = new IPEndPoint(IPAddress.Any, 0);
break;
case TransmissionMode.Multicast:
_multicastEndPoint = new IPEndPoint(IPAddress.Parse(address), port);
_serverEndPoint = null;
_udpClient = new UdpClient();
_udpClient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 1);
_udpClient.ExclusiveAddressUse = false;
_udpClient.Client.Bind(new IPEndPoint(IPAddress.Any, _multicastEndPoint.Port));
_udpClient.JoinMulticastGroup(_multicastEndPoint.Address);
break;
}
//StartRtpListenerThread();
}
public void StartRtpListenerThread()
{
// Kill the existing thread if it is in "zombie" state.
if (_rtpListenerThread != null && !_rtpListenerThread.IsAlive)
{
StopRtpListenerThread();
}
if (_rtpListenerThread == null)
{
_logger.Info("SAT>IP : starting new RTP listener thread");
_rtpListenerThreadStopEvent = new AutoResetEvent(false);
_rtpListenerThread = new Thread(new ThreadStart(RtpListenerThread));
_rtpListenerThread.Name = string.Format("SAT>IP tuner RTP listener");
_rtpListenerThread.IsBackground = true;
_rtpListenerThread.Priority = ThreadPriority.Lowest;
_rtpListenerThread.Start();
}
}
public void StopRtpListenerThread()
{
if (_rtpListenerThread != null)
{
if (!_rtpListenerThread.IsAlive)
{
_logger.Info("SAT>IP : aborting old RTP listener thread");
_rtpListenerThread.Abort();
}
else
{
_rtpListenerThreadStopEvent.Set();
if (!_rtpListenerThread.Join(400 * 2))
{
_logger.Info("SAT>IP : failed to join RTP listener thread, aborting thread");
_rtpListenerThread.Abort();
}
}
_rtpListenerThread = null;
if (_rtpListenerThreadStopEvent != null)
{
_rtpListenerThreadStopEvent.Close();
_rtpListenerThreadStopEvent = null;
}
}
}
private void RtpListenerThread()
{
try
{
try
{
while (!_rtpListenerThreadStopEvent.WaitOne(1))
{
byte[] receivedbytes = _udpClient.Receive(ref _serverEndPoint);
RtpPacket packet = RtpPacket.Decode(receivedbytes);
OnPacketReceived(new RtpPacketReceivedArgs(packet));
}
}
finally
{
switch (_transmissionMode)
{
case TransmissionMode.Multicast:
_udpClient.DropMulticastGroup(_multicastEndPoint.Address);
_udpClient.Close();
break;
case TransmissionMode.Unicast:
_udpClient.Close();
break;
}
}
}
catch (ThreadAbortException)
{
}
catch (Exception ex)
{
_logger.Info(string.Format("SAT>IP : RTP listener thread exception"), ex);
return;
}
_logger.Info("SAT>IP : RTP listener thread stopping");
}
public delegate void PacketReceivedHandler(object sender, RtpPacketReceivedArgs e);
public event PacketReceivedHandler PacketReceived;
public class RtpPacketReceivedArgs : EventArgs
{
public RtpPacket Packet { get; private set; }
public RtpPacketReceivedArgs(RtpPacket packet)
{
Packet = packet;
}
}
protected void OnPacketReceived(RtpPacketReceivedArgs args)
{
if (PacketReceived != null)
{
PacketReceived(this, args);
}
}
}
}

View File

@ -1,116 +0,0 @@
/*
Copyright (C) <2007-2016> <Kay Diefenthal>
SatIp.RtspSample is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
SatIp.RtspSample is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with SatIp.RtspSample. If not, see <http://www.gnu.org/licenses/>.
*/
using System;
using System.Collections.ObjectModel;
using System.Text;
namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.SatIp.Rtp
{
public class RtpPacket
{
private static int MinHeaderLength = 12;
public int HeaderSize = MinHeaderLength;
public int Version { get; set; }
public Boolean Padding { get; set; }
public Boolean Extension { get; set; }
public int ContributingSourceCount { get; set; }
public Boolean Marker { get; set; }
public int PayloadType { get; set; }
public int SequenceNumber { get; set; }
public long TimeStamp { get; set; }
public long SynchronizationSource { get; set; }
public Collection<string> ContributingSources { get; private set; }
public int ExtensionHeaderId = 0;
public int ExtensionHeaderLength = 0;
public bool HasPayload { get; set; }
public byte[] Payload { get; set; }
public RtpPacket()
{
}
public static RtpPacket Decode(byte[] buffer)
{
var packet = new RtpPacket();
packet.Version = buffer[0] >> 6;
packet.Padding = (buffer[0] & 0x20) != 0;
packet.Extension = (buffer[0] & 0x10) != 0;
packet.ContributingSourceCount = buffer[0] & 0x0f;
packet.Marker = (buffer[1] & 0x80) != 0;
packet.PayloadType = buffer[1] & 0x7f;
packet.SequenceNumber = Utils.Convert2BytesToInt(buffer, 2);
packet.TimeStamp = Utils.Convert4BytesToLong(buffer, 4);
packet.SynchronizationSource = Utils.Convert4BytesToLong(buffer, 8);
int index = 12;
if (packet.ContributingSourceCount != 0)
{
packet.ContributingSources = new Collection<string>();
while (packet.ContributingSources.Count < packet.ContributingSourceCount)
{
packet.ContributingSources.Add(Utils.ConvertBytesToString(buffer, index, 4));
index += 4;
}
}
var dataoffset = 0;
if (!packet.Extension)
dataoffset = index;
else
{
packet.ExtensionHeaderId = Utils.Convert2BytesToInt(buffer, index);
packet.ExtensionHeaderLength = Utils.Convert2BytesToInt(buffer, index + 2);
dataoffset = index + packet.ExtensionHeaderLength + 4;
}
var dataLength = buffer.Length - dataoffset;
if (dataLength > dataoffset)
{
packet.HasPayload = true;
packet.Payload = new byte[dataLength];
Array.Copy(buffer, dataoffset, packet.Payload, 0, dataLength);
}
else
{
packet.HasPayload = false;
}
return packet;
}
public override string ToString()
{
StringBuilder sb = new StringBuilder();
sb.AppendFormat("RTP Packet");
sb.AppendFormat("Version: {0} \n", Version);
sb.AppendFormat("Padding: {0} \n", Padding);
sb.AppendFormat("Extension: {0} \n", Extension);
sb.AppendFormat("Contributing Source Identifiers Count: {0} \n", ContributingSourceCount);
sb.AppendFormat("Marker: {0} \n", Marker);
sb.AppendFormat("Payload Type: {0} \n", PayloadType);
sb.AppendFormat("Sequence Number: {0} \n", SequenceNumber);
sb.AppendFormat("Timestamp: {0} .\n", TimeStamp);
sb.AppendFormat("Synchronization Source Identifier: {0} \n", SynchronizationSource);
sb.AppendFormat("\n");
return sb.ToString();
}
}
}

View File

@ -1,88 +0,0 @@
/*
Copyright (C) <2007-2016> <Kay Diefenthal>
SatIp.RtspSample is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
SatIp.RtspSample is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with SatIp.RtspSample. If not, see <http://www.gnu.org/licenses/>.
*/
using System.Collections.Generic;
namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.SatIp.Rtsp
{
/// <summary>
/// Standard RTSP request methods.
/// </summary>
public sealed class RtspMethod
{
public override int GetHashCode()
{
return (_name != null ? _name.GetHashCode() : 0);
}
private readonly string _name;
private static readonly IDictionary<string, RtspMethod> _values = new Dictionary<string, RtspMethod>();
public static readonly RtspMethod Describe = new RtspMethod("DESCRIBE");
public static readonly RtspMethod Announce = new RtspMethod("ANNOUNCE");
public static readonly RtspMethod GetParameter = new RtspMethod("GET_PARAMETER");
public static readonly RtspMethod Options = new RtspMethod("OPTIONS");
public static readonly RtspMethod Pause = new RtspMethod("PAUSE");
public static readonly RtspMethod Play = new RtspMethod("PLAY");
public static readonly RtspMethod Record = new RtspMethod("RECORD");
public static readonly RtspMethod Redirect = new RtspMethod("REDIRECT");
public static readonly RtspMethod Setup = new RtspMethod("SETUP");
public static readonly RtspMethod SetParameter = new RtspMethod("SET_PARAMETER");
public static readonly RtspMethod Teardown = new RtspMethod("TEARDOWN");
private RtspMethod(string name)
{
_name = name;
_values.Add(name, this);
}
public override string ToString()
{
return _name;
}
public override bool Equals(object obj)
{
var method = obj as RtspMethod;
if (method != null && this == method)
{
return true;
}
return false;
}
public static ICollection<RtspMethod> Values
{
get { return _values.Values; }
}
public static explicit operator RtspMethod(string name)
{
RtspMethod value;
if (!_values.TryGetValue(name, out value))
{
return null;
}
return value;
}
public static implicit operator string(RtspMethod method)
{
return method._name;
}
}
}

View File

@ -1,140 +0,0 @@
/*
Copyright (C) <2007-2016> <Kay Diefenthal>
SatIp.RtspSample is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
SatIp.RtspSample is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with SatIp.RtspSample. If not, see <http://www.gnu.org/licenses/>.
*/
using System.Collections.Generic;
using System.Text;
namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.SatIp.Rtsp
{
/// <summary>
/// A simple class that can be used to serialise RTSP requests.
/// </summary>
public class RtspRequest
{
private readonly RtspMethod _method;
private readonly string _uri;
private readonly int _majorVersion;
private readonly int _minorVersion;
private IDictionary<string, string> _headers = new Dictionary<string, string>();
private string _body = string.Empty;
/// <summary>
/// Initialise a new instance of the <see cref="RtspRequest"/> class.
/// </summary>
/// <param name="method">The request method.</param>
/// <param name="uri">The request URI</param>
/// <param name="majorVersion">The major version number.</param>
/// <param name="minorVersion">The minor version number.</param>
public RtspRequest(RtspMethod method, string uri, int majorVersion, int minorVersion)
{
_method = method;
_uri = uri;
_majorVersion = majorVersion;
_minorVersion = minorVersion;
}
/// <summary>
/// Get the request method.
/// </summary>
public RtspMethod Method
{
get
{
return _method;
}
}
/// <summary>
/// Get the request URI.
/// </summary>
public string Uri
{
get
{
return _uri;
}
}
/// <summary>
/// Get the request major version number.
/// </summary>
public int MajorVersion
{
get
{
return _majorVersion;
}
}
/// <summary>
/// Get the request minor version number.
/// </summary>
public int MinorVersion
{
get
{
return _minorVersion;
}
}
/// <summary>
/// Get or set the request headers.
/// </summary>
public IDictionary<string, string> Headers
{
get
{
return _headers;
}
set
{
_headers = value;
}
}
/// <summary>
/// Get or set the request body.
/// </summary>
public string Body
{
get
{
return _body;
}
set
{
_body = value;
}
}
/// <summary>
/// Serialise this request.
/// </summary>
/// <returns>raw request bytes</returns>
public byte[] Serialise()
{
var request = new StringBuilder();
request.AppendFormat("{0} {1} RTSP/{2}.{3}\r\n", _method, _uri, _majorVersion, _minorVersion);
foreach (var header in _headers)
{
request.AppendFormat("{0}: {1}\r\n", header.Key, header.Value);
}
request.AppendFormat("\r\n{0}", _body);
return Encoding.UTF8.GetBytes(request.ToString());
}
}
}

View File

@ -1,149 +0,0 @@
/*
Copyright (C) <2007-2016> <Kay Diefenthal>
SatIp.RtspSample is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
SatIp.RtspSample is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with SatIp.RtspSample. If not, see <http://www.gnu.org/licenses/>.
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.SatIp.Rtsp
{
/// <summary>
/// A simple class that can be used to deserialise RTSP responses.
/// </summary>
public class RtspResponse
{
private static readonly Regex RegexStatusLine = new Regex(@"RTSP/(\d+)\.(\d+)\s+(\d+)\s+([^.]+?)\r\n(.*)", RegexOptions.Singleline);
private int _majorVersion = 1;
private int _minorVersion;
private RtspStatusCode _statusCode;
private string _reasonPhrase;
private IDictionary<string, string> _headers;
private string _body;
/// <summary>
/// Initialise a new instance of the <see cref="RtspResponse"/> class.
/// </summary>
private RtspResponse()
{
}
/// <summary>
/// Get the response major version number.
/// </summary>
public int MajorVersion
{
get
{
return _majorVersion;
}
}
/// <summary>
/// Get the response minor version number.
/// </summary>
public int MinorVersion
{
get
{
return _minorVersion;
}
}
/// <summary>
/// Get the response status code.
/// </summary>
public RtspStatusCode StatusCode
{
get
{
return _statusCode;
}
}
/// <summary>
/// Get the response reason phrase.
/// </summary>
public string ReasonPhrase
{
get
{
return _reasonPhrase;
}
}
/// <summary>
/// Get the response headers.
/// </summary>
public IDictionary<string, string> Headers
{
get
{
return _headers;
}
}
/// <summary>
/// Get the response body.
/// </summary>
public string Body
{
get
{
return _body;
}
set
{
_body = value;
}
}
/// <summary>
/// Deserialise/parse an RTSP response.
/// </summary>
/// <param name="responseBytes">The raw response bytes.</param>
/// <param name="responseByteCount">The number of valid bytes in the response.</param>
/// <returns>a response object</returns>
public static RtspResponse Deserialise(byte[] responseBytes, int responseByteCount)
{
var response = new RtspResponse();
var responseString = Encoding.UTF8.GetString(responseBytes, 0, responseByteCount);
var m = RegexStatusLine.Match(responseString);
if (m.Success)
{
response._majorVersion = int.Parse(m.Groups[1].Captures[0].Value);
response._minorVersion = int.Parse(m.Groups[2].Captures[0].Value);
response._statusCode = (RtspStatusCode)int.Parse(m.Groups[3].Captures[0].Value);
response._reasonPhrase = m.Groups[4].Captures[0].Value;
responseString = m.Groups[5].Captures[0].Value;
}
var sections = responseString.Split(new[] { "\r\n\r\n" }, StringSplitOptions.None);
response._body = sections[1];
var headers = sections[0].Split(new[] { "\r\n" }, StringSplitOptions.None);
response._headers = new Dictionary<string, string>();
foreach (var headerInfo in headers.Select(header => header.Split(':')))
{
response._headers.Add(headerInfo[0], headerInfo[1].Trim());
}
return response;
}
}
}

View File

@ -1,688 +0,0 @@
/*
Copyright (C) <2007-2016> <Kay Diefenthal>
SatIp.RtspSample is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
SatIp.RtspSample is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with SatIp.RtspSample. If not, see <http://www.gnu.org/licenses/>.
*/
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Net;
using System.Net.NetworkInformation;
using System.Net.Sockets;
using System.Text.RegularExpressions;
using MediaBrowser.Model.Logging;
namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.SatIp.Rtsp
{
public class RtspSession : IDisposable
{
#region Private Fields
private static readonly Regex RegexRtspSessionHeader = new Regex(@"\s*([^\s;]+)(;timeout=(\d+))?");
private const int DefaultRtspSessionTimeout = 30; // unit = s
private static readonly Regex RegexDescribeResponseSignalInfo = new Regex(@";tuner=\d+,(\d+),(\d+),(\d+),", RegexOptions.Singleline | RegexOptions.IgnoreCase);
private string _address;
private string _rtspSessionId;
public string RtspSessionId
{
get { return _rtspSessionId; }
set { _rtspSessionId = value; }
}
private int _rtspSessionTimeToLive = 0;
private string _rtspStreamId;
private int _clientRtpPort;
private int _clientRtcpPort;
private int _serverRtpPort;
private int _serverRtcpPort;
private int _rtpPort;
private int _rtcpPort;
private string _rtspStreamUrl;
private string _destination;
private string _source;
private string _transport;
private int _signalLevel;
private int _signalQuality;
private Socket _rtspSocket;
private int _rtspSequenceNum = 1;
private bool _disposed = false;
private readonly ILogger _logger;
#endregion
#region Constructor
public RtspSession(string address, ILogger logger)
{
if (string.IsNullOrWhiteSpace(address))
{
throw new ArgumentNullException("address");
}
_address = address;
_logger = logger;
_logger.Info("Creating RtspSession with url {0}", address);
}
~RtspSession()
{
Dispose(false);
}
#endregion
#region Properties
#region Rtsp
public string RtspStreamId
{
get { return _rtspStreamId; }
set { if (_rtspStreamId != value) { _rtspStreamId = value; OnPropertyChanged("RtspStreamId"); } }
}
public string RtspStreamUrl
{
get { return _rtspStreamUrl; }
set { if (_rtspStreamUrl != value) { _rtspStreamUrl = value; OnPropertyChanged("RtspStreamUrl"); } }
}
public int RtspSessionTimeToLive
{
get
{
if (_rtspSessionTimeToLive == 0)
_rtspSessionTimeToLive = DefaultRtspSessionTimeout;
return _rtspSessionTimeToLive * 1000 - 20;
}
set { if (_rtspSessionTimeToLive != value) { _rtspSessionTimeToLive = value; OnPropertyChanged("RtspSessionTimeToLive"); } }
}
#endregion
#region Rtp Rtcp
/// <summary>
/// The LocalEndPoint Address
/// </summary>
public string Destination
{
get
{
if (string.IsNullOrEmpty(_destination))
{
var result = "";
var host = Dns.GetHostName();
var hostentry = Dns.GetHostEntry(host);
foreach (var ip in hostentry.AddressList.Where(ip => ip.AddressFamily == AddressFamily.InterNetwork))
{
result = ip.ToString();
}
_destination = result;
}
return _destination;
}
set
{
if (_destination != value)
{
_destination = value;
OnPropertyChanged("Destination");
}
}
}
/// <summary>
/// The RemoteEndPoint Address
/// </summary>
public string Source
{
get { return _source; }
set
{
if (_source != value)
{
_source = value;
OnPropertyChanged("Source");
}
}
}
/// <summary>
/// The Media Data Delivery RemoteEndPoint Port if we use Unicast
/// </summary>
public int ServerRtpPort
{
get
{
return _serverRtpPort;
}
set { if (_serverRtpPort != value) { _serverRtpPort = value; OnPropertyChanged("ServerRtpPort"); } }
}
/// <summary>
/// The Media Metadata Delivery RemoteEndPoint Port if we use Unicast
/// </summary>
public int ServerRtcpPort
{
get { return _serverRtcpPort; }
set { if (_serverRtcpPort != value) { _serverRtcpPort = value; OnPropertyChanged("ServerRtcpPort"); } }
}
/// <summary>
/// The Media Data Delivery LocalEndPoint Port if we use Unicast
/// </summary>
public int ClientRtpPort
{
get { return _clientRtpPort; }
set { if (_clientRtpPort != value) { _clientRtpPort = value; OnPropertyChanged("ClientRtpPort"); } }
}
/// <summary>
/// The Media Metadata Delivery LocalEndPoint Port if we use Unicast
/// </summary>
public int ClientRtcpPort
{
get { return _clientRtcpPort; }
set { if (_clientRtcpPort != value) { _clientRtcpPort = value; OnPropertyChanged("ClientRtcpPort"); } }
}
/// <summary>
/// The Media Data Delivery RemoteEndPoint Port if we use Multicast
/// </summary>
public int RtpPort
{
get { return _rtpPort; }
set { if (_rtpPort != value) { _rtpPort = value; OnPropertyChanged("RtpPort"); } }
}
/// <summary>
/// The Media Meta Delivery RemoteEndPoint Port if we use Multicast
/// </summary>
public int RtcpPort
{
get { return _rtcpPort; }
set { if (_rtcpPort != value) { _rtcpPort = value; OnPropertyChanged("RtcpPort"); } }
}
#endregion
public string Transport
{
get
{
if (string.IsNullOrEmpty(_transport))
{
_transport = "unicast";
}
return _transport;
}
set
{
if (_transport != value)
{
_transport = value;
OnPropertyChanged("Transport");
}
}
}
public int SignalLevel
{
get { return _signalLevel; }
set { if (_signalLevel != value) { _signalLevel = value; OnPropertyChanged("SignalLevel"); } }
}
public int SignalQuality
{
get { return _signalQuality; }
set { if (_signalQuality != value) { _signalQuality = value; OnPropertyChanged("SignalQuality"); } }
}
#endregion
#region Private Methods
private void ProcessSessionHeader(string sessionHeader, string response)
{
if (!string.IsNullOrEmpty(sessionHeader))
{
var m = RegexRtspSessionHeader.Match(sessionHeader);
if (!m.Success)
{
_logger.Error("Failed to tune, RTSP {0} response session header {1} format not recognised", response, sessionHeader);
}
_rtspSessionId = m.Groups[1].Captures[0].Value;
_rtspSessionTimeToLive = m.Groups[3].Captures.Count == 1 ? int.Parse(m.Groups[3].Captures[0].Value) : DefaultRtspSessionTimeout;
}
}
private void ProcessTransportHeader(string transportHeader)
{
if (!string.IsNullOrEmpty(transportHeader))
{
var transports = transportHeader.Split(',');
foreach (var transport in transports)
{
if (transport.Trim().StartsWith("RTP/AVP"))
{
var sections = transport.Split(';');
foreach (var section in sections)
{
var parts = section.Split('=');
if (parts[0].Equals("server_port"))
{
var ports = parts[1].Split('-');
_serverRtpPort = int.Parse(ports[0]);
_serverRtcpPort = int.Parse(ports[1]);
}
else if (parts[0].Equals("destination"))
{
_destination = parts[1];
}
else if (parts[0].Equals("port"))
{
var ports = parts[1].Split('-');
_rtpPort = int.Parse(ports[0]);
_rtcpPort = int.Parse(ports[1]);
}
else if (parts[0].Equals("ttl"))
{
_rtspSessionTimeToLive = int.Parse(parts[1]);
}
else if (parts[0].Equals("source"))
{
_source = parts[1];
}
else if (parts[0].Equals("client_port"))
{
var ports = parts[1].Split('-');
var rtp = int.Parse(ports[0]);
var rtcp = int.Parse(ports[1]);
//if (!rtp.Equals(_rtpPort))
//{
// Logger.Error("SAT>IP base: server specified RTP client port {0} instead of {1}", rtp, _rtpPort);
//}
//if (!rtcp.Equals(_rtcpPort))
//{
// Logger.Error("SAT>IP base: server specified RTCP client port {0} instead of {1}", rtcp, _rtcpPort);
//}
_rtpPort = rtp;
_rtcpPort = rtcp;
}
}
}
}
}
}
private void Connect()
{
_rtspSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
var ip = IPAddress.Parse(_address);
var rtspEndpoint = new IPEndPoint(ip, 554);
_rtspSocket.Connect(rtspEndpoint);
}
private void Disconnect()
{
if (_rtspSocket != null && _rtspSocket.Connected)
{
_rtspSocket.Shutdown(SocketShutdown.Both);
_rtspSocket.Close();
}
}
private void SendRequest(RtspRequest request)
{
if (_rtspSocket == null)
{
Connect();
}
try
{
request.Headers.Add("CSeq", _rtspSequenceNum.ToString());
_rtspSequenceNum++;
byte[] requestBytes = request.Serialise();
if (_rtspSocket != null)
{
var requestBytesCount = _rtspSocket.Send(requestBytes, requestBytes.Length, SocketFlags.None);
if (requestBytesCount < 1)
{
}
}
}
catch (Exception e)
{
_logger.Error(e.Message);
}
}
private void ReceiveResponse(out RtspResponse response)
{
response = null;
var responseBytesCount = 0;
byte[] responseBytes = new byte[1024];
try
{
responseBytesCount = _rtspSocket.Receive(responseBytes, responseBytes.Length, SocketFlags.None);
response = RtspResponse.Deserialise(responseBytes, responseBytesCount);
string contentLengthString;
int contentLength = 0;
if (response.Headers.TryGetValue("Content-Length", out contentLengthString))
{
contentLength = int.Parse(contentLengthString);
if ((string.IsNullOrEmpty(response.Body) && contentLength > 0) || response.Body.Length < contentLength)
{
if (response.Body == null)
{
response.Body = string.Empty;
}
while (responseBytesCount > 0 && response.Body.Length < contentLength)
{
responseBytesCount = _rtspSocket.Receive(responseBytes, responseBytes.Length, SocketFlags.None);
response.Body += System.Text.Encoding.UTF8.GetString(responseBytes, 0, responseBytesCount);
}
}
}
}
catch (SocketException)
{
}
}
#endregion
#region Public Methods
public RtspStatusCode Setup(string query, string transporttype)
{
RtspRequest request;
RtspResponse response;
//_rtspClient = new RtspClient(_rtspDevice.ServerAddress);
if ((_rtspSocket == null))
{
Connect();
}
if (string.IsNullOrEmpty(_rtspSessionId))
{
request = new RtspRequest(RtspMethod.Setup, string.Format("rtsp://{0}:{1}/?{2}", _address, 554, query), 1, 0);
switch (transporttype)
{
case "multicast":
request.Headers.Add("Transport", string.Format("RTP/AVP;multicast"));
break;
case "unicast":
var activeTcpConnections = IPGlobalProperties.GetIPGlobalProperties().GetActiveTcpConnections();
var usedPorts = new HashSet<int>();
foreach (var connection in activeTcpConnections)
{
usedPorts.Add(connection.LocalEndPoint.Port);
}
for (var port = 40000; port <= 65534; port += 2)
{
if (!usedPorts.Contains(port) && !usedPorts.Contains(port + 1))
{
_clientRtpPort = port;
_clientRtcpPort = port + 1;
break;
}
}
request.Headers.Add("Transport", string.Format("RTP/AVP;unicast;client_port={0}-{1}", _clientRtpPort, _clientRtcpPort));
break;
}
}
else
{
request = new RtspRequest(RtspMethod.Setup, string.Format("rtsp://{0}:{1}/?{2}", _address, 554, query), 1, 0);
switch (transporttype)
{
case "multicast":
request.Headers.Add("Transport", string.Format("RTP/AVP;multicast"));
break;
case "unicast":
request.Headers.Add("Transport", string.Format("RTP/AVP;unicast;client_port={0}-{1}", _clientRtpPort, _clientRtcpPort));
break;
}
}
SendRequest(request);
ReceiveResponse(out response);
//if (_rtspClient.SendRequest(request, out response) != RtspStatusCode.Ok)
//{
// Logger.Error("Failed to tune, non-OK RTSP SETUP status code {0} {1}", response.StatusCode, response.ReasonPhrase);
//}
if (!response.Headers.TryGetValue("com.ses.streamID", out _rtspStreamId))
{
_logger.Error(string.Format("Failed to tune, not able to locate Stream ID header in RTSP SETUP response"));
}
string sessionHeader;
if (!response.Headers.TryGetValue("Session", out sessionHeader))
{
_logger.Error(string.Format("Failed to tune, not able to locate Session header in RTSP SETUP response"));
}
ProcessSessionHeader(sessionHeader, "Setup");
string transportHeader;
if (!response.Headers.TryGetValue("Transport", out transportHeader))
{
_logger.Error(string.Format("Failed to tune, not able to locate Transport header in RTSP SETUP response"));
}
ProcessTransportHeader(transportHeader);
return response.StatusCode;
}
public RtspStatusCode Play(string query)
{
if ((_rtspSocket == null))
{
Connect();
}
//_rtspClient = new RtspClient(_rtspDevice.ServerAddress);
RtspResponse response;
string data;
if (string.IsNullOrEmpty(query))
{
data = string.Format("rtsp://{0}:{1}/stream={2}", _address,
554, _rtspStreamId);
}
else
{
data = string.Format("rtsp://{0}:{1}/stream={2}?{3}", _address,
554, _rtspStreamId, query);
}
var request = new RtspRequest(RtspMethod.Play, data, 1, 0);
request.Headers.Add("Session", _rtspSessionId);
SendRequest(request);
ReceiveResponse(out response);
//if (_rtspClient.SendRequest(request, out response) != RtspStatusCode.Ok)
//{
// Logger.Error("Failed to tune, non-OK RTSP SETUP status code {0} {1}", response.StatusCode, response.ReasonPhrase);
//}
//Logger.Info("RtspSession-Play : \r\n {0}", response);
string sessionHeader;
if (!response.Headers.TryGetValue("Session", out sessionHeader))
{
_logger.Error(string.Format("Failed to tune, not able to locate Session header in RTSP Play response"));
}
ProcessSessionHeader(sessionHeader, "Play");
string rtpinfoHeader;
if (!response.Headers.TryGetValue("RTP-Info", out rtpinfoHeader))
{
_logger.Error(string.Format("Failed to tune, not able to locate Rtp-Info header in RTSP Play response"));
}
return response.StatusCode;
}
public RtspStatusCode Options()
{
if ((_rtspSocket == null))
{
Connect();
}
//_rtspClient = new RtspClient(_rtspDevice.ServerAddress);
RtspRequest request;
RtspResponse response;
if (string.IsNullOrEmpty(_rtspSessionId))
{
request = new RtspRequest(RtspMethod.Options, string.Format("rtsp://{0}:{1}/", _address, 554), 1, 0);
}
else
{
request = new RtspRequest(RtspMethod.Options, string.Format("rtsp://{0}:{1}/", _address, 554), 1, 0);
request.Headers.Add("Session", _rtspSessionId);
}
SendRequest(request);
ReceiveResponse(out response);
//if (_rtspClient.SendRequest(request, out response) != RtspStatusCode.Ok)
//{
// Logger.Error("Failed to tune, non-OK RTSP SETUP status code {0} {1}", response.StatusCode, response.ReasonPhrase);
//}
//Logger.Info("RtspSession-Options : \r\n {0}", response);
string sessionHeader;
if (!response.Headers.TryGetValue("Session", out sessionHeader))
{
_logger.Error(string.Format("Failed to tune, not able to locate session header in RTSP Options response"));
}
ProcessSessionHeader(sessionHeader, "Options");
string optionsHeader;
if (!response.Headers.TryGetValue("Public", out optionsHeader))
{
_logger.Error(string.Format("Failed to tune, not able to Options header in RTSP Options response"));
}
return response.StatusCode;
}
public RtspStatusCode Describe(out int level, out int quality)
{
if ((_rtspSocket == null))
{
Connect();
}
//_rtspClient = new RtspClient(_rtspDevice.ServerAddress);
RtspRequest request;
RtspResponse response;
level = 0;
quality = 0;
if (string.IsNullOrEmpty(_rtspSessionId))
{
request = new RtspRequest(RtspMethod.Describe, string.Format("rtsp://{0}:{1}/", _address, 554), 1, 0);
request.Headers.Add("Accept", "application/sdp");
}
else
{
request = new RtspRequest(RtspMethod.Describe, string.Format("rtsp://{0}:{1}/stream={2}", _address, 554, _rtspStreamId), 1, 0);
request.Headers.Add("Accept", "application/sdp");
request.Headers.Add("Session", _rtspSessionId);
}
SendRequest(request);
ReceiveResponse(out response);
//if (_rtspClient.SendRequest(request, out response) != RtspStatusCode.Ok)
//{
// Logger.Error("Failed to tune, non-OK RTSP Describe status code {0} {1}", response.StatusCode, response.ReasonPhrase);
//}
//Logger.Info("RtspSession-Describe : \r\n {0}", response);
string sessionHeader;
if (!response.Headers.TryGetValue("Session", out sessionHeader))
{
_logger.Error(string.Format("Failed to tune, not able to locate session header in RTSP Describe response"));
}
ProcessSessionHeader(sessionHeader, "Describe");
var m = RegexDescribeResponseSignalInfo.Match(response.Body);
if (m.Success)
{
//isSignalLocked = m.Groups[2].Captures[0].Value.Equals("1");
level = int.Parse(m.Groups[1].Captures[0].Value) * 100 / 255; // level: 0..255 => 0..100
quality = int.Parse(m.Groups[3].Captures[0].Value) * 100 / 15; // quality: 0..15 => 0..100
}
/*
v=0
o=- 1378633020884883 1 IN IP4 192.168.2.108
s=SatIPServer:1 4
t=0 0
a=tool:idl4k
m=video 52780 RTP/AVP 33
c=IN IP4 0.0.0.0
b=AS:5000
a=control:stream=4
a=fmtp:33 ver=1.0;tuner=1,0,0,0,12344,h,dvbs2,,off,,22000,34;pids=0,100,101,102,103,106
=sendonly
*/
return response.StatusCode;
}
public RtspStatusCode TearDown()
{
if ((_rtspSocket == null))
{
Connect();
}
//_rtspClient = new RtspClient(_rtspDevice.ServerAddress);
RtspResponse response;
var request = new RtspRequest(RtspMethod.Teardown, string.Format("rtsp://{0}:{1}/stream={2}", _address, 554, _rtspStreamId), 1, 0);
request.Headers.Add("Session", _rtspSessionId);
SendRequest(request);
ReceiveResponse(out response);
//if (_rtspClient.SendRequest(request, out response) != RtspStatusCode.Ok)
//{
// Logger.Error("Failed to tune, non-OK RTSP Teardown status code {0} {1}", response.StatusCode, response.ReasonPhrase);
//}
return response.StatusCode;
}
#endregion
#region Public Events
////public event PropertyChangedEventHandler PropertyChanged;
#endregion
#region Protected Methods
protected void OnPropertyChanged(string name)
{
//var handler = PropertyChanged;
//if (handler != null)
//{
// handler(this, new PropertyChangedEventArgs(name));
//}
}
#endregion
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);//Disconnect();
}
protected virtual void Dispose(bool disposing)
{
if (!_disposed)
{
if (disposing)
{
TearDown();
Disconnect();
}
}
_disposed = true;
}
}
}

View File

@ -1,251 +0,0 @@
/*
Copyright (C) <2007-2016> <Kay Diefenthal>
SatIp.RtspSample is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
SatIp.RtspSample is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with SatIp.RtspSample. If not, see <http://www.gnu.org/licenses/>.
*/
using System.ComponentModel;
namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.SatIp.Rtsp
{
/// <summary>
/// Standard RTSP status codes.
/// </summary>
public enum RtspStatusCode
{
/// <summary>
/// 100 continue
/// </summary>
Continue = 100,
/// <summary>
/// 200 OK
/// </summary>
[Description("Okay")]
Ok = 200,
/// <summary>
/// 201 created
/// </summary>
Created = 201,
/// <summary>
/// 250 low on storage space
/// </summary>
[Description("Low On Storage Space")]
LowOnStorageSpace = 250,
/// <summary>
/// 300 multiple choices
/// </summary>
[Description("Multiple Choices")]
MultipleChoices = 300,
/// <summary>
/// 301 moved permanently
/// </summary>
[Description("Moved Permanently")]
MovedPermanently = 301,
/// <summary>
/// 302 moved temporarily
/// </summary>
[Description("Moved Temporarily")]
MovedTemporarily = 302,
/// <summary>
/// 303 see other
/// </summary>
[Description("See Other")]
SeeOther = 303,
/// <summary>
/// 304 not modified
/// </summary>
[Description("Not Modified")]
NotModified = 304,
/// <summary>
/// 305 use proxy
/// </summary>
[Description("Use Proxy")]
UseProxy = 305,
/// <summary>
/// 400 bad request
/// </summary>
[Description("Bad Request")]
BadRequest = 400,
/// <summary>
/// 401 unauthorised
/// </summary>
Unauthorised = 401,
/// <summary>
/// 402 payment required
/// </summary>
[Description("Payment Required")]
PaymentRequired = 402,
/// <summary>
/// 403 forbidden
/// </summary>
Forbidden = 403,
/// <summary>
/// 404 not found
/// </summary>
[Description("Not Found")]
NotFound = 404,
/// <summary>
/// 405 method not allowed
/// </summary>
[Description("Method Not Allowed")]
MethodNotAllowed = 405,
/// <summary>
/// 406 not acceptable
/// </summary>
[Description("Not Acceptable")]
NotAcceptable = 406,
/// <summary>
/// 407 proxy authentication required
/// </summary>
[Description("Proxy Authentication Required")]
ProxyAuthenticationRequred = 407,
/// <summary>
/// 408 request time-out
/// </summary>
[Description("Request Time-Out")]
RequestTimeOut = 408,
/// <summary>
/// 410 gone
/// </summary>
Gone = 410,
/// <summary>
/// 411 length required
/// </summary>
[Description("Length Required")]
LengthRequired = 411,
/// <summary>
/// 412 precondition failed
/// </summary>
[Description("Precondition Failed")]
PreconditionFailed = 412,
/// <summary>
/// 413 request entity too large
/// </summary>
[Description("Request Entity Too Large")]
RequestEntityTooLarge = 413,
/// <summary>
/// 414 request URI too large
/// </summary>
[Description("Request URI Too Large")]
RequestUriTooLarge = 414,
/// <summary>
/// 415 unsupported media type
/// </summary>
[Description("Unsupported Media Type")]
UnsupportedMediaType = 415,
/// <summary>
/// 451 parameter not understood
/// </summary>
[Description("Parameter Not Understood")]
ParameterNotUnderstood = 451,
/// <summary>
/// 452 conference not found
/// </summary>
[Description("Conference Not Found")]
ConferenceNotFound = 452,
/// <summary>
/// 453 not enough bandwidth
/// </summary>
[Description("Not Enough Bandwidth")]
NotEnoughBandwidth = 453,
/// <summary>
/// 454 session not found
/// </summary>
[Description("Session Not Found")]
SessionNotFound = 454,
/// <summary>
/// 455 method not valid in this state
/// </summary>
[Description("Method Not Valid In This State")]
MethodNotValidInThisState = 455,
/// <summary>
/// 456 header field not valid for this resource
/// </summary>
[Description("Header Field Not Valid For This Resource")]
HeaderFieldNotValidForThisResource = 456,
/// <summary>
/// 457 invalid range
/// </summary>
[Description("Invalid Range")]
InvalidRange = 457,
/// <summary>
/// 458 parameter is read-only
/// </summary>
[Description("Parameter Is Read-Only")]
ParameterIsReadOnly = 458,
/// <summary>
/// 459 aggregate operation not allowed
/// </summary>
[Description("Aggregate Operation Not Allowed")]
AggregateOperationNotAllowed = 459,
/// <summary>
/// 460 only aggregate operation allowed
/// </summary>
[Description("Only Aggregate Operation Allowed")]
OnlyAggregateOperationAllowed = 460,
/// <summary>
/// 461 unsupported transport
/// </summary>
[Description("Unsupported Transport")]
UnsupportedTransport = 461,
/// <summary>
/// 462 destination unreachable
/// </summary>
[Description("Destination Unreachable")]
DestinationUnreachable = 462,
/// <summary>
/// 500 internal server error
/// </summary>
[Description("Internal Server Error")]
InternalServerError = 500,
/// <summary>
/// 501 not implemented
/// </summary>
[Description("Not Implemented")]
NotImplemented = 501,
/// <summary>
/// 502 bad gateway
/// </summary>
[Description("Bad Gateway")]
BadGateway = 502,
/// <summary>
/// 503 service unavailable
/// </summary>
[Description("Service Unavailable")]
ServiceUnavailable = 503,
/// <summary>
/// 504 gateway time-out
/// </summary>
[Description("Gateway Time-Out")]
GatewayTimeOut = 504,
/// <summary>
/// 505 RTSP version not supported
/// </summary>
[Description("RTSP Version Not Supported")]
RtspVersionNotSupported = 505,
/// <summary>
/// 551 option not supported
/// </summary>
[Description("Option Not Supported")]
OptionNotSupported = 551
}
}

View File

@ -1,347 +0,0 @@
using System;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using System.Xml;
using MediaBrowser.Common.Configuration;
using MediaBrowser.Common.Net;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Dlna;
using MediaBrowser.Controller.LiveTv;
using MediaBrowser.Controller.Plugins;
using MediaBrowser.Model.LiveTv;
using MediaBrowser.Model.Logging;
using MediaBrowser.Model.Serialization;
using MediaBrowser.Model.Extensions;
using System.Xml.Linq;
using MediaBrowser.Model.Dlna;
using MediaBrowser.Model.Events;
namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.SatIp
{
public class SatIpDiscovery : IServerEntryPoint
{
private readonly IDeviceDiscovery _deviceDiscovery;
private readonly IServerConfigurationManager _config;
private readonly ILogger _logger;
private readonly ILiveTvManager _liveTvManager;
private readonly SemaphoreSlim _semaphore = new SemaphoreSlim(1, 1);
private readonly IHttpClient _httpClient;
private readonly IJsonSerializer _json;
private int _tunerCountDVBS=0;
private int _tunerCountDVBC=0;
private int _tunerCountDVBT=0;
private bool _supportsDVBS=false;
private bool _supportsDVBC=false;
private bool _supportsDVBT=false;
public static SatIpDiscovery Current;
public SatIpDiscovery(IDeviceDiscovery deviceDiscovery, IServerConfigurationManager config, ILogger logger, ILiveTvManager liveTvManager, IHttpClient httpClient, IJsonSerializer json)
{
_deviceDiscovery = deviceDiscovery;
_config = config;
_logger = logger;
_liveTvManager = liveTvManager;
_httpClient = httpClient;
_json = json;
Current = this;
}
public void Run()
{
_deviceDiscovery.DeviceDiscovered += _deviceDiscovery_DeviceDiscovered;
}
void _deviceDiscovery_DeviceDiscovered(object sender, GenericEventArgs<UpnpDeviceInfo> e)
{
var info = e.Argument;
string st = null;
string nt = null;
info.Headers.TryGetValue("ST", out st);
info.Headers.TryGetValue("NT", out nt);
if (string.Equals(st, "urn:ses-com:device:SatIPServer:1", StringComparison.OrdinalIgnoreCase) ||
string.Equals(nt, "urn:ses-com:device:SatIPServer:1", StringComparison.OrdinalIgnoreCase))
{
string location;
if (info.Headers.TryGetValue("Location", out location) && !string.IsNullOrWhiteSpace(location))
{
_logger.Debug("SAT IP found at {0}", location);
// Just get the beginning of the url
Uri uri;
if (Uri.TryCreate(location, UriKind.Absolute, out uri))
{
var apiUrl = location.Replace(uri.LocalPath, String.Empty, StringComparison.OrdinalIgnoreCase)
.TrimEnd('/');
AddDevice(apiUrl, location);
}
}
}
}
private async void AddDevice(string deviceUrl, string infoUrl)
{
await _semaphore.WaitAsync().ConfigureAwait(false);
try
{
var options = GetConfiguration();
if (options.TunerHosts.Any(i => string.Equals(i.Type, SatIpHost.DeviceType, StringComparison.OrdinalIgnoreCase) && UriEquals(i.Url, deviceUrl)))
{
return;
}
_logger.Debug("Will attempt to add SAT device {0}", deviceUrl);
var info = await GetInfo(infoUrl, CancellationToken.None).ConfigureAwait(false);
var existing = GetConfiguration().TunerHosts
.FirstOrDefault(i => string.Equals(i.Type, SatIpHost.DeviceType, StringComparison.OrdinalIgnoreCase) && string.Equals(i.DeviceId, info.DeviceId, StringComparison.OrdinalIgnoreCase));
if (existing == null)
{
//if (string.IsNullOrWhiteSpace(info.M3UUrl))
//{
// return;
//}
await _liveTvManager.SaveTunerHost(new TunerHostInfo
{
Type = SatIpHost.DeviceType,
Url = deviceUrl,
InfoUrl = infoUrl,
DeviceId = info.DeviceId,
FriendlyName = info.FriendlyName,
Tuners = info.Tuners,
M3UUrl = info.M3UUrl,
IsEnabled = true
}, true).ConfigureAwait(false);
}
else
{
existing.Url = deviceUrl;
existing.InfoUrl = infoUrl;
existing.M3UUrl = info.M3UUrl;
existing.FriendlyName = info.FriendlyName;
existing.Tuners = info.Tuners;
await _liveTvManager.SaveTunerHost(existing, false).ConfigureAwait(false);
}
}
catch (OperationCanceledException)
{
}
catch (NotImplementedException)
{
}
catch (Exception ex)
{
_logger.ErrorException("Error saving device", ex);
}
finally
{
_semaphore.Release();
}
}
private bool UriEquals(string savedUri, string location)
{
return string.Equals(NormalizeUrl(location), NormalizeUrl(savedUri), StringComparison.OrdinalIgnoreCase);
}
private string NormalizeUrl(string url)
{
if (!url.StartsWith("http", StringComparison.OrdinalIgnoreCase))
{
url = "http://" + url;
}
url = url.TrimEnd('/');
// Strip off the port
return new Uri(url).GetComponents(UriComponents.AbsoluteUri & ~UriComponents.Port, UriFormat.UriEscaped);
}
private LiveTvOptions GetConfiguration()
{
return _config.GetConfiguration<LiveTvOptions>("livetv");
}
public void Dispose()
{
}
private void ReadCapability(string capability)
{
string[] cap = capability.Split('-');
switch (cap[0].ToLower())
{
case "dvbs":
case "dvbs2":
{
// Optional that you know what an device Supports can you add an flag
_supportsDVBS = true;
for (int i = 0; i < int.Parse(cap[1]); i++)
{
//ToDo Create Digital Recorder / Tuner Capture Instance here for each with index FE param in Sat>Ip Spec for direct communication with this instance
}
_tunerCountDVBS = int.Parse(cap[1]);
break;
}
case "dvbc":
case "dvbc2":
{
// Optional that you know what an device Supports can you add an flag
_supportsDVBC = true;
for (int i = 0; i < int.Parse(cap[1]); i++)
{
//ToDo Create Digital Recorder / Tuner Capture Instance here for each with index FE param in Sat>Ip Spec for direct communication with this instance
}
_tunerCountDVBC = int.Parse(cap[1]);
break;
}
case "dvbt":
case "dvbt2":
{
// Optional that you know what an device Supports can you add an flag
_supportsDVBT = true;
for (int i = 0; i < int.Parse(cap[1]); i++)
{
//ToDo Create Digital Recorder / Tuner Capture Instance here for each with index FE param in Sat>Ip Spec for direct communication with this instance
}
_tunerCountDVBT = int.Parse(cap[1]);
break;
}
}
}
public async Task<SatIpTunerHostInfo> GetInfo(string url, CancellationToken cancellationToken)
{
Uri locationUri = new Uri(url);
string devicetype = "";
string friendlyname = "";
string uniquedevicename = "";
string manufacturer = "";
string manufacturerurl = "";
string modelname = "";
string modeldescription = "";
string modelnumber = "";
string modelurl = "";
string serialnumber = "";
string presentationurl = "";
//string capabilities = "";
string m3u = "";
var document = XDocument.Load(locationUri.AbsoluteUri);
var xnm = new XmlNamespaceManager(new NameTable());
XNamespace n1 = "urn:ses-com:satip";
XNamespace n0 = "urn:schemas-upnp-org:device-1-0";
xnm.AddNamespace("root", n0.NamespaceName);
xnm.AddNamespace("satip:", n1.NamespaceName);
if (document.Root != null)
{
var deviceElement = document.Root.Element(n0 + "device");
if (deviceElement != null)
{
var devicetypeElement = deviceElement.Element(n0 + "deviceType");
if (devicetypeElement != null)
devicetype = devicetypeElement.Value;
var friendlynameElement = deviceElement.Element(n0 + "friendlyName");
if (friendlynameElement != null)
friendlyname = friendlynameElement.Value;
var manufactureElement = deviceElement.Element(n0 + "manufacturer");
if (manufactureElement != null)
manufacturer = manufactureElement.Value;
var manufactureurlElement = deviceElement.Element(n0 + "manufacturerURL");
if (manufactureurlElement != null)
manufacturerurl = manufactureurlElement.Value;
var modeldescriptionElement = deviceElement.Element(n0 + "modelDescription");
if (modeldescriptionElement != null)
modeldescription = modeldescriptionElement.Value;
var modelnameElement = deviceElement.Element(n0 + "modelName");
if (modelnameElement != null)
modelname = modelnameElement.Value;
var modelnumberElement = deviceElement.Element(n0 + "modelNumber");
if (modelnumberElement != null)
modelnumber = modelnumberElement.Value;
var modelurlElement = deviceElement.Element(n0 + "modelURL");
if (modelurlElement != null)
modelurl = modelurlElement.Value;
var serialnumberElement = deviceElement.Element(n0 + "serialNumber");
if (serialnumberElement != null)
serialnumber = serialnumberElement.Value;
var uniquedevicenameElement = deviceElement.Element(n0 + "UDN");
if (uniquedevicenameElement != null) uniquedevicename = uniquedevicenameElement.Value;
var presentationUrlElement = deviceElement.Element(n0 + "presentationURL");
if (presentationUrlElement != null) presentationurl = presentationUrlElement.Value;
var capabilitiesElement = deviceElement.Element(n1 + "X_SATIPCAP");
if (capabilitiesElement != null)
{
//_capabilities = capabilitiesElement.Value;
if (capabilitiesElement.Value.Contains(','))
{
string[] capabilities = capabilitiesElement.Value.Split(',');
foreach (var capability in capabilities)
{
ReadCapability(capability);
}
}
else
{
ReadCapability(capabilitiesElement.Value);
}
}
else
{
_supportsDVBS = true;
_tunerCountDVBS =1;
}
var m3uElement = deviceElement.Element(n1 + "X_SATIPM3U");
if (m3uElement != null) m3u = m3uElement.Value;
}
}
var result = new SatIpTunerHostInfo
{
Url = url,
Id = uniquedevicename,
IsEnabled = true,
Type = SatIpHost.DeviceType,
Tuners = _tunerCountDVBS,
TunersAvailable = _tunerCountDVBS,
M3UUrl = m3u
};
result.FriendlyName = friendlyname;
if (string.IsNullOrWhiteSpace(result.Id))
{
throw new NotImplementedException();
}
else if (!result.M3UUrl.StartsWith("http", StringComparison.OrdinalIgnoreCase))
{
var fullM3uUrl = url.Substring(0, url.LastIndexOf('/'));
result.M3UUrl = fullM3uUrl + "/" + result.M3UUrl.TrimStart('/');
}
_logger.Debug("SAT device result: {0}", _json.SerializeToString(result));
return result;
}
}
public class SatIpTunerHostInfo : TunerHostInfo
{
public int TunersAvailable { get; set; }
}
}

View File

@ -1,184 +0,0 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Emby.Server.Implementations.LiveTv.TunerHosts;
using MediaBrowser.Model.IO;
using MediaBrowser.Common.Configuration;
using MediaBrowser.Common.Extensions;
using MediaBrowser.Common.IO;
using MediaBrowser.Common.Net;
using MediaBrowser.Controller;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.IO;
using MediaBrowser.Controller.LiveTv;
using MediaBrowser.Controller.MediaEncoding;
using MediaBrowser.Model.Dto;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.LiveTv;
using MediaBrowser.Model.Logging;
using MediaBrowser.Model.MediaInfo;
using MediaBrowser.Model.Serialization;
namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.SatIp
{
public class SatIpHost : BaseTunerHost, ITunerHost
{
private readonly IFileSystem _fileSystem;
private readonly IHttpClient _httpClient;
private readonly IServerApplicationHost _appHost;
public SatIpHost(IServerConfigurationManager config, ILogger logger, IJsonSerializer jsonSerializer, IMediaEncoder mediaEncoder, IFileSystem fileSystem, IHttpClient httpClient, IServerApplicationHost appHost)
: base(config, logger, jsonSerializer, mediaEncoder)
{
_fileSystem = fileSystem;
_httpClient = httpClient;
_appHost = appHost;
}
private const string ChannelIdPrefix = "sat_";
protected override async Task<IEnumerable<ChannelInfo>> GetChannelsInternal(TunerHostInfo tuner, CancellationToken cancellationToken)
{
if (!string.IsNullOrWhiteSpace(tuner.M3UUrl))
{
return await new M3uParser(Logger, _fileSystem, _httpClient, _appHost).Parse(tuner.M3UUrl, ChannelIdPrefix, tuner.Id, false, cancellationToken).ConfigureAwait(false);
}
var channels = await new ChannelScan(Logger).Scan(tuner, cancellationToken).ConfigureAwait(false);
return channels;
}
public static string DeviceType
{
get { return "satip"; }
}
public override string Type
{
get { return DeviceType; }
}
protected override async Task<List<MediaSourceInfo>> GetChannelStreamMediaSources(TunerHostInfo tuner, string channelId, CancellationToken cancellationToken)
{
var urlHash = tuner.Url.GetMD5().ToString("N");
var prefix = ChannelIdPrefix + urlHash;
if (!channelId.StartsWith(prefix, StringComparison.OrdinalIgnoreCase))
{
return null;
}
var channels = await GetChannels(tuner, true, cancellationToken).ConfigureAwait(false);
var m3uchannels = channels.Cast<M3UChannel>();
var channel = m3uchannels.FirstOrDefault(c => string.Equals(c.Id, channelId, StringComparison.OrdinalIgnoreCase));
if (channel != null)
{
var path = channel.Path;
MediaProtocol protocol = MediaProtocol.File;
if (path.StartsWith("http", StringComparison.OrdinalIgnoreCase))
{
protocol = MediaProtocol.Http;
}
else if (path.StartsWith("rtmp", StringComparison.OrdinalIgnoreCase))
{
protocol = MediaProtocol.Rtmp;
}
else if (path.StartsWith("rtsp", StringComparison.OrdinalIgnoreCase))
{
protocol = MediaProtocol.Rtsp;
}
var mediaSource = new MediaSourceInfo
{
Path = channel.Path,
Protocol = protocol,
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 = true
},
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
}
},
RequiresOpening = false,
RequiresClosing = false
};
mediaSource.InferTotalBitrate(true);
return new List<MediaSourceInfo> { mediaSource };
}
return new List<MediaSourceInfo>();
}
protected override async Task<LiveStream> GetChannelStream(TunerHostInfo tuner, string channelId, string streamId, CancellationToken cancellationToken)
{
var sources = await GetChannelStreamMediaSources(tuner, channelId, cancellationToken).ConfigureAwait(false);
var liveStream = new LiveStream(sources.First());
return liveStream;
}
protected override async Task<bool> IsAvailableInternal(TunerHostInfo tuner, string channelId, CancellationToken cancellationToken)
{
var updatedInfo = await SatIpDiscovery.Current.GetInfo(tuner.InfoUrl, cancellationToken).ConfigureAwait(false);
return updatedInfo.TunersAvailable > 0;
}
protected override bool IsValidChannelId(string channelId)
{
return channelId.StartsWith(ChannelIdPrefix, StringComparison.OrdinalIgnoreCase);
}
public string Name
{
get { return "Sat IP"; }
}
public Task<List<LiveTvTunerInfo>> GetTunerInfos(CancellationToken cancellationToken)
{
var list = GetTunerHosts()
.SelectMany(i => GetTunerInfos(i, cancellationToken))
.ToList();
return Task.FromResult(list);
}
public List<LiveTvTunerInfo> GetTunerInfos(TunerHostInfo info, CancellationToken cancellationToken)
{
var list = new List<LiveTvTunerInfo>();
for (var i = 0; i < info.Tuners; i++)
{
list.Add(new LiveTvTunerInfo
{
Name = info.FriendlyName ?? Name,
SourceType = Type,
Status = LiveTvTunerStatus.Available,
Id = info.Url.GetMD5().ToString("N") + i.ToString(CultureInfo.InvariantCulture),
Url = info.Url
});
}
return list;
}
public string ApplyDuration(string streamPath, TimeSpan duration)
{
return streamPath;
}
}
}

View File

@ -1,25 +0,0 @@
/*
Copyright (C) <2007-2016> <Kay Diefenthal>
SatIp.RtspSample is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
SatIp.RtspSample is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with SatIp.RtspSample. If not, see <http://www.gnu.org/licenses/>.
*/
namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.SatIp
{
public enum TransmissionMode
{
Unicast,
Multicast
}
}

View File

@ -1,90 +0,0 @@
/*
Copyright (C) <2007-2016> <Kay Diefenthal>
SatIp.RtspSample is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
SatIp.RtspSample is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with SatIp.RtspSample. If not, see <http://www.gnu.org/licenses/>.
*/
using System;
using System.Text;
namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.SatIp
{
public class Utils
{
public static int Convert2BytesToInt(byte[] buffer, int offset)
{
int temp = (int)buffer[offset];
temp = (temp * 256) + buffer[offset + 1];
return (temp);
}
public static int Convert3BytesToInt(byte[] buffer, int offset)
{
int temp = (int)buffer[offset];
temp = (temp * 256) + buffer[offset + 1];
temp = (temp * 256) + buffer[offset + 2];
return (temp);
}
public static int Convert4BytesToInt(byte[] buffer, int offset)
{
int temp =(int)buffer[offset];
temp = (temp * 256) + buffer[offset + 1];
temp = (temp * 256) + buffer[offset + 2];
temp = (temp * 256) + buffer[offset + 3];
return (temp);
}
public static long Convert4BytesToLong(byte[] buffer, int offset)
{
long temp = 0;
for (int index = 0; index < 4; index++)
temp = (temp * 256) + buffer[offset + index];
return (temp);
}
public static long Convert8BytesToLong(byte[] buffer, int offset)
{
long temp = 0;
for (int index = 0; index < 8; index++)
temp = (temp * 256) + buffer[offset + index];
return (temp);
}
public static string ConvertBytesToString(byte[] buffer, int offset, int length)
{
StringBuilder reply = new StringBuilder(4);
for (int index = 0; index < length; index++)
reply.Append((char)buffer[offset + index]);
return (reply.ToString());
}
public static DateTime NptTimestampToDateTime(long nptTimestamp) { return NptTimestampToDateTime((uint)((nptTimestamp >> 32) & 0xFFFFFFFF), (uint)(nptTimestamp & 0xFFFFFFFF),null); }
public static DateTime NptTimestampToDateTime(uint seconds, uint fractions, DateTime? epoch )
{
ulong ticks =(ulong)((seconds * TimeSpan.TicksPerSecond) + ((fractions * TimeSpan.TicksPerSecond) / 0x100000000L));
if (epoch.HasValue) return epoch.Value + TimeSpan.FromTicks((Int64)ticks);
return (seconds & 0x80000000L) == 0 ? UtcEpoch2036 + TimeSpan.FromTicks((Int64)ticks) : UtcEpoch1900 + TimeSpan.FromTicks((Int64)ticks);
}
//When the First Epoch will wrap (The real Y2k)
public static DateTime UtcEpoch2036 = new DateTime(2036, 2, 7, 6, 28, 16, DateTimeKind.Utc);
public static DateTime UtcEpoch1900 = new DateTime(1900, 1, 1, 0, 0, 0, DateTimeKind.Utc);
public static DateTime UtcEpoch1970 = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
}
}

View File

@ -1,100 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0030
2=Eutelsat 3B/Rascom QAF 1R (3.0E)
[DVB]
0=91
1=3794,H,3590,23,S2,8PSK
2=3797,H,2442,23,DVB-S,QPSK
3=3970,V,2741,34,DVB-S,QPSK
4=3975,V,3111,23,DVB-S,QPSK
5=3986,V,13557,56,DVB-S,QPSK
6=4151,V,2141,56,S2,QPSK
7=4173,V,1917,56,S2,QPSK
8=10961,H,10000,34,S2,8PSK
9=10973,H,10000,34,S2,8PSK
10=10985,H,10000,34,S2,QPSK
11=11042,H,4279,89,S2,QPSK
12=11049,H,1000,23,S2,8PSK
13=11051,H,2100,56,S2,QPSK
14=11078,H,7430,56,S2,QPSK
15=11088,H,7430,56,S2,QPSK
16=11097,H,7430,56,S2,QPSK
17=11456,V,2876,78,DVB-S,QPSK
18=11456,H,1480,34,S2,8PSK
19=11457,H,3000,78,DVB-S,QPSK
20=11461,V,2000,34,DVB-S,QPSK
21=11465,V,2500,78,DVB-S,QPSK
22=11468,H,2963,34,DVB-S,QPSK
23=11471,V,2500,78,DVB-S,QPSK
24=11472,H,2600,34,DVB-S,QPSK
25=11476,H,2600,34,DVB-S,QPSK
26=11479,V,3000,56,S2,QPSK
27=11480,H,1480,78,DVB-S,QPSK
28=11482,V,11852,34,DVB-S,QPSK
29=11487,H,1480,34,S2,8PSK
30=11490,H,2222,56,DVB-S,QPSK
31=11496,H,3000,34,DVB-S,QPSK
32=11498,V,11852,34,DVB-S,QPSK
33=11503,H,1480,56,S2,8PSK
34=11507,H,1480,34,S2,8PSK
35=11521,H,8800,23,S2,8PSK
36=11521,V,1500,34,S2,8PSK
37=11530,V,1500,34,S2,8PSK
38=11532,V,1500,34,S2,8PSK
39=11533,H,8800,23,S2,8PSK
40=11544,H,3550,34,S2,8PSK
41=11555,H,8800,23,DVB-S,QPSK
42=11562,H,2850,34,DVB-S,QPSK
43=11585,H,9600,23,S2,8PSK
44=11585,V,9260,56,DVB-S,QPSK
45=11594,V,3333,78,DVB-S,QPSK
46=11597,H,2250,34,DVB-S,QPSK
47=11598,V,2250,34,DVB-S,QPSK
48=11606,V,1480,56,S2,8PSK
49=11609,H,9600,23,S2,8PSK
50=11615,V,2200,34,DVB-S,QPSK
51=11621,H,9600,56,S2,8PSK
52=11621,V,1200,34,S2,8PSK
53=11632,V,2200,34,DVB-S,QPSK
54=11642,H,1111,34,S2,8PSK
55=11645,H,3000,34,DVB-S,QPSK
56=11649,H,3000,34,DVB-S,QPSK
57=11655,H,2304,34,S2,8PSK
58=11660,H,2400,56,DVB-S,QPSK
59=11663,H,1550,56,S2,8PSK
60=11671,V,1500,34,S2,8PSK
61=11673,V,1500,34,S2,8PSK
62=11675,V,1500,56,S2,8PSK
63=11680,V,3750,34,DVB-S,QPSK
64=11692,V,1860,78,DVB-S,QPSK
65=11696,V,2000,34,DVB-S,QPSK
66=12526,H,4444,34,S2,8PSK
67=12531,H,2265,89,S2,QPSK
68=12534,H,2500,34,S2,8PSK
69=12537,H,2500,34,S2,8PSK
70=12548,V,3000,56,S2,QPSK
71=12553,V,1100,56,S2,8PSK
72=12554,V,1100,56,S2,8PSK
73=12556,V,1100,34,S2,8PSK
74=12557,V,1500,34,DVB-S,QPSK
75=12559,V,1500,56,S2,8PSK
76=12563,V,1500,34,S2,8PSK
77=12566,V,2750,23,S2,8PSK
78=12571,V,3650,23,S2,8PSK
79=12572,H,10000,34,S2,QPSK
80=12574,V,1447,34,DVB-S,QPSK
81=12576,V,1570,34,S2,8PSK
82=12609,H,9600,23,S2,8PSK
83=12638,V,14400,34,S2,8PSK
84=12692,H,1450,56,S2,8PSK
85=12702,H,13960,35,S2,QPSK
86=12703,V,3704,34,S2,8PSK
87=12707,V,2963,34,S2,8PSK
88=12717,V,2143,56,DVB-S,QPSK
89=12720,H,13960,35,S2,QPSK
90=12734,V,16750,35,S2,QPSK
91=12737,H,2930,34,DVB-S,QPSK

View File

@ -1,102 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0049
2=Astra 4A/SES 5 (4.9E)
[DVB]
0=93
1=3644,H,1300,56,S2,QPSK
2=3843,V,1055,910,S2,QPSK
3=3857,V,1520,35,S2,QPSK
4=3863,V,1130,56,S2,QPSK
5=3866,V,1400,23,S2,QPSK
6=3868,V,1203,56,S2,QPSK
7=3871,V,1550,23,S2,QPSK
8=3876,V,6200,23,S2,QPSK
9=11265,H,30000,34,S2,8PSK
10=11265,V,30000,34,S2,8PSK
11=11305,H,30000,34,S2,8PSK
12=11305,V,30000,34,S2,8PSK
13=11345,H,30000,34,S2,8PSK
14=11345,V,30000,34,S2,8PSK
15=11385,V,30000,34,S2,8PSK
16=11727,H,27500,56,DVB-S,QPSK
17=11747,V,27500,23,S2,QPSK
18=11766,H,27500,34,DVB-S,QPSK
19=11785,V,27500,56,DVB-S,8PSK
20=11804,H,27500,34,DVB-S,QPSK
21=11823,V,27500,34,DVB-S,QPSK
22=11843,H,27500,34,DVB-S,QPSK
23=11862,V,27500,34,DVB-S,8PSK
24=11881,H,27500,34,DVB-S,QPSK
25=11900,V,27500,34,DVB-S,QPSK
26=11919,H,27500,34,DVB-S,QPSK
27=11938,V,27500,34,DVB-S,8PSK
28=11958,H,27500,34,DVB-S,QPSK
29=11977,V,27500,34,DVB-S,8PSK
30=11996,H,27500,34,DVB-S,8PSK
31=12015,V,27500,56,DVB-S,QPSK
32=12034,H,27500,34,DVB-S,QPSK
33=12054,V,27500,34,DVB-S,QPSK
34=12073,H,27500,34,DVB-S,8PSK
35=12092,V,27500,34,DVB-S,QPSK
36=12111,H,27500,56,DVB-S,QPSK
37=12130,V,27500,34,DVB-S,QPSK
38=12149,H,27500,34,DVB-S,QPSK
39=12169,V,27500,34,S2,8PSK
40=12188,H,30000,34,S2,8PSK
41=12207,V,30000,34,S2,8PSK
42=12245,V,27500,34,DVB-S,QPSK
43=12284,V,27500,34,DVB-S,QPSK
44=12303,H,25546,78,DVB-S,8PSK
45=12322,V,27500,56,S2,QPSK
46=12341,H,30000,34,S2,8PSK
47=12360,V,27500,56,S2,8PSK
48=12380,H,27500,34,DVB-S,8PSK
49=12399,V,27500,34,DVB-S,QPSK
50=12418,H,27500,34,DVB-S,8PSK
51=12437,V,27500,34,S2,8PSK
52=12476,V,27500,34,DVB-S,QPSK
53=12514,H,6111,34,DVB-S,QPSK
54=12515,V,7200,34,S2,8PSK
55=12519,H,4610,34,S2,8PSK
56=12524,V,7200,34,S2,8PSK
57=12528,H,9874,34,S2,8PSK
58=12538,V,4610,34,S2,8PSK
59=12540,H,3750,23,S2,8PSK
60=12543,V,4610,34,S2,8PSK
61=12551,V,7400,34,S2,8PSK
62=12560,V,7200,34,S2,8PSK
63=12580,V,3829,34,DVB-S,QPSK
64=12593,V,7200,34,S2,8PSK
65=12602,V,6111,34,DVB-S,QPSK
66=12608,H,27500,34,DVB-S,QPSK
67=12612,V,6111,34,DVB-S,QPSK
68=12620,V,6111,34,DVB-S,QPSK
69=12621,V,3660,23,DVB-S,QPSK
70=12637,H,14468,34,DVB-S,QPSK
71=12670,H,2600,23,DVB-S,QPSK
72=12671,V,3333,34,DVB-S,QPSK
73=12673,H,3750,35,S2,8PSK
74=12674,V,3333,34,DVB-S,QPSK
75=12678,H,6666,78,DVB-S,QPSK
76=12694,H,6666,34,DVB-S,QPSK
77=12694,V,3333,56,DVB-S,QPSK
78=12699,H,3040,78,DVB-S,QPSK
79=12702,V,3333,34,DVB-S,QPSK
80=12702,H,2100,34,S2,8PSK
81=12710,V,4430,34,DVB-S,QPSK
82=12712,H,5000,78,DVB-S,QPSK
83=12716,V,4430,34,DVB-S,QPSK
84=12719,H,2960,34,DVB-S,QPSK
85=12719,V,2950,34,DVB-S,QPSK
86=12722,V,4430,34,DVB-S,QPSK
87=12725,V,1480,89,S2,8PSK
88=12728,V,4430,34,DVB-S,QPSK
89=12730,V,2960,34,DVB-S,QPSK
90=12733,H,3400,34,DVB-S,QPSK
91=12734,V,4430,34,DVB-S,8PSK
92=12737,H,3472,34,DVB-S,QPSK
93=12740,V,4430,34,DVB-S,QPSK

View File

@ -1,134 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0070
2=Eutelsat 7A/7B (7.0E)
[DVB]
0=125
1=10721,H,22000,34,DVB-S,8PSK
2=10721,V,27500,34,DVB-S,QPSK
3=10762,V,30000,34,DVB-S,QPSK
4=10804,H,30000,56,S2,QPSK
5=10804,V,29900,34,DVB-S,QPSK
6=10845,H,30000,56,S2,QPSK
7=10845,V,30000,34,DVB-S,QPSK
8=10887,H,30000,34,S2,QPSK
9=10887,V,30000,56,S2,QPSK
10=10928,H,30000,34,S2,8PSK
11=10928,V,30000,56,S2,QPSK
12=10958,V,4936,34,S2,8PSK
13=10959,H,4936,34,S2,8PSK
14=10962,H,3255,23,DVB-S,QPSK
15=10970,V,4434,78,DVB-S,QPSK
16=10971,H,4936,34,S2,8PSK
17=10976,H,4936,34,S2,8PSK
18=10978,V,7200,34,S2,8PSK
19=10987,H,4936,34,S2,8PSK
20=10994,V,4936,34,S2,8PSK
21=10997,H,9874,34,S2,8PSK
22=10999,H,3209,Auto,DVB-S,QPSK
23=11000,V,4936,34,S2,8PSK
24=11006,V,4936,34,S2,8PSK
25=11009,H,9874,34,S2,8PSK
26=11012,V,4936,34,S2,8PSK
27=11014,H,6111,Auto,DVB-S,QPSK
28=11018,V,3255,78,DVB-S,QPSK
29=11021,H,9874,34,S2,8PSK
30=11022,V,3676,34,S2,8PSK
31=11023,H,6111,Auto,S2,QPSK
32=11042,V,4936,34,S2,8PSK
33=11046,H,8335,56,S2,8PSK
34=11048,V,14400,34,S2,8PSK
35=11054,H,4936,34,S2,8PSK
36=11057,V,9874,34,S2,8PSK
37=11059,H,14238,56,S2,QPSK
38=11060,H,4936,34,S2,8PSK
39=11066,H,4936,34,S2,8PSK
40=11068,V,9874,34,S2,8PSK
41=11080,V,9874,34,S2,8PSK
42=11084,H,4936,34,S2,8PSK
43=11090,H,4936,34,S2,8PSK
44=11090,V,4936,34,S2,8PSK
45=11096,H,4936,34,S2,8PSK
46=11102,H,14400,34,S2,8PSK
47=11105,H,4340,34,DVB-S,QPSK
48=11107,V,7200,34,S2,8PSK
49=11124,V,3600,34,S2,8PSK
50=11128,H,9874,34,S2,8PSK
51=11128,V,3750,34,S2,8PSK
52=11134,V,5000,34,S2,8PSK
53=11137,H,4936,34,S2,8PSK
54=11140,V,9600,34,S2,8PSK
55=11143,H,4936,34,S2,8PSK
56=11148,H,4936,34,S2,8PSK
57=11153,V,7200,34,S2,8PSK
58=11154,H,4936,34,S2,8PSK
59=11160,H,3254,56,S2,8PSK
60=11161,V,4936,34,S2,8PSK
61=11164,H,3255,34,S2,8PSK
62=11165,V,3204,34,DVB-S,QPSK
63=11171,H,7500,56,S2,8PSK
64=11173,V,3674,34,S2,8PSK
65=11181,V,7442,34,S2,8PSK
66=11184,H,5714,Auto,DVB-S,QPSK
67=11186,V,3255,34,DVB-S,QPSK
68=11192,H,3210,34,DVB-S,QPSK
69=11192,V,3700,34,S2,8PSK
70=11221,H,27500,34,DVB-S,QPSK
71=11262,H,27500,56,DVB-S,QPSK
72=11356,H,45000,56,S2,QPSK
73=11387,H,27500,34,DVB-S,QPSK
74=11418,H,45000,56,S2,QPSK
75=11456,V,20050,34,DVB-S,QPSK
76=11471,H,30000,34,DVB-S,QPSK
77=11492,V,30000,34,DVB-S,QPSK
78=11513,H,29900,34,DVB-S,QPSK
79=11534,V,30000,34,DVB-S,QPSK
80=11554,H,30000,34,DVB-S,QPSK
81=11575,V,30000,34,DVB-S,QPSK
82=11596,H,30000,34,DVB-S,QPSK
83=11617,V,30000,34,DVB-S,QPSK
84=11668,V,30000,56,S2,QPSK
85=11678,H,30000,34,DVB-S,QPSK
86=12510,H,7120,34,S2,8PSK
87=12519,H,6144,34,S2,8PSK
88=12520,V,9800,34,S2,8PSK
89=12532,V,1852,23,S2,QPSK
90=12545,H,4950,34,S2,8PSK
91=12548,V,3650,34,S2,8PSK
92=12555,H,4830,78,DVB-S,8PSK
93=12556,V,4035,56,S2,8PSK
94=12565,H,6750,23,S2,8PSK
95=12573,H,7120,34,S2,8PSK
96=12596,V,2500,34,S2,8PSK
97=12603,H,30000,23,S2,8PSK
98=12603,V,2500,34,S2,8PSK
99=12606,V,2500,34,S2,8PSK
100=12611,V,5000,34,S2,8PSK
101=12615,V,2500,34,S2,8PSK
102=12619,V,4444,78,DVB-S,QPSK
103=12624,V,2500,34,S2,8PSK
104=12627,V,2500,34,S2,8PSK
105=12630,V,2500,34,S2,8PSK
106=12643,V,6430,23,S2,8PSK
107=12645,H,30000,23,S2,8PSK
108=12650,V,2400,34,S2,8PSK
109=12653,V,2400,56,S2,8PSK
110=12659,V,4936,34,S2,8PSK
111=12675,H,6430,23,S2,8PSK
112=12687,H,6975,56,S2,8PSK
113=12695,V,6666,78,DVB-S,8PSK
114=12701,H,4800,34,S2,8PSK
115=12704,V,7500,34,S2,8PSK
116=12711,V,4936,34,S2,8PSK
117=12727,V,10000,34,S2,8PSK
118=12728,H,30000,56,DVB-S,QPSK
119=12740,V,6111,34,DVB-S,QPSK
120=21439,H,6111,34,DVB-S,QPSK
121=21553,H,9600,56,S2,8PSK
122=21565,H,1571,78,DVB-S,QPSK
123=21571,H,2442,23,DVB-S,QPSK
124=21584,H,1100,34,S2,8PSK
125=21603,H,6428,23,S2,8PSK

View File

@ -1,40 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0090
2=Eutelsat 9A/Ka-Sat 9A (9.0E)
[DVB]
0=31
1=11727,V,27500,34,DVB-S,QPSK
2=11747,H,27500,23,S2,8PSK
3=11766,V,27500,34,DVB-S,QPSK
4=11785,H,27500,23,S2,8PSK
5=11804,V,27500,34,DVB-S,QPSK
6=11823,H,27500,34,DVB-S,QPSK
7=11843,V,27500,35,S2,8PSK
8=11861,H,27500,23,S2,8PSK
9=11881,V,27500,23,S2,8PSK
10=11900,H,27500,23,S2,8PSK
11=11919,V,27500,34,DVB-S,QPSK
12=11938,H,27500,34,DVB-S,QPSK
13=11958,V,27500,23,S2,8PSK
14=11996,V,27500,34,DVB-S,QPSK
15=12015,H,27500,23,S2,8PSK
16=12034,V,27500,34,S2,8PSK
17=12054,H,27500,23,S2,8PSK
18=12074,V,27500,34,S2,8PSK
19=12092,H,27500,34,S2,8PSK
20=12130,H,27500,34,DVB-S,QPSK
21=12149,V,27500,23,S2,8PSK
22=12226,V,27500,23,S2,8PSK
23=12265,V,27500,23,S2,8PSK
24=12284,H,27500,23,S2,8PSK
25=12322,H,27500,34,DVB-S,QPSK
26=12360,H,27500,23,S2,8PSK
27=12380,V,27500,23,S2,8PSK
28=12399,H,27500,23,S2,8PSK
29=12418,V,27500,23,S2,8PSK
30=12437,H,27500,23,S2,8PSK
31=20185,H,25000,23,S2,QPSK

View File

@ -1,206 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0100
2=Eutelsat 10A (10.0E)
[DVB]
0=197
1=3649,H,20160,23,S2,QPSK
2=3706,V,6250,56,S2,8PSK
3=3708,H,1002,56,S2,8PSK
4=3721,V,3303,56,S2,8PSK
5=3729,V,10321,56,S2,8PSK
6=3741,V,10114,56,S2,8PSK
7=3759,V,19816,56,S2,8PSK
8=3781,V,16445,56,S2,8PSK
9=3827,V,3080,34,S2,8PSK
10=3835,V,1000,45,S2,QPSK
11=3837,V,1185,34,S2,8PSK
12=3839,V,1185,34,S2,8PSK
13=3865,V,13333,78,DVB-S,QPSK
14=3956,V,1500,23,DVB-S,QPSK
15=4039,V,2222,34,S2,8PSK
16=10707,V,3100,34,DVB-S,QPSK
17=10712,V,4167,56,DVB-S,QPSK
18=10717,V,3215,34,DVB-S,QPSK
19=10734,V,1447,34,DVB-S,QPSK
20=10738,V,2894,34,DVB-S,QPSK
21=10742,V,2894,34,DVB-S,QPSK
22=10747,V,4000,910,S2,8PSK
23=10756,V,2480,78,DVB-S,QPSK
24=10792,V,4936,34,S2,QPSK
25=10798,V,4936,34,S2,8PSK
26=10803,V,6111,34,DVB-S,QPSK
27=10810,V,4430,34,DVB-S,QPSK
28=10822,V,4430,34,S2,8PSK
29=10832,V,8876,56,S2,8PSK
30=10840,V,3255,12,DVB-S,QPSK
31=10848,V,6111,34,DVB-S,QPSK
32=10859,V,2875,Auto,S2,QPSK
33=10877,V,6111,34,DVB-S,QPSK
34=10886,V,6111,Auto,DVB-S,QPSK
35=10893,V,4936,34,S2,QPSK
36=10899,V,4936,34,S2,8PSK
37=10905,V,4936,34,S2,QPSK
38=10918,V,4430,34,DVB-S,QPSK
39=10923,V,4600,56,S2,8PSK
40=10931,V,7120,34,S2,8PSK
41=10940,V,6080,34,DVB-S,QPSK
42=10956,H,2500,56,DVB-S,QPSK
43=10960,V,4167,56,DVB-S,QPSK
44=10965,H,3124,34,DVB-S,QPSK
45=10965,V,4167,56,DVB-S,QPSK
46=10969,H,3124,34,DVB-S,QPSK
47=10970,V,4167,56,DVB-S,QPSK
48=10973,H,3124,34,DVB-S,QPSK
49=10976,V,4167,56,DVB-S,QPSK
50=10977,H,3124,34,DVB-S,QPSK
51=10981,H,3124,34,DVB-S,QPSK
52=10981,V,4600,56,S2,8PSK
53=10985,H,3124,34,DVB-S,QPSK
54=10988,H,3124,34,DVB-S,QPSK
55=10992,H,3124,34,DVB-S,QPSK
56=10998,V,2900,34,DVB-S,QPSK
57=11004,V,2400,34,DVB-S,QPSK
58=11005,H,7120,34,S2,8PSK
59=11008,V,2963,34,DVB-S,QPSK
60=11014,H,7120,34,S2,8PSK
61=11018,V,2857,34,DVB-S,QPSK
62=11022,V,2650,34,DVB-S,QPSK
63=11023,H,7120,34,S2,8PSK
64=11043,H,7120,23,S2,8PSK
65=11060,H,4937,34,S2,8PSK
66=11066,H,4937,34,S2,8PSK
67=11074,H,4937,34,S2,8PSK
68=11075,V,68571,34,DVB-S,QPSK
69=11093,H,9874,34,S2,8PSK
70=11107,H,4936,34,S2,8PSK
71=11124,H,3300,34,DVB-S,8PSK
72=11127,V,6111,34,DVB-S,QPSK
73=11129,H,3333,34,DVB-S,8PSK
74=11134,H,3333,34,DVB-S,QPSK
75=11136,V,7400,34,S2,8PSK
76=11138,H,2400,56,S2,8PSK
77=11144,H,6111,34,DVB-S,QPSK
78=11144,V,6666,78,DVB-S,QPSK
79=11151,H,3254,34,DVB-S,QPSK
80=11154,V,5632,34,DVB-S,QPSK
81=11160,H,2267,56,S2,8PSK
82=11162,V,2400,34,DVB-S,QPSK
83=11165,H,3750,34,S2,8PSK
84=11168,V,2300,34,DVB-S,QPSK
85=11169,H,3028,34,S2,QPSK
86=11173,H,3028,34,S2,QPSK
87=11179,H,2066,23,S2,8PSK
88=11182,H,2400,23,S2,8PSK
89=11186,H,2667,56,DVB-S,QPSK
90=11189,H,2352,34,DVB-S,QPSK
91=11193,H,2880,34,S2,QPSK
92=11207,H,7500,34,S2,8PSK
93=11221,V,30000,56,S2,QPSK
94=11291,H,9875,34,S2,8PSK
95=11294,V,14400,34,S2,8PSK
96=11317,H,7500,56,S2,8PSK
97=11346,H,27500,34,DVB-S,QPSK
98=11375,V,9874,34,S2,8PSK
99=11399,V,9874,34,S2,8PSK
100=11419,H,11814,56,S2,8PSK
101=11434,H,10098,35,S2,QPSK
102=11457,H,6111,34,DVB-S,QPSK
103=11483,V,4000,56,S2,8PSK
104=11488,H,2100,34,DVB-S,QPSK
105=11498,V,7450,34,S2,8PSK
106=11501,H,2894,34,DVB-S,QPSK
107=11505,H,3000,34,DVB-S,QPSK
108=11509,H,3000,34,DVB-S,QPSK
109=11511,V,3324,34,DVB-S,QPSK
110=11515,V,4200,34,DVB-S,QPSK
111=11520,V,4200,34,DVB-S,QPSK
112=11524,H,2810,34,DVB-S,QPSK
113=11525,V,4167,56,DVB-S,QPSK
114=11528,H,2800,34,DVB-S,QPSK
115=11534,V,2300,34,DVB-S,QPSK
116=11536,H,2960,34,DVB-S,QPSK
117=11538,V,2900,34,DVB-S,QPSK
118=11541,H,2600,34,S2,8PSK
119=11542,V,2816,78,DVB-S,QPSK
120=11551,V,1993,34,DVB-S,QPSK
121=11552,H,4800,34,S2,8PSK
122=11554,V,3700,56,DVB-S,QPSK
123=11557,H,3333,56,S2,8PSK
124=11561,V,6666,34,S2,8PSK
125=11561,H,3333,56,DVB-S,QPSK
126=11567,H,6666,78,DVB-S,QPSK
127=11584,H,9875,34,S2,8PSK
128=11590,H,2160,34,S2,8PSK
129=11595,V,30000,23,S2,8PSK
130=11615,H,2500,34,DVB-S,QPSK
131=11619,H,2900,34,DVB-S,QPSK
132=11624,V,2900,34,DVB-S,QPSK
133=11624,H,2500,34,DVB-S,QPSK
134=11627,H,2963,34,DVB-S,QPSK
135=11638,H,5300,56,DVB-S,QPSK
136=11645,H,4800,23,S2,QPSK
137=11651,H,2590,34,DVB-S,QPSK
138=11659,H,1500,56,S2,QPSK
139=11663,H,5540,34,DVB-S,QPSK
140=11664,V,6666,78,DVB-S,QPSK
141=11669,V,3000,56,DVB-S,QPSK
142=11671,H,7200,34,S2,8PSK
143=11676,H,11153,78,DVB-S,QPSK
144=11680,V,2220,34,DVB-S,QPSK
145=11681,H,3200,56,S2,8PSK
146=11684,V,2300,34,DVB-S,QPSK
147=11688,H,9874,34,DVB-S,QPSK
148=11693,V,2210,78,DVB-S,QPSK
149=11696,H,2980,34,DVB-S,QPSK
150=11697,V,2300,34,DVB-S,QPSK
151=12504,H,2880,56,DVB-S,QPSK
152=12508,H,2880,56,DVB-S,QPSK
153=12513,H,3214,34,DVB-S,QPSK
154=12520,H,1100,56,S2,8PSK
155=12526,V,3600,34,S2,8PSK
156=12527,H,2143,34,DVB-S,QPSK
157=12535,V,2220,Auto,DVB-S,QPSK
158=12545,H,3400,34,DVB-S,QPSK
159=12551,V,5632,34,DVB-S,QPSK
160=12553,H,2900,34,DVB-S,QPSK
161=12556,V,2900,78,DVB-S,QPSK
162=12563,V,5632,34,DVB-S,QPSK
163=12571,V,2220,78,DVB-S,QPSK
164=12576,V,3300,34,DVB-S,QPSK
165=12593,V,4800,34,S2,8PSK
166=12594,H,3300,Auto,DVB-S,QPSK
167=12602,V,3333,78,DVB-S,QPSK
168=12610,V,1852,34,DVB-S,QPSK
169=12611,H,2960,34,DVB-S,QPSK
170=12615,H,3214,34,S2,8PSK
171=12620,H,3750,56,S2,8PSK
172=12637,V,18400,23,S2,8PSK
173=12648,H,2300,56,DVB-S,QPSK
174=12652,H,4936,34,S2,8PSK
175=12654,V,2300,78,DVB-S,QPSK
176=12658,H,3214,34,S2,8PSK
177=12674,V,2962,56,DVB-S,QPSK
178=12674,H,3750,34,S2,8PSK
179=12679,V,2894,34,DVB-S,QPSK
180=12680,H,3750,34,S2,8PSK
181=12684,H,3200,34,DVB-S,QPSK
182=12688,H,3200,34,DVB-S,QPSK
183=12692,V,3146,34,DVB-S,QPSK
184=12694,H,6666,78,DVB-S,QPSK
185=12696,V,5632,34,DVB-S,QPSK
186=12701,V,2962,34,DVB-S,QPSK
187=12705,V,2922,34,DVB-S,QPSK
188=12706,H,3750,34,DVB-S,QPSK
189=12710,H,3750,34,S2,8PSK
190=12714,V,9874,34,S2,8PSK
191=12715,H,3200,34,DVB-S,QPSK
192=12729,V,4167,56,DVB-S,QPSK
193=12729,H,3325,34,DVB-S,QPSK
194=12733,H,3200,34,DVB-S,QPSK
195=12736,V,4600,56,S2,8PSK
196=12741,V,4167,56,DVB-S,QPSK
197=12742,H,3500,34,S2,8PSK

View File

@ -1,106 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0130
2=Eutelsat Hot Bird 13B/13C/13D (13.0E)
[DVB]
0=97
1=10719,V,27500,56,DVB-S,QPSK
2=10758,V,27500,34,S2,8PSK
3=10775,H,29900,56,DVB-S,QPSK
4=10796,V,27500,56,DVB-S,QPSK
5=10815,H,27500,56,DVB-S,QPSK
6=10834,V,27500,34,S2,8PSK
7=10853,H,29900,23,S2,8PSK
8=10873,V,27500,34,DVB-S,QPSK
9=10892,H,27500,34,DVB-S,QPSK
10=10911,V,27500,34,S2,8PSK
11=10930,H,30000,23,S2,8PSK
12=10949,V,27500,34,DVB-S,QPSK
13=10971,H,29700,23,S2,8PSK
14=10992,V,27500,23,DVB-S,QPSK
15=11034,V,27500,34,DVB-S,QPSK
16=11054,H,27500,56,DVB-S,QPSK
17=11075,V,27500,34,DVB-S,QPSK
18=11096,H,29900,23,S2,8PSK
19=11117,V,27500,34,DVB-S,QPSK
20=11137,H,27500,34,DVB-S,QPSK
21=11158,V,27500,56,DVB-S,QPSK
22=11179,H,27500,34,DVB-S,QPSK
23=11200,V,27500,56,DVB-S,QPSK
24=11219,H,29900,56,DVB-S,QPSK
25=11240,V,27500,34,DVB-S,QPSK
26=11258,H,27500,34,S2,8PSK
27=11278,V,27500,34,S2,8PSK
28=11296,H,27500,34,S2,8PSK
29=11317,V,27500,34,DVB-S,QPSK
30=11334,H,27500,34,DVB-S,QPSK
31=11355,V,29900,56,DVB-S,QPSK
32=11393,V,27500,56,DVB-S,QPSK
33=11411,H,27500,56,S2,8PSK
34=11449,H,27500,34,S2,8PSK
35=11471,V,27500,56,DVB-S,QPSK
36=11488,H,27500,56,DVB-S,QPSK
37=11508,V,27500,34,S2,8PSK
38=11526,H,27500,34,DVB-S,QPSK
39=11541,V,22000,56,DVB-S,QPSK
40=11566,H,27500,34,DVB-S,QPSK
41=11585,V,27500,34,DVB-S,QPSK
42=11604,H,27500,56,DVB-S,QPSK
43=11623,V,27500,34,DVB-S,QPSK
44=11642,H,27500,34,DVB-S,QPSK
45=11662,V,27500,34,S2,8PSK
46=11681,H,27500,34,S2,8PSK
47=11727,V,27500,34,DVB-S,QPSK
48=11747,H,27500,34,DVB-S,QPSK
49=11766,V,27500,23,DVB-S,QPSK
50=11785,H,29900,34,S2,8PSK
51=11804,V,27500,23,DVB-S,QPSK
52=11823,H,27500,34,DVB-S,QPSK
53=11843,V,29900,34,S2,8PSK
54=11862,H,29900,56,DVB-S,QPSK
55=11881,V,27500,34,DVB-S,QPSK
56=11900,H,29900,34,S2,8PSK
57=11919,V,29900,56,DVB-S,8PSK
58=11938,H,27500,34,S2,8PSK
59=11958,V,27500,34,DVB-S,QPSK
60=11977,H,29900,56,DVB-S,QPSK
61=11996,V,29900,34,S2,8PSK
62=12015,H,27500,34,DVB-S,QPSK
63=12034,V,29900,56,DVB-S,QPSK
64=12054,H,29900,56,DVB-S,QPSK
65=12073,V,29900,56,DVB-S,QPSK
66=12092,H,29900,34,S2,8PSK
67=12111,V,27500,34,DVB-S,QPSK
68=12130,H,27500,34,S2,8PSK
69=12149,V,27500,34,DVB-S,QPSK
70=12169,H,27500,34,S2,8PSK
71=12188,V,27500,56,DVB-S,QPSK
72=12207,H,29900,34,S2,8PSK
73=12226,V,27500,34,DVB-S,QPSK
74=12265,V,27500,34,S2,8PSK
75=12284,H,27500,56,DVB-S,QPSK
76=12303,V,27500,34,S2,8PSK
77=12322,H,27500,34,DVB-S,QPSK
78=12341,V,29900,34,S2,8PSK
79=12360,H,29900,34,S2,8PSK
80=12380,V,27500,34,DVB-S,QPSK
81=12399,H,27500,34,DVB-S,QPSK
82=12418,V,29900,34,S2,8PSK
83=12437,H,29900,34,S2,QPSK
84=12466,V,29900,56,DVB-S,QPSK
85=12476,H,29900,34,S2,8PSK
86=12520,V,27500,34,DVB-S,QPSK
87=12539,H,27500,23,S2,QPSK
88=12558,V,27500,34,DVB-S,QPSK
89=12577,H,27500,34,S2,8PSK
90=12597,V,27500,34,DVB-S,QPSK
91=12616,H,29900,56,DVB-S,QPSK
92=12635,V,29900,56,DVB-S,QPSK
93=12654,H,27500,56,DVB-S,QPSK
94=12673,V,29900,56,DVB-S,QPSK
95=12692,H,27500,34,S2,8PSK
96=12713,V,29900,56,DVB-S,QPSK
97=12731,H,29900,34,S2,8PSK

View File

@ -1,156 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0160
2=Eutelsat 16A (16.0E)
[DVB]
0=147
1=10721,H,27500,34,DVB-S,QPSK
2=10762,H,30000,35,S2,8PSK
3=10804,H,30000,23,S2,8PSK
4=10845,H,30000,Auto,S2,QPSK
5=10887,H,30000,Auto,S2,QPSK
6=10928,H,30000,89,S2,QPSK
7=10957,H,3750,34,S2,8PSK
8=10961,H,3750,34,S2,8PSK
9=10966,H,3750,34,S2,8PSK
10=10971,H,3750,34,S2,8PSK
11=10972,V,27500,56,DVB-S,QPSK
12=10975,H,3750,34,S2,8PSK
13=10977,H,24113,Auto,S2,8PSK
14=10981,H,3462,56,S2,8PSK
15=10992,H,2500,56,S2,8PSK
16=10997,H,2500,56,S2,8PSK
17=11001,H,2500,56,S2,8PSK
18=11007,H,5000,34,S2,8PSK
19=11011,V,27500,56,DVB-S,QPSK
20=11012,H,3333,78,DVB-S,QPSK
21=11016,H,1500,23,S2,8PSK
22=11019,H,1795,Auto,S2,QPSK
23=11023,H,7500,34,S2,8PSK
24=11024,H,3330,Auto,DVB-S,8PSK
25=11029,H,2300,Auto,DVB-S,QPSK
26=11046,H,10555,34,DVB-S,QPSK
27=11060,H,4615,56,DVB-S,QPSK
28=11063,H,3328,34,DVB-S,QPSK
29=11074,H,1250,34,DVB-S,QPSK
30=11082,H,10000,Auto,S2,QPSK
31=11092,H,3600,34,S2,8PSK
32=11104,H,7400,34,S2,8PSK
33=11127,H,10000,56,S2,8PSK
34=11131,V,16593,23,S2,8PSK
35=11139,H,10000,56,S2,8PSK
36=11151,V,13268,23,S2,8PSK
37=11152,H,10000,56,S2,8PSK
38=11164,H,10000,56,S2,8PSK
39=11175,H,10000,56,S2,8PSK
40=11178,V,27500,34,DVB-S,QPSK
41=11187,H,10000,56,S2,8PSK
42=11221,H,30000,34,DVB-S,QPSK
43=11231,V,30000,34,DVB-S,QPSK
44=11262,H,30000,23,DVB-S,QPSK
45=11283,V,30000,23,S2,8PSK
46=11294,H,45000,34,S2,8PSK
47=11303,H,30000,23,S2,8PSK
48=11324,V,30000,34,DVB-S,QPSK
49=11345,H,30000,35,S2,8PSK
50=11356,H,45000,34,S2,8PSK
51=11366,V,30000,34,DVB-S,QPSK
52=11387,H,30000,34,DVB-S,QPSK
53=11400,V,13846,34,S2,8PSK
54=11427,V,27500,34,S2,8PSK
55=11470,V,30000,56,S2,8PSK
56=11471,H,30000,89,S2,QPSK
57=11512,H,30000,89,S2,QPSK
58=11512,V,29950,23,S2,8PSK
59=11554,H,30000,56,S2,QPSK
60=11554,V,30000,56,S2,8PSK
61=11595,H,30000,34,S2,8PSK
62=11595,V,30000,56,S2,8PSK
63=11596,H,30000,89,S2,QPSK
64=11604,V,14400,34,S2,8PSK
65=11637,H,30000,89,S2,QPSK
66=11645,V,27700,56,S2,QPSK
67=11675,V,9874,34,S2,8PSK
68=11678,H,30000,35,S2,8PSK
69=11687,V,9874,34,S2,8PSK
70=12508,H,3600,34,S2,8PSK
71=12512,H,3166,23,S2,8PSK
72=12516,H,3166,23,S2,8PSK
73=12517,V,8000,56,S2,8PSK
74=12521,H,30000,23,S2,8PSK
75=12522,H,3166,23,S2,8PSK
76=12527,H,2816,34,DVB-S,QPSK
77=12528,V,10000,56,S2,8PSK
78=12533,H,6333,23,S2,8PSK
79=12538,H,3166,23,S2,8PSK
80=12541,V,10000,56,S2,8PSK
81=12542,H,2816,34,DVB-S,QPSK
82=12548,H,6333,23,S2,8PSK
83=12554,H,2816,34,DVB-S,QPSK
84=12557,H,3166,23,S2,8PSK
85=12559,V,2222,34,S2,QPSK
86=12562,H,3166,23,S2,8PSK
87=12564,H,30000,23,S2,8PSK
88=12564,V,3617,34,DVB-S,QPSK
89=12570,H,3703,78,DVB-S,QPSK
90=12575,V,6000,34,S2,8PSK
91=12593,H,7120,34,S2,8PSK
92=12593,V,2500,23,DVB-S,QPSK
93=12597,V,2848,23,DVB-S,QPSK
94=12600,H,3200,23,S2,8PSK
95=12604,H,30000,23,S2,8PSK
96=12605,H,3166,23,S2,8PSK
97=12605,V,7125,34,S2,QPSK
98=12609,H,3200,23,S2,8PSK
99=12611,V,1415,34,DVB-S,QPSK
100=12614,H,3200,23,S2,8PSK
101=12618,H,3166,23,S2,8PSK
102=12620,V,3750,56,S2,8PSK
103=12623,H,4936,34,S2,8PSK
104=12624,V,1650,56,S2,8PSK
105=12626,V,1650,56,S2,8PSK
106=12628,V,1650,56,S2,8PSK
107=12633,V,4883,12,DVB-S,QPSK
108=12644,V,13200,34,S2,QPSK
109=12654,H,11111,23,DVB-S,QPSK
110=12656,V,4883,12,DVB-S,QPSK
111=12676,H,4248,34,DVB-S,QPSK
112=12677,V,2400,34,S2,8PSK
113=12680,V,2400,34,S2,8PSK
114=12683,V,2400,34,S2,8PSK
115=12686,V,2400,34,S2,8PSK
116=12689,V,2400,34,S2,8PSK
117=12692,V,2400,34,S2,8PSK
118=12695,V,2400,34,S2,8PSK
119=12698,V,2400,34,S2,8PSK
120=12699,H,9880,12,DVB-S,QPSK
121=12701,V,2400,34,S2,8PSK
122=12704,V,2400,34,S2,8PSK
123=12707,V,2400,34,S2,8PSK
124=12710,H,5165,35,S2,8PSK
125=12710,V,2400,34,S2,8PSK
126=12713,V,2400,34,S2,8PSK
127=12717,H,4936,34,S2,8PSK
128=12717,V,2400,34,S2,8PSK
129=12720,V,2400,34,S2,8PSK
130=12723,V,2400,34,S2,8PSK
131=12723,H,4936,34,S2,8PSK
132=12728,V,2400,34,S2,8PSK
133=12737,V,2400,34,S2,8PSK
134=12738,H,4500,34,DVB-S,QPSK
135=21537,H,1070,34,S2,8PSK
136=21538,H,1054,34,S2,8PSK
137=21540,H,1071,34,S2,8PSK
138=21541,H,1071,34,S2,8PSK
139=21545,H,2143,56,S2,8PSK
140=21550,H,1054,34,S2,8PSK
141=21551,H,1060,23,DVB-S,QPSK
142=21559,H,1071,34,S2,8PSK
143=21560,H,1010,23,S2,8PSK
144=21562,H,1010,23,S2,8PSK
145=21563,H,1250,23,S2,8PSK
146=21569,H,1071,34,S2,8PSK
147=21571,H,2900,56,S2,8PSK

View File

@ -1,60 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0170
2=Amos 5 (17.0E)
[DVB]
0=51
1=3538,V,4444,34,DVB-S,QPSK
2=3547,V,7200,34,S2,8PSK
3=3553,V,1285,56,S2,8PSK
4=3617,V,1167,23,S2,8PSK
5=3620,V,1000,34,S2,8PSK
6=3622,V,1000,23,S2,8PSK
7=3626,V,2000,34,DVB-S,QPSK
8=3626,H,1200,23,DVB-S,QPSK
9=3665,H,3300,78,DVB-S,QPSK
10=3685,V,1924,78,DVB-S,QPSK
11=3688,V,2000,34,DVB-S,QPSK
12=3728,H,3300,78,DVB-S,QPSK
13=3731,H,2500,56,S2,8PSK
14=3757,V,3300,78,DVB-S,QPSK
15=3785,V,1168,34,DVB-S,QPSK
16=3802,V,1666,34,S2,8PSK
17=3828,V,1250,23,S2,8PSK
18=3830,V,1480,56,S2,QPSK
19=3852,V,1000,56,S2,QPSK
20=4066,V,1000,23,S2,8PSK
21=4119,V,7200,34,DVB-S,QPSK
22=4125,V,2170,34,DVB-S,QPSK
23=4130,V,6850,35,S2,8PSK
24=4136,V,2500,23,S2,8PSK
25=4139,V,1000,34,S2,8PSK
26=4141,V,1550,34,S2,8PSK
27=4142,V,1000,23,S2,8PSK
28=4144,V,1334,56,DVB-S,QPSK
29=4160,V,4166,56,DVB-S,QPSK
30=10961,V,2200,12,S2,QPSK
31=10983,V,3333,56,DVB-S,QPSK
32=11038,V,1760,34,S2,QPSK
33=11041,V,1594,34,S2,QPSK
34=11057,V,4273,12,S2,QPSK
35=11062,V,1250,34,S2,QPSK
36=11064,V,1244,34,S2,QPSK
37=11087,V,1245,34,S2,QPSK
38=11092,V,1244,34,DVB-S,QPSK
39=11139,V,30000,Auto,S2,QPSK
40=11761,V,15000,34,S2,QPSK
41=11801,V,30000,23,S2,QPSK
42=11884,V,27500,34,DVB-S,QPSK
43=11967,V,30000,34,S2,QPSK
44=12004,V,30000,34,S2,QPSK
45=12035,H,4000,Auto,S2,8PSK
46=12068,V,45000,56,S2,QPSK
47=12208,H,17666,45,S2,QPSK
48=12260,V,17666,45,S2,QPSK
49=12335,V,27500,34,DVB-S,QPSK
50=12384,V,30000,34,S2,QPSK
51=12418,V,30000,23,S2,8PSK

View File

@ -1,127 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0192
2=Astra 1KR/1L/1M/1N (19.2E)
[DVB]
0=118
1=10729,V,22000,23,S2,8PSK
2=10744,H,22000,56,DVB-S,QPSK
3=10758,V,22000,56,DVB-S,QPSK
4=10773,H,22000,34,S2,8PSK
5=10788,V,22000,56,DVB-S,QPSK
6=10803,H,22000,34,S2,8PSK
7=10818,V,22000,23,S2,8PSK
8=10832,H,22000,23,S2,8PSK
9=10847,V,22000,56,DVB-S,QPSK
10=10862,H,22000,23,S2,8PSK
11=10876,V,22000,56,DVB-S,QPSK
12=10891,H,22000,23,S2,8PSK
13=10906,V,22000,23,S2,8PSK
14=10921,H,22000,78,DVB-S,QPSK
15=10936,V,22000,23,S2,8PSK
16=10964,H,22000,23,S2,8PSK
17=10979,V,22000,56,DVB-S,QPSK
18=10994,H,22000,910,S2,QPSK
19=11023,H,23500,34,S2,8PSK
20=11038,V,22000,56,DVB-S,QPSK
21=11053,H,22000,23,S2,8PSK
22=11068,V,22000,56,DVB-S,QPSK
23=11082,H,22000,34,S2,8PSK
24=11097,V,22000,56,DVB-S,QPSK
25=11112,H,22000,23,S2,8PSK
26=11127,V,22000,23,S2,8PSK
27=11156,V,22000,56,DVB-S,QPSK
28=11171,H,22000,34,S2,8PSK
29=11186,V,22000,56,DVB-S,QPSK
30=11229,V,22000,23,S2,8PSK
31=11244,H,22000,56,DVB-S,QPSK
32=11259,V,22000,23,S2,8PSK
33=11273,H,22000,23,S2,8PSK
34=11288,V,22000,23,S2,8PSK
35=11303,H,22000,23,S2,8PSK
36=11318,V,22000,56,DVB-S,QPSK
37=11332,H,22000,34,S2,8PSK
38=11347,V,22000,23,S2,8PSK
39=11362,H,22000,23,S2,8PSK
40=11377,V,22000,23,S2,8PSK
41=11391,H,22000,56,DVB-S,QPSK
42=11421,H,22000,56,DVB-S,QPSK
43=11436,V,22000,23,S2,8PSK
44=11464,H,22000,23,S2,8PSK
45=11494,H,22000,23,S2,8PSK
46=11509,V,22000,56,DVB-S,QPSK
47=11523,H,22000,56,DVB-S,QPSK
48=11538,V,22000,56,DVB-S,QPSK
49=11553,H,22000,34,S2,8PSK
50=11568,V,22000,23,S2,8PSK
51=11582,H,22000,23,S2,8PSK
52=11597,V,22000,56,DVB-S,QPSK
53=11612,H,22000,56,DVB-S,QPSK
54=11627,V,22000,56,DVB-S,QPSK
55=11641,H,22000,56,DVB-S,QPSK
56=11671,H,22000,23,S2,8PSK
57=11686,V,22000,56,DVB-S,QPSK
58=11720,H,27500,34,DVB-S,QPSK
59=11739,V,27500,34,DVB-S,QPSK
60=11758,H,27500,34,DVB-S,QPSK
61=11778,V,27500,34,DVB-S,QPSK
62=11798,H,27500,34,DVB-S,QPSK
63=11817,V,29700,56,S2,QPSK
64=11836,H,27500,34,DVB-S,QPSK
65=11856,V,27500,34,DVB-S,QPSK
66=11876,H,27500,34,S2,8PSK
67=11914,H,27500,910,S2,QPSK
68=11934,V,27500,34,DVB-S,QPSK
69=11954,H,27500,34,DVB-S,QPSK
70=11973,V,27500,34,DVB-S,QPSK
71=11992,H,27500,910,S2,QPSK
72=12012,V,29700,56,S2,QPSK
73=12032,H,27500,34,DVB-S,QPSK
74=12051,V,27500,34,DVB-S,QPSK
75=12070,H,27500,34,DVB-S,QPSK
76=12090,V,29700,56,S2,QPSK
77=12110,H,27500,34,DVB-S,QPSK
78=12129,V,29700,56,S2,QPSK
79=12148,H,27500,34,DVB-S,QPSK
80=12168,V,29700,56,S2,QPSK
81=12188,H,27500,34,DVB-S,QPSK
82=12207,V,29700,56,S2,QPSK
83=12226,H,27500,34,DVB-S,QPSK
84=12246,V,29700,56,S2,QPSK
85=12266,H,27500,34,DVB-S,QPSK
86=12285,V,29700,23,S2,8PSK
87=12304,H,27500,910,S2,QPSK
88=12324,V,29700,56,S2,QPSK
89=12363,V,27500,34,DVB-S,QPSK
90=12382,H,27500,910,S2,QPSK
91=12402,V,27500,34,DVB-S,QPSK
92=12422,H,27500,34,DVB-S,QPSK
93=12441,V,29700,56,S2,QPSK
94=12460,H,27500,34,DVB-S,QPSK
95=12480,V,27500,34,DVB-S,QPSK
96=12515,H,22000,56,DVB-S,QPSK
97=12522,V,22000,23,S2,8PSK
98=12545,H,22000,56,DVB-S,QPSK
99=12552,V,22000,56,DVB-S,QPSK
100=12574,H,22000,23,S2,8PSK
101=12581,V,22000,23,S2,8PSK
102=12604,H,22000,56,DVB-S,QPSK
103=12610,V,22000,23,S2,8PSK
104=12633,H,22000,56,DVB-S,QPSK
105=12640,V,22000,23,S2,8PSK
106=12663,H,22000,56,DVB-S,QPSK
107=12670,V,22000,23,S2,8PSK
108=12692,H,22000,56,DVB-S,QPSK
109=12699,V,22000,56,DVB-S,QPSK
110=12722,H,23500,23,S2,8PSK
111=12728,V,22000,56,DVB-S,QPSK
112=18366,V,15000,12,S2,QPSK
113=18515,V,3630,23,S2,8PSK
114=18538,V,3344,34,S2,8PSK
115=18556,V,3630,23,S2,8PSK
116=18754,H,4500,34,DVB-S,QPSK
117=18760,H,5500,23,S2,8PSK
118=18766,H,3110,12,S2,8PSK

View File

@ -1,19 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0200
2=Arabsat 5C (20.0E)
[DVB]
0=10
1=3710,V,2600,34,DVB-S,QPSK
2=3714,V,2600,34,DVB-S,QPSK
3=3720,V,6660,34,DVB-S,QPSK
4=3796,H,1850,34,DVB-S,QPSK
5=3884,V,27500,56,DVB-S,QPSK
6=3934,H,27500,78,DVB-S,QPSK
7=4004,V,27500,34,DVB-S,QPSK
8=4054,H,27500,34,DVB-S,QPSK
9=4110,V,3889,78,DVB-S,QPSK
10=4114,V,2988,34,DVB-S,QPSK

View File

@ -1,103 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0215
2=Eutelsat 21B (21.5E)
[DVB]
0=94
1=10955,H,3220,56,DVB-S,QPSK
2=10958,H,2590,34,DVB-S,QPSK
3=10966,H,2590,34,DVB-S,QPSK
4=10970,H,2500,34,DVB-S,QPSK
5=10975,H,2200,56,S2,8PSK
6=10978,V,2170,34,DVB-S,QPSK
7=10986,H,2150,34,DVB-S,QPSK
8=10992,H,3220,56,S2,8PSK
9=10995,H,2667,34,DVB-S,QPSK
10=10998,V,8888,34,DVB-S,QPSK
11=10999,H,3590,34,S2,8PSK
12=11003,H,2222,34,DVB-S,QPSK
13=11006,H,2592,56,DVB-S,QPSK
14=11009,H,2170,78,DVB-S,QPSK
15=11010,V,10000,34,S2,8PSK
16=11012,H,2667,34,DVB-S,QPSK
17=11015,H,2667,34,DVB-S,QPSK
18=11027,H,2200,34,S2,QPSK
19=11036,H,2100,34,DVB-S,QPSK
20=11038,V,2000,34,DVB-S,QPSK
21=11040,H,3600,34,DVB-S,QPSK
22=11061,V,2000,34,DVB-S,QPSK
23=11082,V,7400,23,S2,8PSK
24=11093,V,10000,34,S2,8PSK
25=11110,H,2667,34,DVB-S,QPSK
26=11128,H,10450,45,S2,QPSK
27=11190,V,6666,23,DVB-S,QPSK
28=11341,H,26460,23,S2,8PSK
29=11464,H,2590,34,DVB-S,QPSK
30=11468,H,1317,56,S2,8PSK
31=11470,H,2000,34,DVB-S,QPSK
32=11473,H,1900,56,S2,8PSK
33=11475,V,2100,34,DVB-S,QPSK
34=11476,H,2857,34,DVB-S,QPSK
35=11479,H,3184,34,DVB-S,QPSK
36=11480,V,2970,34,DVB-S,QPSK
37=11482,H,2856,34,DVB-S,QPSK
38=11483,V,3000,34,DVB-S,QPSK
39=11487,H,2700,56,DVB-S,QPSK
40=11488,V,2150,34,DVB-S,QPSK
41=11490,V,2220,34,DVB-S,QPSK
42=11497,V,2170,34,DVB-S,QPSK
43=11503,V,3300,34,DVB-S,QPSK
44=11508,V,3300,34,DVB-S,QPSK
45=11517,H,3333,56,S2,8PSK
46=11519,V,1500,56,S2,8PSK
47=11521,H,3300,34,DVB-S,QPSK
48=11526,H,2200,56,DVB-S,QPSK
49=11530,H,2200,34,DVB-S,QPSK
50=11532,V,2857,34,DVB-S,QPSK
51=11537,V,2755,34,DVB-S,QPSK
52=11541,V,6534,45,S2,QPSK
53=11546,V,2592,34,DVB-S,QPSK
54=11550,V,2142,34,DVB-S,QPSK
55=11557,H,3000,23,S2,8PSK
56=11558,V,1650,34,S2,8PSK
57=11564,V,7214,34,S2,8PSK
58=11574,V,2300,56,S2,8PSK
59=11578,V,3300,34,DVB-S,QPSK
60=11581,H,5000,34,DVB-S,QPSK
61=11582,V,2850,78,DVB-S,QPSK
62=11585,V,1600,34,DVB-S,QPSK
63=11588,H,5000,34,DVB-S,QPSK
64=11590,V,2856,78,DVB-S,QPSK
65=11593,V,1500,34,S2,8PSK
66=11596,H,5000,34,DVB-S,QPSK
67=11610,H,6200,78,DVB-S,QPSK
68=11619,V,12500,23,DVB-S,QPSK
69=11627,H,4260,56,S2,8PSK
70=11633,H,4260,56,S2,8PSK
71=11639,H,4260,56,S2,8PSK
72=11645,V,1600,45,S2,8PSK
73=11649,V,1600,34,S2,8PSK
74=11653,V,1600,34,S2,8PSK
75=11659,V,2850,78,DVB-S,QPSK
76=11663,H,3220,56,S2,8PSK
77=11665,V,2850,34,S2,8PSK
78=11673,V,2000,34,DVB-S,QPSK
79=11676,H,2150,34,DVB-S,QPSK
80=11678,V,2850,78,DVB-S,QPSK
81=11681,H,2963,34,DVB-S,QPSK
82=11684,V,2100,34,S2,8PSK
83=11686,H,1800,34,DVB-S,QPSK
84=11689,H,1500,34,DVB-S,QPSK
85=11691,V,1447,34,DVB-S,QPSK
86=11693,H,1500,34,S2,8PSK
87=11697,H,2500,34,DVB-S,QPSK
88=12508,H,3300,34,DVB-S,QPSK
89=12516,H,2200,34,DVB-S,QPSK
90=12521,H,2857,34,DVB-S,QPSK
91=12532,H,2220,34,DVB-S,QPSK
92=12536,H,2200,34,DVB-S,QPSK
93=12591,V,3124,34,DVB-S,QPSK
94=12622,V,3124,34,DVB-S,QPSK

View File

@ -1,127 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0235
2=Astra 3B (23.5E)
[DVB]
0=118
1=11459,V,6666,78,DVB-S,QPSK
2=11460,H,7200,34,S2,QPSK
3=11469,H,3214,34,S2,8PSK
4=11470,V,7500,34,S2,8PSK
5=11476,V,3703,34,DVB-S,QPSK
6=11479,H,4444,34,DVB-S,QPSK
7=11484,V,4444,34,DVB-S,QPSK
8=11490,V,3250,34,DVB-S,QPSK
9=11490,H,3300,56,S2,8PSK
10=11496,V,2170,Auto,DVB-S,QPSK
11=11501,H,7200,56,S2,8PSK
12=11501,V,3750,89,S2,8PSK
13=11506,H,4800,34,S2,8PSK
14=11508,V,3600,34,S2,QPSK
15=11512,V,4800,34,S2,QPSK
16=11516,H,4444,34,DVB-S,QPSK
17=11516,V,3600,34,S2,QPSK
18=11521,H,3630,23,S2,8PSK
19=11527,H,7200,34,S2,QPSK
20=11530,V,4800,34,S2,8PSK
21=11532,H,3333,34,DVB-S,QPSK
22=11579,H,4333,78,DVB-S,QPSK
23=11583,V,10000,56,S2,8PSK
24=11591,H,7500,34,S2,8PSK
25=11597,V,4500,78,DVB-S,QPSK
26=11599,H,4800,56,S2,8PSK
27=11608,H,7200,34,S2,8PSK
28=11619,V,3750,23,S2,8PSK
29=11620,H,7200,34,S2,8PSK
30=11622,V,2333,56,S2,QPSK
31=11625,V,2333,56,S2,QPSK
32=11628,V,2333,56,S2,QPSK
33=11630,H,6666,78,DVB-S,QPSK
34=11631,V,2333,56,S2,QPSK
35=11634,V,2333,56,S2,QPSK
36=11636,H,3630,23,S2,8PSK
37=11642,V,2333,910,S2,8PSK
38=11648,H,6666,78,DVB-S,QPSK
39=11650,V,4610,34,S2,8PSK
40=11658,V,2333,56,S2,QPSK
41=11663,V,4666,56,S2,QPSK
42=11668,V,3656,34,S2,8PSK
43=11671,H,4444,34,DVB-S,QPSK
44=11672,V,3656,34,S2,8PSK
45=11676,V,1410,45,S2,QPSK
46=11678,V,1024,23,S2,8PSK
47=11679,H,6111,34,S2,8PSK
48=11679,V,1024,23,S2,8PSK
49=11680,V,1024,23,S2,8PSK
50=11683,V,2734,56,DVB-S,QPSK
51=11686,V,2750,34,S2,8PSK
52=11720,H,28200,56,S2,8PSK
53=11739,V,27500,23,S2,8PSK
54=11758,H,30000,Auto,S2,QPSK
55=11778,V,27500,910,S2,QPSK
56=11798,H,29500,34,S2,8PSK
57=11836,H,27500,56,DVB-S,QPSK
58=11856,V,27500,23,S2,8PSK
59=11876,H,29900,34,S2,8PSK
60=11895,V,27500,56,DVB-S,QPSK
61=11914,H,29900,23,S2,8PSK
62=11934,V,27500,34,S2,8PSK
63=11973,V,27500,56,DVB-S,QPSK
64=12032,H,27500,910,S2,QPSK
65=12070,H,27500,34,DVB-S,QPSK
66=12110,H,27500,34,S2,8PSK
67=12129,V,27500,23,S2,8PSK
68=12148,H,27500,56,S2,8PSK
69=12168,V,27500,34,DVB-S,QPSK
70=12188,H,27500,23,S2,8PSK
71=12207,V,27500,56,S2,8PSK
72=12304,H,27500,56,S2,8PSK
73=12344,H,27500,56,S2,8PSK
74=12363,V,29500,34,S2,8PSK
75=12382,H,30000,89,S2,8PSK
76=12402,V,30000,34,S2,8PSK
77=12525,H,27500,56,S2,8PSK
78=12525,V,27500,34,DVB-S,QPSK
79=12550,V,1663,56,S2,8PSK
80=12550,H,14400,34,S2,8PSK
81=12554,V,1666,56,S2,8PSK
82=12562,V,4937,34,S2,8PSK
83=12568,V,4937,34,S2,8PSK
84=12572,V,3300,78,DVB-S,QPSK
85=12576,V,3300,78,DVB-S,QPSK
86=12580,V,4937,34,S2,8PSK
87=12591,H,7200,34,S2,8PSK
88=12593,V,9600,34,S2,8PSK
89=12601,H,6666,78,DVB-S,QPSK
90=12608,V,4800,34,S2,8PSK
91=12609,H,6666,78,DVB-S,QPSK
92=12614,V,5000,56,S2,8PSK
93=12621,H,4936,34,S2,8PSK
94=12621,V,3750,34,S2,8PSK
95=12631,H,7200,34,S2,8PSK
96=12636,V,5000,34,S2,8PSK
97=12652,V,3333,34,S2,8PSK
98=12656,V,3600,34,S2,8PSK
99=12658,H,7200,34,S2,8PSK
100=12661,V,3600,34,S2,8PSK
101=12671,H,6666,78,DVB-S,QPSK
102=12674,V,3600,34,S2,8PSK
103=12677,V,2200,34,S2,8PSK
104=12680,V,2400,56,S2,8PSK
105=12680,H,6666,78,DVB-S,QPSK
106=12683,V,2400,56,S2,8PSK
107=12687,V,2400,56,S2,8PSK
108=12690,H,7200,34,S2,8PSK
109=12692,V,4800,34,S2,8PSK
110=12697,V,4800,34,S2,8PSK
111=12699,H,6666,78,S2,8PSK
112=12710,V,4800,34,S2,8PSK
113=12717,V,4800,34,S2,QPSK
114=12723,V,4800,34,S2,QPSK
115=12725,H,30000,89,S2,8PSK
116=12730,V,3600,34,S2,QPSK
117=12735,V,3600,34,S2,QPSK
118=12740,V,2400,34,S2,8PSK

View File

@ -1,19 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0255
2=Eutelsat 25B/Es'hail 1 (25.5E)
[DVB]
0=10
1=11046,H,27500,34,DVB-S,QPSK
2=11142,V,27500,34,DVB-S,QPSK
3=11547,V,27500,23,S2,8PSK
4=11566,H,27500,34,DVB-S,8PSK
5=11585,V,27500,23,S2,8PSK
6=11604,H,27500,34,DVB-S,QPSK
7=11623,V,27500,23,S2,8PSK
8=11642,H,27500,23,S2,8PSK
9=11678,H,27500,56,DVB-S,QPSK
10=21421,V,27500,34,DVB-S,QPSK

View File

@ -1,107 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0260
2=Badr 4/5/6 (26.0E)
[DVB]
0=98
1=3958,V,12000,34,DVB-S,QPSK
2=10730,H,27500,34,DVB-S,QPSK
3=10730,V,27500,34,S2,8PSK
4=10770,H,27500,34,DVB-S,QPSK
5=10810,H,27500,34,DVB-S,QPSK
6=10810,V,27500,12,S2,8PSK
7=10850,H,27500,56,DVB-S,QPSK
8=10850,V,27500,34,DVB-S,QPSK
9=10890,H,27500,34,S2,8PSK
10=10890,V,27500,34,S2,8PSK
11=10930,H,27500,34,DVB-S,QPSK
12=10930,V,27500,34,S2,8PSK
13=11228,V,27500,34,DVB-S,QPSK
14=11557,H,2960,34,DVB-S,QPSK
15=11563,H,1500,34,DVB-S,QPSK
16=11727,H,27500,Auto,S2,8PSK
17=11747,V,27500,34,DVB-S,QPSK
18=11785,V,27500,34,DVB-S,QPSK
19=11804,H,27500,34,DVB-S,QPSK
20=11823,V,27500,12,S2,8PSK
21=11843,H,27500,34,DVB-S,QPSK
22=11862,V,27500,34,DVB-S,QPSK
23=11881,H,27500,56,S2,8PSK
24=11900,V,27500,34,DVB-S,QPSK
25=11919,H,27500,34,DVB-S,QPSK
26=11938,V,27500,34,DVB-S,QPSK
27=11958,H,27500,34,DVB-S,QPSK
28=11996,H,27500,34,DVB-S,QPSK
29=12015,V,27500,34,DVB-S,QPSK
30=12034,H,27500,34,DVB-S,QPSK
31=12054,V,27500,34,DVB-S,QPSK
32=12073,H,27500,34,DVB-S,QPSK
33=12092,V,27500,34,DVB-S,QPSK
34=12111,H,27500,34,DVB-S,QPSK
35=12130,V,27500,34,DVB-S,QPSK
36=12149,H,30000,56,S2,QPSK
37=12169,V,22000,34,S2,QPSK
38=12182,H,16200,34,DVB-S,QPSK
39=12207,V,27500,34,DVB-S,QPSK
40=12226,H,27500,34,DVB-S,QPSK
41=12245,V,27500,56,S2,QPSK
42=12265,H,27500,56,S2,QPSK
43=12284,V,27500,34,DVB-S,QPSK
44=12303,H,27500,34,DVB-S,QPSK
45=12322,V,27500,34,DVB-S,QPSK
46=12360,V,27500,34,DVB-S,QPSK
47=12399,V,27500,34,S2,8PSK
48=12418,H,27500,34,S2,8PSK
49=12437,V,27500,34,DVB-S,QPSK
50=12456,H,27500,34,DVB-S,QPSK
51=12476,V,27500,34,DVB-S,QPSK
52=12523,H,27500,34,DVB-S,QPSK
53=12547,H,2000,34,DVB-S,QPSK
54=12550,H,2950,34,DVB-S,QPSK
55=12550,V,7000,56,S2,8PSK
56=12558,V,7000,56,S2,8PSK
57=12559,H,2220,34,DVB-S,QPSK
58=12562,H,2220,34,DVB-S,QPSK
59=12565,H,2220,34,DVB-S,QPSK
60=12567,V,2200,34,DVB-S,QPSK
61=12568,H,1850,34,DVB-S,QPSK
62=12570,V,2200,34,DVB-S,QPSK
63=12570,H,1820,34,DVB-S,QPSK
64=12575,H,2200,56,DVB-S,QPSK
65=12576,V,7000,56,S2,8PSK
66=12579,H,2100,34,DVB-S,QPSK
67=12586,V,2220,34,DVB-S,QPSK
68=12587,H,2000,34,DVB-S,QPSK
69=12591,H,2200,34,DVB-S,QPSK
70=12591,V,2200,34,DVB-S,QPSK
71=12594,H,2200,34,DVB-S,QPSK
72=12600,V,7000,56,S2,QPSK
73=12602,H,2960,56,DVB-S,QPSK
74=12605,V,2220,34,DVB-S,QPSK
75=12607,H,3000,34,DVB-S,QPSK
76=12608,V,1820,34,DVB-S,QPSK
77=12611,V,2220,34,DVB-S,QPSK
78=12618,H,2220,34,DVB-S,QPSK
79=12620,V,2200,34,DVB-S,QPSK
80=12644,V,1850,34,DVB-S,QPSK
81=12647,H,2950,34,DVB-S,QPSK
82=12647,V,1595,34,S2,8PSK
83=12656,H,2892,34,DVB-S,QPSK
84=12666,H,2400,34,DVB-S,QPSK
85=12672,H,4440,34,DVB-S,QPSK
86=12679,H,2220,78,DVB-S,QPSK
87=12683,V,27500,34,DVB-S,QPSK
88=12705,H,2220,56,DVB-S,QPSK
89=12708,H,2220,56,DVB-S,QPSK
90=12711,H,2220,34,DVB-S,8PSK
91=12711,V,5632,34,DVB-S,QPSK
92=12717,V,2143,56,DVB-S,QPSK
93=12718,H,3000,56,DVB-S,QPSK
94=12722,H,3000,56,DVB-S,QPSK
95=12729,H,2200,34,DVB-S,QPSK
96=12734,H,3000,34,DVB-S,QPSK
97=12736,V,5632,34,DVB-S,QPSK
98=12740,H,2200,34,DVB-S,QPSK

View File

@ -1,101 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0282
2=Astra 2E/2F/2G (28.2E)
[DVB]
0=92
1=10714,H,22000,56,DVB-S,QPSK
2=10729,V,22000,56,DVB-S,QPSK
3=10744,H,22000,56,DVB-S,QPSK
4=10758,V,22000,56,DVB-S,QPSK
5=10773,H,22000,56,DVB-S,QPSK
6=10788,V,22000,56,DVB-S,QPSK
7=10803,H,22000,56,DVB-S,QPSK
8=10818,V,22000,56,DVB-S,QPSK
9=10832,H,22000,56,DVB-S,QPSK
10=10847,V,23000,23,S2,8PSK
11=10862,H,23000,23,S2,8PSK
12=10876,V,22000,56,DVB-S,QPSK
13=10891,H,22000,56,DVB-S,QPSK
14=10906,V,22000,56,DVB-S,QPSK
15=10936,V,23000,23,S2,8PSK
16=10964,H,22000,56,DVB-S,QPSK
17=10994,H,22000,56,DVB-S,QPSK
18=11023,H,23000,23,S2,8PSK
19=11053,H,23000,34,S2,8PSK
20=11068,V,23000,23,S2,8PSK
21=11082,H,22000,56,DVB-S,QPSK
22=11097,V,23000,23,S2,8PSK
23=11112,H,22000,56,DVB-S,QPSK
24=11126,V,22000,56,DVB-S,QPSK
25=11141,H,22000,56,DVB-S,QPSK
26=11171,H,22000,56,DVB-S,QPSK
27=11224,H,27500,23,DVB-S,QPSK
28=11224,V,27500,23,DVB-S,QPSK
29=11264,V,27500,23,DVB-S,QPSK
30=11264,H,27500,23,DVB-S,QPSK
31=11306,V,27500,23,DVB-S,QPSK
32=11306,H,27500,23,DVB-S,QPSK
33=11344,V,27500,23,DVB-S,QPSK
34=11344,H,27500,23,DVB-S,QPSK
35=11386,V,27500,23,DVB-S,QPSK
36=11386,H,27500,23,DVB-S,QPSK
37=11426,H,27500,23,DVB-S,QPSK
38=11426,V,27500,23,DVB-S,QPSK
39=11464,H,22000,56,DVB-S,QPSK
40=11479,V,22000,56,DVB-S,QPSK
41=11509,V,22000,56,DVB-S,QPSK
42=11523,H,22000,56,DVB-S,QPSK
43=11538,V,23000,23,S2,8PSK
44=11553,H,22000,56,DVB-S,QPSK
45=11568,V,22000,56,DVB-S,QPSK
46=11582,H,22000,56,DVB-S,QPSK
47=11597,V,22000,56,DVB-S,QPSK
48=11618,V,1562,56,S2,QPSK
49=11671,H,22000,56,DVB-S,QPSK
50=11675,H,30000,56,S2,QPSK
51=11686,V,22000,56,DVB-S,QPSK
52=11720,H,29500,34,S2,QPSK
53=11739,V,29500,34,S2,QPSK
54=11758,H,29500,34,S2,QPSK
55=11798,H,29500,34,S2,QPSK
56=11817,V,27500,23,DVB-S,QPSK
57=11836,H,27500,56,DVB-S,QPSK
58=11856,V,29500,34,S2,QPSK
59=11876,H,27500,23,DVB-S,QPSK
60=11895,V,27500,23,DVB-S,QPSK
61=11914,H,27500,56,DVB-S,QPSK
62=11934,V,27500,56,DVB-S,QPSK
63=11954,H,27500,23,DVB-S,QPSK
64=11973,V,29500,34,S2,QPSK
65=11992,H,27500,23,DVB-S,QPSK
66=12012,V,29500,34,S2,QPSK
67=12051,V,27500,23,DVB-S,QPSK
68=12070,H,27500,56,DVB-S,QPSK
69=12090,V,29500,34,S2,QPSK
70=12110,H,27500,56,DVB-S,QPSK
71=12148,H,27500,56,DVB-S,QPSK
72=12168,V,29500,34,S2,QPSK
73=12188,H,27500,56,DVB-S,QPSK
74=12207,V,27500,56,DVB-S,QPSK
75=12226,H,29500,34,S2,QPSK
76=12246,V,29500,34,S2,QPSK
77=12266,H,27500,56,DVB-S,QPSK
78=12285,V,27500,23,DVB-S,QPSK
79=12324,V,29500,34,S2,QPSK
80=12344,H,29500,34,S2,QPSK
81=12363,V,29500,34,S2,QPSK
82=12441,V,29500,34,S2,QPSK
83=12460,H,29500,34,S2,QPSK
84=12480,V,27500,23,DVB-S,QPSK
85=12522,V,27000,Auto,DVB-S,QPSK
86=12573,H,6960,23,S2,QPSK
87=12581,V,7200,34,S2,8PSK
88=12582,H,6960,23,S2,QPSK
89=12603,V,3095,Auto,S2,QPSK
90=12683,H,6960,23,S2,8PSK
91=12692,H,6960,23,S2,8PSK
92=12699,H,4640,23,S2,8PSK

View File

@ -1,96 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0305
2=Arabsat 5A (30.5E)
[DVB]
0=87
1=3770,V,2200,34,DVB-S,QPSK
2=3820,V,2848,34,DVB-S,QPSK
3=3880,V,3888,78,DVB-S,QPSK
4=3884,V,3888,78,DVB-S,QPSK
5=3888,V,3888,78,DVB-S,QPSK
6=3947,V,2200,34,DVB-S,QPSK
7=3951,V,2220,34,DVB-S,QPSK
8=4061,V,1615,78,DVB-S,QPSK
9=4126,V,2892,34,DVB-S,QPSK
10=10717,H,2069,23,S2,8PSK
11=10721,H,4300,23,S2,8PSK
12=10727,H,4300,23,DVB-S,QPSK
13=10744,H,4300,23,DVB-S,QPSK
14=10749,H,3125,Auto,DVB-S,QPSK
15=10757,H,2220,34,DVB-S,QPSK
16=10760,H,2050,23,S2,8PSK
17=10765,H,1950,34,S2,QPSK
18=10770,H,1650,23,S2,8PSK
19=10777,H,2960,34,DVB-S,QPSK
20=10782,H,2960,34,DVB-S,QPSK
21=10797,H,8000,56,S2,8PSK
22=10805,H,3885,56,DVB-S,QPSK
23=10816,H,8000,56,DVB-S,QPSK
24=10827,H,5800,34,DVB-S,QPSK
25=10832,V,2780,56,DVB-S,QPSK
26=10858,V,2960,34,DVB-S,QPSK
27=10924,H,17000,34,DVB-S,QPSK
28=10940,H,8000,56,DVB-S,QPSK
29=10946,H,2400,78,DVB-S,QPSK
30=12503,V,2220,34,DVB-S,QPSK
31=12506,V,2220,34,DVB-S,QPSK
32=12507,H,2220,34,DVB-S,QPSK
33=12509,V,2222,34,DVB-S,QPSK
34=12511,V,2200,34,DVB-S,QPSK
35=12514,V,2220,34,DVB-S,QPSK
36=12516,H,2230,34,DVB-S,QPSK
37=12523,V,6000,Auto,DVB-S,QPSK
38=12533,V,3890,34,DVB-S,QPSK
39=12538,V,2690,34,DVB-S,QPSK
40=12539,H,2960,34,DVB-S,QPSK
41=12543,V,2410,34,S2,8PSK
42=12559,H,2963,34,DVB-S,QPSK
43=12568,H,2960,Auto,DVB-S,QPSK
44=12576,H,1613,Auto,S2,QPSK
45=12588,H,3000,34,DVB-S,QPSK
46=12593,H,2960,34,DVB-S,QPSK
47=12596,H,2220,34,DVB-S,QPSK
48=12596,V,1800,78,DVB-S,QPSK
49=12603,V,3300,34,DVB-S,QPSK
50=12607,V,2590,56,DVB-S,QPSK
51=12608,H,2200,34,DVB-S,QPSK
52=12610,V,2970,34,DVB-S,QPSK
53=12611,H,3000,34,DVB-S,QPSK
54=12614,H,2200,34,DVB-S,QPSK
55=12614,V,3820,89,S2,QPSK
56=12618,H,2960,34,DVB-S,QPSK
57=12621,V,3800,34,S2,8PSK
58=12624,V,2220,34,DVB-S,QPSK
59=12630,V,2893,34,DVB-S,QPSK
60=12634,V,2893,34,DVB-S,QPSK
61=12638,V,2894,34,DVB-S,QPSK
62=12641,V,2894,34,DVB-S,QPSK
63=12644,V,2894,34,DVB-S,QPSK
64=12647,H,2960,34,DVB-S,QPSK
65=12648,V,2894,34,DVB-S,QPSK
66=12651,H,3885,34,DVB-S,QPSK
67=12652,V,2893,34,DVB-S,QPSK
68=12655,H,2410,34,DVB-S,QPSK
69=12656,V,1660,56,S2,8PSK
70=12667,H,4112,34,DVB-S,QPSK
71=12667,V,2220,34,DVB-S,QPSK
72=12671,V,2600,34,DVB-S,QPSK
73=12675,V,4300,34,DVB-S,QPSK
74=12679,V,3000,34,DVB-S,QPSK
75=12685,V,4300,34,DVB-S,QPSK
76=12697,V,4300,34,DVB-S,QPSK
77=12708,V,2590,34,DVB-S,QPSK
78=12712,H,2220,34,DVB-S,QPSK
79=12713,V,1850,34,DVB-S,QPSK
80=12716,V,2600,34,DVB-S,QPSK
81=12719,H,2960,34,DVB-S,QPSK
82=12719,V,3000,34,DVB-S,QPSK
83=12722,H,2200,34,DVB-S,QPSK
84=12724,V,2220,34,DVB-S,QPSK
85=12732,V,2000,78,DVB-S,QPSK
86=12733,H,2960,34,DVB-S,QPSK
87=12737,H,2220,34,DVB-S,QPSK

View File

@ -1,30 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0308
2=Eutelsat 31A (30.8E)
[DVB]
0=21
1=10960,H,3330,78,DVB-S,QPSK
2=10965,H,3330,78,DVB-S,QPSK
3=10970,H,3330,78,DVB-S,QPSK
4=10975,H,3330,78,DVB-S,QPSK
5=10979,H,3330,78,DVB-S,QPSK
6=10984,H,3330,56,DVB-S,QPSK
7=10988,H,3330,78,DVB-S,QPSK
8=10992,H,3330,78,DVB-S,QPSK
9=11004,H,7500,34,S2,8PSK
10=11011,H,3330,56,DVB-S,QPSK
11=11015,H,3330,78,DVB-S,QPSK
12=11019,H,3330,78,DVB-S,QPSK
13=11024,H,3330,78,DVB-S,QPSK
14=11044,H,21000,56,S2,QPSK
15=11560,H,21000,56,S2,8PSK
16=11622,H,2300,56,DVB-S,QPSK
17=11624,H,2200,56,DVB-S,QPSK
18=11627,H,2300,56,DVB-S,QPSK
19=11630,H,2222,56,DVB-S,QPSK
20=11644,H,2300,910,S2,8PSK
21=11651,H,7500,34,S2,8PSK

View File

@ -1,10 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0310
2=Hylas 2 (31.0E)
[DVB]
0=1
1=20036,H,10000,12,S2,8PSK

View File

@ -1,24 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0315
2=Astra 5B (31.5E)
[DVB]
0=15
1=11758,H,27500,34,DVB-S,QPSK
2=11817,V,27500,34,DVB-S,QPSK
3=11934,V,30000,23,S2,8PSK
4=11954,H,27500,56,S2,8PSK
5=11973,V,27500,56,S2,8PSK
6=12012,V,30000,34,S2,8PSK
7=12070,H,30000,34,S2,8PSK
8=12090,V,30000,34,S2,8PSK
9=12168,V,30000,34,S2,8PSK
10=12207,V,27500,56,S2,8PSK
11=12246,V,30000,34,S2,8PSK
12=12266,H,27500,56,S2,8PSK
13=12324,V,30000,34,S2,8PSK
14=12402,V,30000,34,S2,8PSK
15=12480,V,30000,34,S2,8PSK

View File

@ -1,47 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0330
2=Eutelsat 33B/33C/Intelsat 28 (33.0E)
[DVB]
0=38
1=10968,V,6665,45,S2,QPSK
2=10975,H,30000,910,S2,QPSK
3=10976,V,6665,45,S2,QPSK
4=11043,H,7200,34,S2,8PSK
5=11052,H,7200,56,S2,8PSK
6=11072,H,3333,78,DVB-S,QPSK
7=11077,H,3750,34,S2,8PSK
8=11094,H,3000,34,S2,8PSK
9=11098,H,2960,56,DVB-S,QPSK
10=11101,H,2222,56,DVB-S,QPSK
11=11105,H,3333,34,S2,8PSK
12=11154,V,15710,12,DVB-S,QPSK
13=11429,V,10098,35,S2,QPSK
14=11457,V,1704,56,S2,8PSK
15=11461,V,2000,78,DVB-S,QPSK
16=11467,V,3600,34,S2,8PSK
17=11471,V,3820,34,S2,8PSK
18=11475,V,3820,34,S2,8PSK
19=11476,H,3820,34,S2,8PSK
20=11580,H,2478,23,S2,8PSK
21=11583,H,2478,23,S2,8PSK
22=11593,H,15710,12,DVB-S,QPSK
23=11605,V,3333,56,S2,8PSK
24=11608,H,3810,56,S2,8PSK
25=12630,V,2400,35,S2,8PSK
26=12634,V,4800,34,S2,8PSK
27=12640,V,2400,23,S2,8PSK
28=12643,V,2400,23,S2,8PSK
29=12646,V,4800,34,S2,8PSK
30=12650,V,2400,23,S2,8PSK
31=12653,V,2400,23,S2,8PSK
32=12656,V,2400,23,S2,8PSK
33=12684,V,2050,56,S2,8PSK
34=12691,V,2222,78,DVB-S,QPSK
35=12698,V,3333,34,DVB-S,QPSK
36=12722,V,16730,34,S2,QPSK
37=12736,V,4444,34,DVB-S,QPSK
38=12742,V,4444,34,DVB-S,QPSK

View File

@ -1,111 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0360
2=Eutelsat 36A/36B (36.0E)
[DVB]
0=102
1=11053,V,2894,34,DVB-S,QPSK
2=11057,V,2894,34,DVB-S,QPSK
3=11212,H,14400,35,S2,8PSK
4=11221,V,30000,56,S2,QPSK
5=11263,V,30000,56,S2,QPSK
6=11304,V,30000,56,S2,QPSK
7=11346,V,30000,56,S2,QPSK
8=11387,V,30000,56,S2,QPSK
9=11429,V,30000,56,S2,QPSK
10=11429,H,2893,34,DVB-S,QPSK
11=11442,H,2500,56,S2,8PSK
12=11474,V,30000,56,DVB-S,QPSK
13=11481,V,2200,34,S2,8PSK
14=11510,V,30000,56,DVB-S,QPSK
15=11590,V,2524,35,S2,QPSK
16=11593,V,2524,35,S2,QPSK
17=11727,H,27500,34,S2,8PSK
18=11727,V,27500,34,DVB-S,QPSK
19=11747,H,27500,34,DVB-S,QPSK
20=11747,V,27500,34,S2,8PSK
21=11766,V,27500,34,DVB-S,QPSK
22=11766,H,27500,34,S2,8PSK
23=11785,H,27500,34,DVB-S,QPSK
24=11785,V,27500,34,DVB-S,QPSK
25=11804,V,27500,34,S2,8PSK
26=11804,H,27500,34,S2,8PSK
27=11823,H,27500,34,DVB-S,QPSK
28=11823,V,27500,34,S2,8PSK
29=11843,V,27500,34,DVB-S,QPSK
30=11843,H,27500,34,S2,8PSK
31=11862,H,27500,34,DVB-S,QPSK
32=11862,V,27500,34,DVB-S,QPSK
33=11881,V,27500,34,DVB-S,QPSK
34=11881,H,27500,34,DVB-S,QPSK
35=11900,H,26480,12,DVB-S,QPSK
36=11900,V,27500,34,DVB-S,QPSK
37=11919,V,27500,34,S2,8PSK
38=11919,H,27500,34,S2,8PSK
39=11938,V,27500,34,S2,8PSK
40=11940,H,27500,34,DVB-S,QPSK
41=11958,V,27500,34,DVB-S,QPSK
42=11958,H,27500,34,S2,8PSK
43=11977,H,27500,34,DVB-S,QPSK
44=11977,V,27500,34,DVB-S,QPSK
45=11996,V,27500,34,S2,8PSK
46=11996,H,27500,34,S2,8PSK
47=12015,H,27500,34,DVB-S,QPSK
48=12015,V,27500,34,S2,8PSK
49=12034,V,27500,34,DVB-S,QPSK
50=12034,H,27500,34,S2,8PSK
51=12054,H,27500,34,DVB-S,QPSK
52=12054,V,27500,34,S2,8PSK
53=12073,H,27500,34,S2,8PSK
54=12073,V,27500,34,DVB-S,QPSK
55=12092,H,27500,23,S2,8PSK
56=12092,V,27500,34,DVB-S,QPSK
57=12111,H,27500,34,S2,8PSK
58=12130,V,27500,34,S2,8PSK
59=12149,H,27500,34,S2,8PSK
60=12169,V,27500,34,S2,8PSK
61=12174,H,4340,34,DVB-S,QPSK
62=12190,H,20000,34,DVB-S,QPSK
63=12207,V,27500,34,S2,8PSK
64=12226,H,27500,34,DVB-S,QPSK
65=12245,V,27500,34,DVB-S,QPSK
66=12245,H,27500,34,DVB-S,QPSK
67=12265,H,27500,34,DVB-S,QPSK
68=12284,V,27500,34,DVB-S,QPSK
69=12303,H,27500,34,DVB-S,QPSK
70=12322,V,27500,34,DVB-S,QPSK
71=12322,H,23437,34,DVB-S,QPSK
72=12341,H,27500,34,DVB-S,QPSK
73=12360,V,27500,34,S2,8PSK
74=12360,H,26480,12,DVB-S,QPSK
75=12380,H,27500,34,DVB-S,QPSK
76=12399,V,27500,34,DVB-S,QPSK
77=12418,H,27500,34,S2,8PSK
78=12437,V,27500,34,S2,8PSK
79=12440,H,23437,23,DVB-S,QPSK
80=12456,H,27500,34,DVB-S,QPSK
81=12476,V,27500,34,DVB-S,QPSK
82=12476,H,26040,23,DVB-S,QPSK
83=12511,H,4340,12,DVB-S,QPSK
84=12520,H,4340,12,DVB-S,QPSK
85=12522,V,1346,34,DVB-S,QPSK
86=12540,V,2220,34,DVB-S,QPSK
87=12557,V,1346,34,S2,QPSK
88=12563,H,7120,34,DVB-S,QPSK
89=12571,H,2894,34,DVB-S,QPSK
90=12572,V,1786,34,S2,8PSK
91=12575,H,2894,34,DVB-S,QPSK
92=12608,V,6200,34,S2,QPSK
93=12629,H,3444,34,S2,8PSK
94=12654,V,1800,78,DVB-S,QPSK
95=12689,V,2170,34,DVB-S,QPSK
96=12693,V,2532,34,DVB-S,QPSK
97=12699,V,6000,34,DVB-S,QPSK
98=12703,V,2200,78,DVB-S,QPSK
99=12706,V,1800,78,DVB-S,QPSK
100=12709,V,2200,78,DVB-S,QPSK
101=12713,V,1800,78,DVB-S,QPSK
102=12716,V,1800,78,DVB-S,QPSK

View File

@ -1,79 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0380
2=Paksat 1R (38.0E)
[DVB]
0=70
1=3715,V,7200,34,DVB-S,QPSK
2=3732,V,18000,89,S2,QPSK
3=3762,V,4340,34,DVB-S,QPSK
4=3770,V,7700,78,DVB-S,QPSK
5=3775,V,1004,34,DVB-S,QPSK
6=3782,V,2170,34,DVB-S,QPSK
7=3800,V,7300,34,DVB-S,QPSK
8=3806,V,1444,34,S2,QPSK
9=3818,V,2200,34,DVB-S,QPSK
10=3824,V,2800,34,DVB-S,QPSK
11=3830,H,2000,34,DVB-S,QPSK
12=3833,V,2600,34,DVB-S,QPSK
13=3856,V,2894,34,DVB-S,QPSK
14=3860,V,3333,34,DVB-S,QPSK
15=3865,V,2894,34,DVB-S,QPSK
16=3959,V,7234,34,DVB-S,QPSK
17=3966,V,2800,34,DVB-S,QPSK
18=3973,V,6510,34,DVB-S,QPSK
19=3976,H,1750,34,DVB-S,QPSK
20=3979,V,3255,34,DVB-S,QPSK
21=3981,H,2222,34,DVB-S,QPSK
22=3984,V,2893,34,DVB-S,QPSK
23=3992,V,2170,56,DVB-S,QPSK
24=4003,V,15550,34,DVB-S,QPSK
25=4005,H,13845,78,DVB-S,QPSK
26=4013,V,2893,34,DVB-S,QPSK
27=4023,V,5700,35,S2,8PSK
28=4031,V,1078,34,DVB-S,QPSK
29=4037,V,4800,56,S2,QPSK
30=4042,V,2800,34,S2,QPSK
31=4047,V,3255,34,DVB-S,QPSK
32=4054,V,7000,34,DVB-S,QPSK
33=4060,H,23000,56,DVB-S,QPSK
34=4060,V,2893,34,DVB-S,QPSK
35=4073,V,6150,34,S2,QPSK
36=4081,V,3255,34,DVB-S,QPSK
37=4085,V,2960,34,DVB-S,QPSK
38=4090,V,3330,34,DVB-S,QPSK
39=4093,V,2527,34,DVB-S,QPSK
40=4098,H,1600,34,DVB-S,QPSK
41=4101,V,2800,34,DVB-S,QPSK
42=4105,V,2310,56,DVB-S,QPSK
43=4114,V,5700,34,DVB-S,QPSK
44=4124,V,5000,34,DVB-S,QPSK
45=4130,V,2500,34,DVB-S,QPSK
46=4133,V,2220,89,S2,QPSK
47=4135,H,3330,34,DVB-S,QPSK
48=4141,V,2800,34,DVB-S,QPSK
49=4158,V,12000,34,DVB-S,QPSK
50=4168,V,2800,34,DVB-S,QPSK
51=4172,V,2800,34,DVB-S,QPSK
52=4180,V,2170,34,DVB-S,QPSK
53=4184,V,2800,34,S2,QPSK
54=4188,V,2170,34,DVB-S,QPSK
55=10971,V,1000,56,S2,8PSK
56=10972,V,1000,56,S2,8PSK
57=10990,V,1650,34,DVB-S,QPSK
58=10992,V,1500,34,DVB-S,QPSK
59=11103,V,3012,34,DVB-S,QPSK
60=11122,V,1808,34,DVB-S,QPSK
61=11124,V,1300,34,DVB-S,QPSK
62=11150,V,3760,34,DVB-S,QPSK
63=11167,V,3000,78,DVB-S,QPSK
64=11184,V,2000,34,DVB-S,QPSK
65=11188,V,2000,34,DVB-S,QPSK
66=11191,V,2000,34,DVB-S,QPSK
67=12652,V,2050,34,DVB-S,QPSK
68=12687,V,2170,78,DVB-S,QPSK
69=12691,V,3333,34,DVB-S,QPSK
70=12696,V,3333,34,DVB-S,QPSK

View File

@ -1,60 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0390
2=Hellas Sat 2 (39.0E)
[DVB]
0=51
1=10955,V,4444,34,S2,8PSK
2=10960,V,1852,34,DVB-S,QPSK
3=10968,V,4400,34,DVB-S,QPSK
4=10972,V,3300,34,DVB-S,QPSK
5=10977,V,3300,34,DVB-S,QPSK
6=10981,V,3300,34,DVB-S,QPSK
7=10987,V,3333,78,DVB-S,QPSK
8=11012,V,30000,34,S2,8PSK
9=11053,V,30000,34,S2,8PSK
10=11078,V,3333,34,DVB-S,QPSK
11=11083,V,4400,34,DVB-S,QPSK
12=11091,V,1666,34,DVB-S,QPSK
13=11097,H,6111,34,DVB-S,QPSK
14=11104,V,14400,34,DVB-S,QPSK
15=11135,V,30000,23,S2,8PSK
16=11464,H,3224,78,DVB-S,QPSK
17=11473,H,4444,34,S2,8PSK
18=11479,H,3190,56,DVB-S,QPSK
19=11482,H,2905,34,DVB-S,QPSK
20=11486,H,2509,56,S2,8PSK
21=11496,H,2960,34,DVB-S,QPSK
22=11500,H,2960,23,S2,8PSK
23=11503,H,2200,56,DVB-S,QPSK
24=11507,H,2220,34,DVB-S,QPSK
25=11559,H,1950,23,S2,8PSK
26=11565,H,2250,34,DVB-S,QPSK
27=11608,H,2100,34,DVB-S,QPSK
28=11611,H,2100,34,DVB-S,QPSK
29=11618,H,2500,78,DVB-S,QPSK
30=11622,H,2800,56,DVB-S,QPSK
31=11624,V,3255,34,DVB-S,QPSK
32=11625,H,3333,34,DVB-S,QPSK
33=11628,H,2800,56,DVB-S,QPSK
34=11632,H,2800,56,DVB-S,QPSK
35=11649,H,4433,34,DVB-S,QPSK
36=11663,H,5925,34,DVB-S,QPSK
37=11670,H,3720,34,DVB-S,QPSK
38=11679,H,3700,56,DVB-S,QPSK
39=11685,H,3700,34,DVB-S,QPSK
40=11692,H,2300,78,DVB-S,QPSK
41=12524,V,30000,78,DVB-S,QPSK
42=12524,H,30000,78,DVB-S,QPSK
43=12565,V,30000,78,DVB-S,QPSK
44=12565,H,30000,78,DVB-S,QPSK
45=12606,V,30000,78,DVB-S,QPSK
46=12606,H,30000,78,DVB-S,QPSK
47=12647,V,30000,78,DVB-S,QPSK
48=12647,H,30000,34,S2,8PSK
49=12688,V,30000,78,DVB-S,QPSK
50=12688,H,30000,78,DVB-S,QPSK
51=12729,V,30000,78,DVB-S,QPSK

View File

@ -1,30 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0400
2=Express AM7 (40.0E)
[DVB]
0=21
1=3557,V,2894,78,DVB-S,QPSK
2=3558,H,3720,34,S2,8PSK
3=3561,V,2905,34,DVB-S,QPSK
4=3563,H,3600,34,S2,8PSK
5=3565,V,2896,34,DVB-S,QPSK
6=3566,H,1850,34,S2,8PSK
7=3569,V,2905,34,DVB-S,QPSK
8=3573,V,2896,34,DVB-S,QPSK
9=3577,V,2905,34,DVB-S,QPSK
10=3581,V,2894,34,DVB-S,QPSK
11=3585,V,2905,34,DVB-S,QPSK
12=3589,V,2905,34,DVB-S,QPSK
13=3592,V,2894,34,DVB-S,QPSK
14=3615,V,14990,34,S2,8PSK
15=3635,V,15280,34,S2,8PSK
16=3665,H,14990,34,S2,8PSK
17=3675,V,33483,78,DVB-S,QPSK
18=3685,H,15284,34,S2,8PSK
19=3725,H,28108,35,S2,QPSK
20=3739,V,1922,78,DVB-S,QPSK
21=3742,V,2893,34,DVB-S,QPSK

View File

@ -1,199 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0420
2=Türksat 2A/3A/4A (42.0E)
[DVB]
0=190
1=10962,H,16666,34,DVB-S,QPSK
2=10970,V,30000,56,S2,8PSK
3=10974,H,2660,56,S2,8PSK
4=10978,H,2660,56,S2,8PSK
5=10982,H,2660,56,S2,8PSK
6=10986,H,2660,56,S2,8PSK
7=10997,H,3333,56,DVB-S,QPSK
8=11001,H,3200,34,DVB-S,QPSK
9=11006,H,2222,56,DVB-S,QPSK
10=11012,V,30000,56,DVB-S,QPSK
11=11014,H,9600,34,DVB-S,QPSK
12=11021,H,2222,34,DVB-S,QPSK
13=11027,H,2222,56,DVB-S,QPSK
14=11031,H,2222,56,DVB-S,QPSK
15=11039,H,4800,23,S2,8PSK
16=11045,H,4800,34,DVB-S,QPSK
17=11053,H,8000,34,DVB-S,QPSK
18=11054,V,30000,34,S2,8PSK
19=11062,H,4820,34,DVB-S,QPSK
20=11068,H,2400,56,DVB-S,QPSK
21=11071,H,2200,56,DVB-S,QPSK
22=11096,V,30000,56,DVB-S,QPSK
23=11096,H,30000,56,DVB-S,QPSK
24=11128,H,3150,56,S2,QPSK
25=11137,H,2960,56,DVB-S,QPSK
26=11138,V,13000,12,S2,QPSK
27=11142,H,2221,56,DVB-S,QPSK
28=11146,H,3330,Auto,DVB-S,QPSK
29=11152,H,2222,Auto,DVB-S,QPSK
30=11156,V,2222,56,DVB-S,QPSK
31=11157,H,3180,56,DVB-S,QPSK
32=11161,V,2222,56,DVB-S,QPSK
33=11161,H,3180,56,DVB-S,QPSK
34=11165,H,3180,56,DVB-S,QPSK
35=11169,V,3333,56,DVB-S,QPSK
36=11169,H,3180,56,DVB-S,QPSK
37=11173,H,3180,56,DVB-S,QPSK
38=11174,V,2200,Auto,DVB-S,QPSK
39=11177,H,2222,56,DVB-S,QPSK
40=11178,V,3600,56,DVB-S,QPSK
41=11180,H,2960,56,S2,8PSK
42=11183,V,2222,56,DVB-S,QPSK
43=11187,H,2080,56,DVB-S,QPSK
44=11191,H,2070,78,DVB-S,QPSK
45=11195,H,4000,56,S2,8PSK
46=11196,V,3200,56,DVB-S,QPSK
47=11458,V,3200,34,S2,8PSK
48=11462,V,3200,34,S2,8PSK
49=11466,V,3200,34,S2,8PSK
50=11470,V,3200,34,S2,8PSK
51=11472,H,23450,56,DVB-S,QPSK
52=11473,V,3200,34,S2,8PSK
53=11477,V,3200,34,S2,8PSK
54=11480,V,3200,34,S2,8PSK
55=11486,V,3200,34,S2,8PSK
56=11490,V,3200,56,DVB-S,QPSK
57=11496,V,2960,56,DVB-S,QPSK
58=11500,V,2222,56,DVB-S,QPSK
59=11504,V,3200,56,DVB-S,QPSK
60=11509,H,30000,23,DVB-S,QPSK
61=11518,V,2222,Auto,DVB-S,QPSK
62=11521,V,2222,Auto,DVB-S,QPSK
63=11524,V,2222,Auto,DVB-S,QPSK
64=11528,V,2960,Auto,DVB-S,QPSK
65=11540,H,3600,56,DVB-S,QPSK
66=11545,H,4425,56,DVB-S,QPSK
67=11550,H,2110,56,S2,QPSK
68=11558,V,30000,23,DVB-S,QPSK
69=11566,H,3200,56,S2,QPSK
70=11573,H,1800,56,DVB-S,QPSK
71=11574,V,2222,56,DVB-S,QPSK
72=11577,H,2222,Auto,DVB-S,QPSK
73=11594,V,25000,23,DVB-S,QPSK
74=11596,H,22000,34,S2,QPSK
75=11622,V,2960,56,DVB-S,QPSK
76=11624,V,2222,56,DVB-S,QPSK
77=11624,H,2960,56,DVB-S,QPSK
78=11626,V,2300,56,DVB-S,QPSK
79=11627,H,4444,56,DVB-S,QPSK
80=11633,V,2222,78,DVB-S,QPSK
81=11637,V,2222,56,DVB-S,QPSK
82=11642,V,2220,56,DVB-S,QPSK
83=11647,H,3333,Auto,DVB-S,QPSK
84=11649,V,2960,Auto,DVB-S,QPSK
85=11651,H,2222,56,DVB-S,QPSK
86=11652,V,2222,56,DVB-S,QPSK
87=11656,V,3200,56,DVB-S,QPSK
88=11660,H,7500,34,S2,8PSK
89=11667,H,2960,56,DVB-S,QPSK
90=11675,H,2222,Auto,DVB-S,QPSK
91=11676,V,24444,34,DVB-S,QPSK
92=11680,H,1666,23,DVB-S,QPSK
93=11683,H,2222,56,DVB-S,QPSK
94=11691,H,2222,56,DVB-S,QPSK
95=11691,V,2222,56,DVB-S,QPSK
96=11727,V,27000,56,DVB-S,QPSK
97=11746,H,27500,56,DVB-S,QPSK
98=11775,V,27500,34,S2,8PSK
99=11794,H,27500,56,DVB-S,QPSK
100=11797,V,8800,56,DVB-S,QPSK
101=11807,V,8000,34,S2,8PSK
102=11821,H,17000,34,DVB-S,QPSK
103=11824,V,8000,34,DVB-S,QPSK
104=11853,H,25000,23,S2,8PSK
105=11855,V,30000,34,DVB-S,QPSK
106=11880,H,20000,23,S2,8PSK
107=11883,V,4800,56,DVB-S,QPSK
108=11916,V,30000,34,DVB-S,QPSK
109=11958,V,27500,56,DVB-S,QPSK
110=11977,H,27500,56,DVB-S,QPSK
111=11986,V,9600,56,DVB-S,QPSK
112=11999,V,11666,23,S2,8PSK
113=12009,V,4444,34,DVB-S,QPSK
114=12015,H,27500,56,DVB-S,QPSK
115=12034,V,27500,56,DVB-S,QPSK
116=12054,H,27500,56,DVB-S,QPSK
117=12073,V,27500,56,S2,8PSK
118=12079,H,6400,56,DVB-S,QPSK
119=12086,H,2960,56,DVB-S,QPSK
120=12090,H,2960,56,DVB-S,QPSK
121=12095,H,4800,56,DVB-S,QPSK
122=12103,H,8333,23,S2,8PSK
123=12123,H,15000,34,S2,8PSK
124=12130,V,27500,56,DVB-S,QPSK
125=12188,V,27500,56,DVB-S,QPSK
126=12196,H,9600,23,S2,8PSK
127=12209,H,10000,34,S2,8PSK
128=12213,V,5833,23,S2,8PSK
129=12219,H,6500,34,DVB-S,QPSK
130=12220,V,4800,56,DVB-S,QPSK
131=12228,V,8400,56,DVB-S,QPSK
132=12238,V,7200,56,DVB-S,QPSK
133=12245,H,27500,56,S2,8PSK
134=12265,V,27500,56,DVB-S,QPSK
135=12303,V,27500,56,DVB-S,QPSK
136=12329,H,6666,23,S2,8PSK
137=12336,H,5520,34,DVB-S,QPSK
138=12344,V,30000,34,DVB-S,QPSK
139=12346,H,9600,34,DVB-S,QPSK
140=12356,H,7100,23,S2,8PSK
141=12379,H,30000,34,DVB-S,QPSK
142=12380,V,27500,34,DVB-S,QPSK
143=12422,V,27500,34,DVB-S,QPSK
144=12422,H,30000,34,DVB-S,QPSK
145=12442,H,2963,78,DVB-S,QPSK
146=12447,H,2400,34,DVB-S,QPSK
147=12455,H,10800,23,S2,8PSK
148=12458,V,30000,34,DVB-S,QPSK
149=12509,H,3333,56,DVB-S,QPSK
150=12513,H,2215,56,DVB-S,QPSK
151=12516,H,2222,56,DVB-S,QPSK
152=12519,H,2222,56,DVB-S,QPSK
153=12524,V,22500,23,DVB-S,QPSK
154=12540,H,30000,34,DVB-S,QPSK
155=12559,V,27500,23,DVB-S,QPSK
156=12562,H,2960,56,S2,8PSK
157=12576,H,2090,78,DVB-S,QPSK
158=12578,H,2222,56,DVB-S,QPSK
159=12588,V,22500,34,DVB-S,QPSK
160=12588,H,3200,56,S2,8PSK
161=12595,H,4800,56,S2,8PSK
162=12605,V,27500,23,DVB-S,QPSK
163=12606,H,2222,78,DVB-S,QPSK
164=12611,H,5924,56,DVB-S,QPSK
165=12617,H,3333,56,DVB-S,QPSK
166=12620,V,2244,56,DVB-S,QPSK
167=12621,H,3333,56,DVB-S,QPSK
168=12624,V,2170,56,DVB-S,QPSK
169=12627,V,2278,78,DVB-S,QPSK
170=12632,V,2220,78,DVB-S,8PSK
171=12635,V,2240,56,S2,8PSK
172=12639,V,5000,56,S2,8PSK
173=12641,H,30000,23,DVB-S,QPSK
174=12646,V,4000,56,S2,8PSK
175=12651,V,5000,34,S2,8PSK
176=12658,V,2222,56,DVB-S,QPSK
177=12673,V,9600,34,DVB-S,QPSK
178=12685,H,30000,34,DVB-S,QPSK
179=12687,V,11400,34,DVB-S,QPSK
180=12699,V,7700,56,S2,QPSK
181=12711,V,2278,78,DVB-S,QPSK
182=12714,V,2960,56,DVB-S,QPSK
183=12718,V,2278,56,DVB-S,QPSK
184=12721,V,2278,78,DVB-S,QPSK
185=12723,V,2222,56,DVB-S,QPSK
186=12728,V,2222,56,DVB-S,QPSK
187=12729,H,27500,23,DVB-S,QPSK
188=12731,V,2222,56,DVB-S,QPSK
189=12746,V,2222,56,DVB-S,QPSK
190=18669,H,22500,34,DVB-S,QPSK

View File

@ -1,35 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0435
2=Astra 2G (43.5E)
[DVB]
0=26
1=10964,H,22000,56,DVB-S,QPSK
2=10994,H,22000,56,DVB-S,QPSK
3=11023,H,23000,23,S2,8PSK
4=11053,H,23000,34,S2,8PSK
5=11068,V,23000,23,S2,8PSK
6=11082,H,22000,56,DVB-S,QPSK
7=11097,V,23000,23,S2,8PSK
8=11112,H,22000,56,DVB-S,QPSK
9=11126,V,22000,56,DVB-S,QPSK
10=11141,H,22000,56,DVB-S,QPSK
11=11171,H,22000,56,DVB-S,QPSK
12=11224,V,27500,23,DVB-S,QPSK
13=11224,H,27500,23,DVB-S,QPSK
14=11264,V,27500,23,DVB-S,QPSK
15=11264,H,27500,23,DVB-S,QPSK
16=11464,H,22000,56,DVB-S,QPSK
17=11479,V,22000,56,DVB-S,QPSK
18=11509,V,22000,56,DVB-S,QPSK
19=11523,H,22000,56,DVB-S,QPSK
20=11538,V,23000,23,S2,8PSK
21=11553,H,22000,56,DVB-S,QPSK
22=11568,V,22000,56,DVB-S,QPSK
23=11582,H,22000,56,DVB-S,QPSK
24=11597,V,22000,56,DVB-S,QPSK
25=11671,H,22000,56,DVB-S,QPSK
26=11686,V,22000,56,DVB-S,QPSK

View File

@ -1,23 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0450
2=Intelsat 12 (45.0E)
[DVB]
0=14
1=11451,H,3254,78,DVB-S,QPSK
2=11468,V,27689,56,DVB-S,8PSK
3=11493,V,2960,78,DVB-S,QPSK
4=11506,V,1808,34,DVB-S,QPSK
5=11509,V,10000,23,S2,8PSK
6=11517,V,2960,78,DVB-S,QPSK
7=11523,V,5787,34,DVB-S,QPSK
8=11550,V,28800,35,S2,8PSK
9=11591,V,27689,56,DVB-S,8PSK
10=11632,V,27689,56,DVB-S,8PSK
11=11673,V,27689,56,DVB-S,8PSK
12=12518,H,14236,34,S2,8PSK
13=12568,V,8335,23,S2,8PSK
14=12580,H,6600,34,DVB-S,QPSK

View File

@ -1,49 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0460
2=AzerSpace 1/Africasat 1a (46.0E)
[DVB]
0=40
1=3730,V,30000,34,S2,8PSK
2=3753,V,30000,23,S2,8PSK
3=3833,V,1077,23,S2,8PSK
4=3953,V,1180,34,S2,8PSK
5=4016,V,1200,34,S2,8PSK
6=4021,V,1180,34,S2,8PSK
7=4024,V,1190,34,S2,8PSK
8=4026,V,1200,34,S2,8PSK
9=4028,V,1166,34,S2,8PSK
10=4105,H,1320,56,S2,QPSK
11=4145,H,6666,23,DVB-S,QPSK
12=10961,V,7500,23,S2,8PSK
13=10968,V,5000,23,S2,8PSK
14=10973,H,2221,56,DVB-S,QPSK
15=10979,V,7500,56,S2,8PSK
16=10987,V,7500,56,S2,8PSK
17=10988,H,2400,56,S2,8PSK
18=10991,H,1536,56,DVB-S,QPSK
19=10999,V,3570,56,DVB-S,QPSK
20=11002,V,2222,56,DVB-S,QPSK
21=11005,V,2222,56,DVB-S,QPSK
22=11008,V,2222,56,DVB-S,QPSK
23=11011,V,2222,56,DVB-S,QPSK
24=11014,V,2222,56,DVB-S,QPSK
25=11015,H,30000,56,DVB-S,QPSK
26=11024,V,12700,56,DVB-S,QPSK
27=11038,H,3333,56,S2,8PSK
28=11039,V,3700,78,DVB-S,QPSK
29=11047,V,10000,34,DVB-S,QPSK
30=11058,H,7500,56,DVB-S,QPSK
31=11061,V,3333,34,DVB-S,QPSK
32=11067,H,7500,56,S2,8PSK
33=11073,H,3333,78,DVB-S,QPSK
34=11077,V,2500,56,S2,8PSK
35=11095,H,27500,56,DVB-S,QPSK
36=11110,V,2222,56,DVB-S,QPSK
37=11134,H,27500,56,DVB-S,QPSK
38=11135,V,28800,56,S2,8PSK
39=11175,V,28800,56,S2,8PSK
40=11175,H,27500,56,DVB-S,QPSK

View File

@ -1,31 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0475
2=Intelsat 10 (47.5E)
[DVB]
0=22
1=11475,V,2700,34,DVB-S,QPSK
2=11531,V,2755,34,DVB-S,QPSK
3=11548,V,2000,56,S2,QPSK
4=11606,V,2200,56,S2,8PSK
5=11639,V,1900,78,DVB-S,QPSK
6=11642,V,1480,34,S2,8PSK
7=11644,V,1450,56,DVB-S,QPSK
8=11647,V,3200,34,DVB-S,QPSK
9=11654,V,1450,56,DVB-S,QPSK
10=11665,V,2000,34,DVB-S,QPSK
11=11670,V,2123,34,DVB-S,QPSK
12=11675,V,1900,78,DVB-S,QPSK
13=12517,H,6660,78,DVB-S,QPSK
14=12532,V,14395,34,S2,8PSK
15=12548,H,6111,Auto,DVB-S,QPSK
16=12564,H,3750,56,S2,QPSK
17=12574,H,6111,34,DVB-S,QPSK
18=12602,V,10112,12,S2,QPSK
19=12673,H,7200,34,DVB-S,QPSK
20=12691,H,14400,34,S2,8PSK
21=12712,H,13200,34,DVB-S,QPSK
22=12721,V,10000,Auto,DVB-S,QPSK

View File

@ -1,10 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0480
2=Afghansat 1 (48.0E)
[DVB]
0=1
1=11293,V,27500,56,DVB-S,QPSK

View File

@ -1,30 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0490
2=Yamal 202 (49.0E)
[DVB]
0=21
1=3635,H,3230,34,DVB-S,QPSK
2=3640,H,3215,34,DVB-S,QPSK
3=3644,H,3230,34,DVB-S,QPSK
4=3660,H,3333,34,DVB-S,QPSK
5=3714,H,8888,34,DVB-S,QPSK
6=3735,V,3219,34,DVB-S,QPSK
7=3743,H,34075,34,DVB-S,QPSK
8=3752,V,3230,34,DVB-S,QPSK
9=3781,H,1900,34,DVB-S,QPSK
10=3793,H,1800,34,DVB-S,QPSK
11=3826,H,2960,34,DVB-S,QPSK
12=3832,V,1500,34,DVB-S,QPSK
13=3866,H,3310,Auto,DVB-S,QPSK
14=3908,H,1356,12,DVB-S,QPSK
15=3936,H,3230,34,DVB-S,QPSK
16=3941,H,4000,34,DVB-S,QPSK
17=3950,H,3500,34,S2,8PSK
18=3961,H,8570,34,DVB-S,QPSK
19=3970,H,4275,34,DVB-S,QPSK
20=3976,H,4285,34,DVB-S,QPSK
21=4078,H,14400,89,S2,QPSK

View File

@ -1,11 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0505
2=NSS 5 (50.5E)
[DVB]
0=2
1=4172,V,13330,34,DVB-S,QPSK
2=12710,V,26670,34,DVB-S,QPSK

View File

@ -1,28 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0510
2=Express AM6 (51.0E)
[DVB]
0=19
1=3675,V,33483,78,DVB-S,QPSK
2=3708,H,4280,78,DVB-S,QPSK
3=10974,H,8150,34,DVB-S,QPSK
4=10990,V,3111,34,DVB-S,QPSK
5=10995,H,3255,34,DVB-S,QPSK
6=11001,H,4160,56,S2,QPSK
7=11044,V,44950,34,DVB-S,QPSK
8=11471,H,2400,34,DVB-S,QPSK
9=11474,H,4666,34,DVB-S,QPSK
10=11504,H,2200,56,DVB-S,QPSK
11=11506,H,1481,34,DVB-S,QPSK
12=11520,H,4800,56,DVB-S,QPSK
13=12511,V,2170,34,DVB-S,QPSK
14=12528,H,2100,34,S2,8PSK
15=12545,H,3000,23,DVB-S,QPSK
16=12572,H,1320,78,DVB-S,QPSK
17=12594,V,2050,34,DVB-S,QPSK
18=12594,H,2050,34,DVB-S,QPSK
19=12631,V,3000,34,DVB-S,QPSK

View File

@ -1,11 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0520
2=TurkmenÄlem52E/MonacoSat (52.0E)
[DVB]
0=2
1=12265,V,27500,23,S2,QPSK
2=12303,V,27500,23,S2,QPSK

View File

@ -1,24 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0525
2=Y1A (52.5E)
[DVB]
0=15
1=11747,H,27500,89,S2,QPSK
2=11766,V,27500,56,DVB-S,QPSK
3=11785,H,27500,56,DVB-S,QPSK
4=11823,H,27500,89,S2,QPSK
5=11862,H,27500,56,DVB-S,QPSK
6=11881,V,27500,56,DVB-S,QPSK
7=11900,H,27500,56,DVB-S,QPSK
8=11938,H,27500,56,DVB-S,QPSK
9=11958,V,27500,78,DVB-S,QPSK
10=11977,H,27500,89,S2,QPSK
11=11996,V,27500,56,DVB-S,QPSK
12=12015,H,27500,56,DVB-S,QPSK
13=12034,V,27500,23,S2,8PSK
14=12073,V,27500,78,DVB-S,QPSK
15=12092,H,27500,89,S2,QPSK

View File

@ -1,28 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0530
2=Express AM6 (53.0E)
[DVB]
0=19
1=3675,V,33483,78,DVB-S,QPSK
2=3708,H,4280,78,DVB-S,QPSK
3=10974,H,8150,34,DVB-S,QPSK
4=10990,V,3111,34,DVB-S,QPSK
5=10995,H,3255,34,DVB-S,QPSK
6=11001,H,4160,56,S2,QPSK
7=11044,V,44950,34,DVB-S,QPSK
8=11471,H,2400,34,DVB-S,QPSK
9=11474,H,4666,34,DVB-S,QPSK
10=11504,H,2200,56,DVB-S,QPSK
11=11506,H,1481,34,DVB-S,QPSK
12=11520,H,4800,56,DVB-S,QPSK
13=12511,V,2170,34,DVB-S,QPSK
14=12528,H,2100,34,S2,8PSK
15=12545,H,3000,23,DVB-S,QPSK
16=12572,H,1320,78,DVB-S,QPSK
17=12594,H,2050,34,DVB-S,QPSK
18=12594,V,2050,34,DVB-S,QPSK
19=12631,V,3000,34,DVB-S,QPSK

View File

@ -1,37 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0549
2=G-Sat 8/Yamal 402 (54.9E)
[DVB]
0=28
1=10845,V,32727,Auto,S2,QPSK
2=10962,V,5926,34,DVB-S,QPSK
3=10968,V,2951,Auto,DVB-S,QPSK
4=10976,H,2200,35,S2,8PSK
5=11008,V,3600,34,S2,QPSK
6=11045,V,40000,23,DVB-S,QPSK
7=11156,V,22000,12,S2,QPSK
8=11186,V,6642,34,S2,8PSK
9=11215,H,13000,12,S2,QPSK
10=11225,V,30000,89,S2,8PSK
11=11232,H,17000,34,S2,QPSK
12=11265,V,30000,34,DVB-S,QPSK
13=11305,V,10000,34,S2,QPSK
14=11345,V,30000,34,S2,8PSK
15=11425,V,30000,12,S2,QPSK
16=11486,V,8000,12,S2,QPSK
17=11531,H,3015,34,DVB-S,QPSK
18=11554,V,3800,56,DVB-S,QPSK
19=11686,H,3333,23,DVB-S,QPSK
20=12522,V,27500,34,S2,8PSK
21=12531,H,2500,56,S2,QPSK
22=12604,V,16080,56,DVB-S,QPSK
23=12630,H,3333,34,DVB-S,QPSK
24=12674,V,14940,34,S2,8PSK
25=12685,H,30000,34,S2,QPSK
26=12694,V,15282,34,S2,8PSK
27=12720,H,30000,34,S2,QPSK
28=12732,V,9557,23,S2,8PSK

View File

@ -1,31 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0560
2=Express AT1 (56.0E)
[DVB]
0=22
1=11727,H,27500,34,S2,8PSK
2=11881,H,27500,34,S2,8PSK
3=11919,H,27500,34,S2,8PSK
4=11958,H,27500,34,S2,8PSK
5=11996,H,27500,34,S2,8PSK
6=12034,H,27500,34,S2,8PSK
7=12073,H,27500,34,S2,8PSK
8=12111,H,27500,34,S2,8PSK
9=12130,V,27500,34,S2,8PSK
10=12149,H,27500,34,DVB-S,QPSK
11=12169,V,27500,56,S2,8PSK
12=12188,H,27500,34,DVB-S,QPSK
13=12226,H,27500,34,DVB-S,QPSK
14=12245,V,27500,56,S2,8PSK
15=12265,H,27500,34,S2,8PSK
16=12284,V,27500,34,DVB-S,QPSK
17=12303,H,27500,34,S2,8PSK
18=12322,V,27500,56,S2,8PSK
19=12341,H,27500,34,S2,8PSK
20=12399,V,27500,56,S2,8PSK
21=12437,V,27500,56,DVB-S,QPSK
22=12476,V,27500,56,S2,8PSK

View File

@ -1,67 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0570
2=NSS 12 (57.0E)
[DVB]
0=58
1=3632,V,2625,23,DVB-S,QPSK
2=3636,V,1762,23,DVB-S,QPSK
3=3661,H,8882,34,DVB-S,QPSK
4=3800,V,20000,35,S2,QPSK
5=3912,V,2222,23,DVB-S,QPSK
6=4026,H,2963,34,DVB-S,QPSK
7=4031,H,3689,34,DVB-S,QPSK
8=4055,V,26000,34,DVB-S,QPSK
9=4061,H,3500,12,DVB-S,QPSK
10=4065,H,3500,12,DVB-S,QPSK
11=4069,V,3500,12,DVB-S,QPSK
12=4071,H,3500,12,DVB-S,QPSK
13=4074,V,3500,12,DVB-S,QPSK
14=4079,H,2000,78,DVB-S,QPSK
15=4082,H,2000,12,DVB-S,QPSK
16=4147,V,9246,56,S2,QPSK
17=11007,H,4883,12,DVB-S,QPSK
18=11039,V,3100,34,DVB-S,QPSK
19=11042,H,2600,34,DVB-S,QPSK
20=11051,H,1230,34,DVB-S,QPSK
21=11105,H,45000,45,S2,QPSK
22=11129,V,2200,34,DVB-S,QPSK
23=11134,V,2200,34,S2,QPSK
24=11140,V,2200,56,S2,8PSK
25=11181,V,2400,56,S2,8PSK
26=11184,V,1211,34,S2,QPSK
27=11186,V,2290,34,DVB-S,QPSK
28=11189,V,1775,34,S2,QPSK
29=11191,V,1452,34,S2,QPSK
30=11460,H,3500,23,DVB-S,QPSK
31=11461,H,3500,23,DVB-S,QPSK
32=11464,H,3100,34,DVB-S,QPSK
33=11469,H,3100,34,DVB-S,QPSK
34=11473,H,3100,34,DVB-S,QPSK
35=11499,H,4090,23,DVB-S,QPSK
36=11503,H,2880,12,DVB-S,QPSK
37=11509,H,3333,23,DVB-S,QPSK
38=11510,H,3330,Auto,DVB-S,QPSK
39=11520,H,2222,56,S2,8PSK
40=11554,H,3300,34,S2,QPSK
41=11598,H,4200,78,DVB-S,QPSK
42=11604,H,4200,78,DVB-S,QPSK
43=11605,H,45000,45,S2,QPSK
44=11606,V,1852,56,S2,8PSK
45=11645,V,3333,34,DVB-S,QPSK
46=12292,V,2500,34,DVB-S,QPSK
47=12306,V,2000,34,DVB-S,QPSK
48=12313,V,2123,56,DVB-S,QPSK
49=12316,V,2123,34,DVB-S,QPSK
50=12413,V,1600,34,DVB-S,QPSK
51=12429,V,3500,34,S2,8PSK
52=12554,V,1800,34,DVB-S,QPSK
53=12556,V,1600,34,DVB-S,QPSK
54=12559,V,1600,34,DVB-S,QPSK
55=12571,V,2500,34,DVB-S,QPSK
56=12579,V,4000,34,DVB-S,QPSK
57=12621,V,2000,34,DVB-S,QPSK
58=12625,V,2200,34,DVB-S,QPSK

View File

@ -1,48 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0600
2=Intelsat 904 (60.0E)
[DVB]
0=39
1=3676,H,3617,34,DVB-S,QPSK
2=3698,V,1666,56,S2,QPSK
3=3718,H,13333,78,DVB-S,QPSK
4=3730,H,2815,34,DVB-S,QPSK
5=3740,H,10750,56,DVB-S,QPSK
6=3744,V,18315,56,S2,QPSK
7=3756,V,2315,34,DVB-S,QPSK
8=3759,V,2315,34,DVB-S,QPSK
9=3765,V,5000,34,DVB-S,QPSK
10=3768,V,2067,34,S2,8PSK
11=3775,V,9361,12,S2,8PSK
12=3964,V,5000,34,DVB-S,QPSK
13=4168,V,14240,34,S2,8PSK
14=4185,V,2895,34,DVB-S,QPSK
15=4194,H,1594,Auto,DVB-S,QPSK
16=4194,V,6111,34,DVB-S,QPSK
17=10957,V,3700,34,DVB-S,QPSK
18=10962,V,3730,34,DVB-S,QPSK
19=10964,H,3327,34,DVB-S,QPSK
20=10967,V,2573,78,DVB-S,QPSK
21=10973,V,3330,34,DVB-S,QPSK
22=10977,V,3225,34,DVB-S,QPSK
23=11020,V,3700,34,DVB-S,QPSK
24=11460,V,3730,34,DVB-S,QPSK
25=11464,V,1000,78,DVB-S,QPSK
26=11473,V,1324,56,S2,8PSK
27=11475,V,1324,56,S2,8PSK
28=11477,V,1324,56,S2,8PSK
29=11481,V,2645,34,S2,8PSK
30=11484,V,2645,78,DVB-S,QPSK
31=11490,V,5788,34,DVB-S,QPSK
32=11497,V,4284,78,DVB-S,QPSK
33=11502,V,4284,78,DVB-S,QPSK
34=11555,H,30000,34,S2,8PSK
35=11567,V,10000,78,DVB-S,QPSK
36=11595,H,29270,56,DVB-S,QPSK
37=11622,V,8527,34,S2,8PSK
38=11635,H,30000,34,S2,8PSK
39=11675,H,30000,34,S2,8PSK

View File

@ -1,70 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0620
2=Intelsat 902 (62.0E)
[DVB]
0=61
1=3715,H,6111,34,DVB-S,QPSK
2=3727,V,34286,89,S2,8PSK
3=3763,V,34286,89,S2,8PSK
4=3807,V,34286,89,S2,8PSK
5=3814,H,4213,35,S2,QPSK
6=3843,V,34286,89,S2,8PSK
7=3853,H,1445,Auto,DVB-S,QPSK
8=3857,H,2465,Auto,DVB-S,QPSK
9=3860,H,3100,34,DVB-S,QPSK
10=3967,H,9326,Auto,DVB-S,QPSK
11=3992,H,26000,56,DVB-S,QPSK
12=4047,V,4444,12,DVB-S,QPSK
13=4055,V,34286,89,S2,8PSK
14=4107,H,12780,78,DVB-S,QPSK
15=10952,V,2700,78,DVB-S,QPSK
16=10961,V,3000,78,DVB-S,QPSK
17=10967,V,3000,78,DVB-S,QPSK
18=10975,V,3200,34,S2,8PSK
19=10978,V,1591,56,S2,8PSK
20=10982,V,4800,34,S2,8PSK
21=10986,V,1600,34,S2,8PSK
22=10989,V,3200,34,S2,8PSK
23=10992,V,1600,34,S2,8PSK
24=10996,V,4800,34,S2,8PSK
25=10998,H,3333,34,DVB-S,QPSK
26=11003,V,4800,34,S2,8PSK
27=11008,V,3200,34,S2,8PSK
28=11011,V,1600,34,S2,8PSK
29=11015,V,4800,34,S2,8PSK
30=11019,V,1600,34,S2,8PSK
31=11022,V,3200,34,S2,8PSK
32=11025,V,1600,34,S2,8PSK
33=11029,V,4820,34,S2,8PSK
34=11036,H,3000,34,DVB-S,QPSK
35=11043,H,2300,78,DVB-S,QPSK
36=11058,V,6111,34,DVB-S,QPSK
37=11063,H,3100,34,DVB-S,QPSK
38=11074,H,2300,78,DVB-S,QPSK
39=11082,H,3333,34,DVB-S,QPSK
40=11085,H,2700,78,DVB-S,QPSK
41=11088,H,2800,78,DVB-S,QPSK
42=11091,H,3400,34,DVB-S,QPSK
43=11122,H,2600,34,S2,8PSK
44=11165,H,2300,78,DVB-S,QPSK
45=11168,H,2500,78,DVB-S,QPSK
46=11172,H,2190,78,DVB-S,QPSK
47=11467,H,12500,34,S2,8PSK
48=11509,H,7500,34,S2,8PSK
49=11513,V,2300,34,S2,8PSK
50=11518,H,7500,34,S2,8PSK
51=11522,V,2200,78,DVB-S,QPSK
52=11555,V,30000,23,S2,8PSK
53=11555,H,28900,34,S2,8PSK
54=11587,V,5632,34,DVB-S,QPSK
55=11595,H,31003,78,DVB-S,QPSK
56=11625,V,1550,78,DVB-S,QPSK
57=11662,H,7500,56,S2,QPSK
58=11674,H,2200,78,DVB-S,QPSK
59=11680,H,10000,34,S2,8PSK
60=11683,V,15000,56,S2,8PSK
61=11688,H,7500,34,S2,8PSK

View File

@ -1,28 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0642
2=Intelsat 906 (64.2E)
[DVB]
0=19
1=3644,V,8545,23,DVB-S,QPSK
2=3654,V,5632,34,DVB-S,QPSK
3=3721,V,4882,23,DVB-S,QPSK
4=3760,H,2790,78,DVB-S,QPSK
5=3765,V,1413,34,S2,QPSK
6=3884,H,4900,12,DVB-S,QPSK
7=3893,H,3072,12,DVB-S,QPSK
8=3900,H,3800,12,DVB-S,QPSK
9=4039,H,2034,23,DVB-S,QPSK
10=4044,H,2848,Auto,DVB-S,QPSK
11=4066,H,2848,23,DVB-S,QPSK
12=4094,H,3680,23,DVB-S,QPSK
13=4185,V,2532,34,DVB-S,QPSK
14=10990,V,53000,34,S2,QPSK
15=11127,V,4000,34,DVB-S,QPSK
16=11134,V,4000,34,DVB-S,QPSK
17=11140,V,4000,34,DVB-S,QPSK
18=11146,V,4000,34,DVB-S,QPSK
19=11152,V,4000,34,DVB-S,QPSK

View File

@ -1,15 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0650
2=Amos 4 (65.0E)
[DVB]
0=6
1=10736,V,45000,23,S2,QPSK
2=10790,V,45000,23,S2,QPSK
3=10861,V,45000,12,S2,QPSK
4=10915,V,45000,12,S2,QPSK
5=11236,V,45000,12,S2,QPSK
6=11290,V,45000,12,S2,QPSK

View File

@ -1,39 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0660
2=Intelsat 17 (66.0E)
[DVB]
0=30
1=3845,H,30000,34,S2,8PSK
2=3845,V,27692,78,DVB-S,QPSK
3=3876,H,14300,34,S2,8PSK
4=3885,V,30000,34,S2,8PSK
5=3894,H,13840,56,S2,8PSK
6=3914,H,11200,34,S2,8PSK
7=3925,V,30000,34,S2,8PSK
8=3966,H,14400,23,S2,8PSK
9=3968,V,8800,23,S2,8PSK
10=3984,H,14400,23,S2,8PSK
11=4006,H,14400,23,S2,8PSK
12=4015,V,30000,34,S2,8PSK
13=4024,H,14400,23,S2,8PSK
14=4121,H,7200,34,S2,QPSK
15=10962,H,3100,Auto,DVB-S,QPSK
16=11011,H,2811,34,DVB-S,QPSK
17=11498,H,2400,Auto,DVB-S,QPSK
18=11505,H,13271,34,DVB-S,QPSK
19=11515,H,1735,Auto,DVB-S,QPSK
20=11519,H,3255,34,DVB-S,QPSK
21=11527,H,3094,Auto,DVB-S,QPSK
22=11556,H,20129,12,S2,QPSK
23=12602,H,2000,56,S2,QPSK
24=12605,H,1025,78,DVB-S,QPSK
25=12613,H,3965,78,DVB-S,QPSK
26=12648,H,3900,78,DVB-S,QPSK
27=12652,H,3900,78,DVB-S,QPSK
28=12687,H,3400,78,DVB-S,QPSK
29=12703,H,3400,78,DVB-S,QPSK
30=12708,H,3400,78,DVB-S,QPSK

View File

@ -1,110 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0685
2=Intelsat 20 (68.5E)
[DVB]
0=101
1=3708,V,7900,34,S2,8PSK
2=3712,H,14454,34,S2,QPSK
3=3723,V,9600,34,S2,8PSK
4=3732,V,7200,34,S2,8PSK
5=3739,H,26590,12,DVB-S,QPSK
6=3742,V,7000,34,S2,8PSK
7=3752,V,9300,34,S2,8PSK
8=3765,V,2950,56,DVB-S,QPSK
9=3774,V,2944,34,DVB-S,QPSK
10=3777,V,2940,34,DVB-S,QPSK
11=3782,V,2965,34,DVB-S,QPSK
12=3790,H,7200,34,S2,8PSK
13=3790,V,1681,34,S2,QPSK
14=3796,V,7300,34,S2,8PSK
15=3802,H,10000,34,DVB-S,QPSK
16=3802,V,1954,34,DVB-S,QPSK
17=3810,H,3312,23,DVB-S,QPSK
18=3828,V,7200,23,S2,8PSK
19=3836,V,7200,23,S2,8PSK
20=3838,H,16296,34,DVB-S,QPSK
21=3845,V,6111,34,DVB-S,QPSK
22=3854,V,7500,34,DVB-S,QPSK
23=3863,V,6111,34,DVB-S,QPSK
24=3867,V,9875,34,S2,8PSK
25=3873,V,7200,34,DVB-S,QPSK
26=3887,V,2960,34,DVB-S,QPSK
27=3891,V,1954,56,DVB-S,QPSK
28=3900,H,22222,56,DVB-S,QPSK
29=3900,V,10370,34,DVB-S,QPSK
30=3913,V,6510,34,DVB-S,QPSK
31=3919,H,1600,56,S2,QPSK
32=3922,H,3200,56,S2,QPSK
33=3922,V,7000,56,S2,QPSK
34=3930,H,9600,56,S2,QPSK
35=3940,V,7200,34,S2,QPSK
36=3974,H,19500,34,DVB-S,QPSK
37=3974,V,19850,34,DVB-S,QPSK
38=3994,H,4000,23,DVB-S,QPSK
39=3996,V,6666,34,DVB-S,QPSK
40=4000,H,6500,34,DVB-S,QPSK
41=4003,V,7200,34,S2,8PSK
42=4006,H,2990,34,DVB-S,QPSK
43=4013,H,7200,34,S2,8PSK
44=4013,V,6111,34,DVB-S,QPSK
45=4034,H,20500,23,DVB-S,QPSK
46=4036,V,21600,56,S2,QPSK
47=4054,V,4400,34,DVB-S,QPSK
48=4059,V,3529,34,DVB-S,QPSK
49=4064,H,19850,78,DVB-S,QPSK
50=4064,V,4400,34,DVB-S,QPSK
51=4070,V,4340,34,DVB-S,QPSK
52=4076,V,3600,34,S2,8PSK
53=4085,V,7020,34,DVB-S,QPSK
54=4090,H,14368,34,S2,8PSK
55=4092,V,2963,34,DVB-S,QPSK
56=4103,H,5720,34,DVB-S,QPSK
57=4103,V,7800,34,S2,8PSK
58=4117,H,3333,23,DVB-S,QPSK
59=4118,V,8800,Auto,S2,8PSK
60=4130,H,6400,34,S2,8PSK
61=4130,V,10369,34,DVB-S,QPSK
62=4150,H,15000,23,S2,8PSK
63=4155,V,22500,56,S2,8PSK
64=4163,H,7200,34,S2,QPSK
65=4184,V,21600,56,S2,8PSK
66=10970,V,30000,56,DVB-S,QPSK
67=10970,H,30000,56,DVB-S,QPSK
68=11010,V,30000,56,DVB-S,QPSK
69=11010,H,30000,56,DVB-S,QPSK
70=11014,V,3750,34,S2,8PSK
71=11050,V,30000,23,S2,8PSK
72=11050,H,30000,56,DVB-S,QPSK
73=11090,V,30000,56,DVB-S,QPSK
74=11090,H,30000,56,DVB-S,QPSK
75=11092,H,1024,34,DVB-S,QPSK
76=11130,V,30000,56,DVB-S,QPSK
77=11130,H,30000,56,DVB-S,QPSK
78=11170,V,28800,56,S2,8PSK
79=11170,H,30000,56,DVB-S,QPSK
80=11474,H,30000,56,DVB-S,QPSK
81=11477,V,2170,34,DVB-S,QPSK
82=11514,V,28750,12,S2,QPSK
83=11514,H,30000,23,S2,8PSK
84=11554,V,30000,23,S2,8PSK
85=11554,H,30000,23,S2,8PSK
86=11594,V,27500,56,DVB-S,QPSK
87=11594,H,30000,56,DVB-S,QPSK
88=11634,V,30000,56,DVB-S,QPSK
89=11634,H,30000,23,S2,8PSK
90=11674,H,30000,56,DVB-S,QPSK
91=12522,V,27500,34,DVB-S,QPSK
92=12562,H,26657,23,DVB-S,QPSK
93=12567,V,3100,34,DVB-S,QPSK
94=12574,V,9700,12,DVB-S,QPSK
95=12602,V,26657,23,DVB-S,QPSK
96=12638,V,4690,34,DVB-S,QPSK
97=12657,V,4883,34,DVB-S,QPSK
98=12682,V,30000,23,DVB-S,QPSK
99=12682,H,26657,23,DVB-S,QPSK
100=12722,V,26657,12,DVB-S,QPSK
101=12722,H,26657,23,DVB-S,QPSK

View File

@ -1,20 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0705
2=Eutelsat 70B (70.5E)
[DVB]
0=11
1=11092,V,1028,34,DVB-S,QPSK
2=11211,H,5110,12,DVB-S,QPSK
3=11213,V,16667,56,S2,8PSK
4=11255,V,4832,Auto,S2,QPSK
5=11294,H,44900,23,S2,QPSK
6=11356,V,44900,34,S2,QPSK
7=11477,V,2170,12,S2,QPSK
8=11490,V,2150,23,S2,QPSK
9=11520,V,3332,12,S2,QPSK
10=11555,H,3034,12,S2,QPSK
11=11565,H,11401,Auto,S2,QPSK

View File

@ -1,14 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0721
2=Intelsat 22 (72.1E)
[DVB]
0=5
1=3724,H,16073,34,S2,8PSK
2=3735,H,2325,23,S2,8PSK
3=3754,H,7500,34,DVB-S,QPSK
4=4067,V,6111,34,DVB-S,QPSK
5=12541,H,2300,34,DVB-S,QPSK

View File

@ -1,47 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0740
2=Insat 3C/4CR (74.0E)
[DVB]
0=38
1=3740,V,2500,34,DVB-S,QPSK
2=3745,V,2500,34,DVB-S,QPSK
3=3752,V,2500,34,DVB-S,QPSK
4=3756,V,2500,34,DVB-S,QPSK
5=3776,V,3800,34,DVB-S,QPSK
6=3780,H,6250,34,DVB-S,QPSK
7=3781,V,2000,34,DVB-S,QPSK
8=3788,V,3800,34,DVB-S,QPSK
9=3796,V,3800,34,DVB-S,QPSK
10=3801,V,3800,34,DVB-S,QPSK
11=3868,H,2250,34,DVB-S,QPSK
12=3871,H,2250,34,DVB-S,QPSK
13=3874,H,1923,34,DVB-S,QPSK
14=3879,H,2200,34,DVB-S,QPSK
15=3884,H,2250,34,DVB-S,QPSK
16=3889,H,2250,34,DVB-S,QPSK
17=3895,H,2000,34,DVB-S,QPSK
18=3898,H,1500,34,DVB-S,QPSK
19=3901,H,1500,34,DVB-S,QPSK
20=4165,H,26000,12,DVB-S,QPSK
21=11513,H,3000,23,DVB-S,QPSK
22=11520,H,1700,34,DVB-S,QPSK
23=11523,H,1700,34,DVB-S,QPSK
24=11526,H,1700,34,DVB-S,QPSK
25=11578,H,5000,78,DVB-S,QPSK
26=11587,V,4000,78,DVB-S,QPSK
27=11592,V,2000,34,DVB-S,QPSK
28=11597,H,2000,34,DVB-S,QPSK
29=11599,V,1800,34,DVB-S,QPSK
30=11603,V,2000,34,DVB-S,QPSK
31=11607,V,2000,34,DVB-S,QPSK
32=11656,V,3333,34,DVB-S,QPSK
33=11667,V,3000,34,DVB-S,QPSK
34=11672,V,2500,34,DVB-S,QPSK
35=11680,H,1400,34,DVB-S,QPSK
36=11680,V,2965,34,DVB-S,QPSK
37=11683,H,1600,34,DVB-S,QPSK
38=11685,V,2900,78,DVB-S,QPSK

View File

@ -1,44 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0750
2=ABS 2 (75.0E)
[DVB]
0=35
1=3545,H,1956,34,S2,QPSK
2=3590,V,1850,34,DVB-S,QPSK
3=3618,V,29000,56,S2,QPSK
4=3766,V,3000,34,DVB-S,QPSK
5=3770,V,2142,23,S2,8PSK
6=3772,V,2400,23,S2,QPSK
7=3779,V,7495,34,DVB-S,QPSK
8=3781,V,35342,23,S2,QPSK
9=3791,V,3703,23,DVB-S,QPSK
10=3846,V,2300,34,DVB-S,QPSK
11=3942,V,30000,23,S2,QPSK
12=3978,V,29000,56,S2,QPSK
13=4123,V,2800,56,S2,8PSK
14=10985,H,35007,34,S2,8PSK
15=11045,H,44922,56,DVB-S,QPSK
16=11105,H,43200,56,DVB-S,QPSK
17=11473,V,22500,34,S2,8PSK
18=11491,V,4650,23,S2,8PSK
19=11505,V,3400,78,DVB-S,QPSK
20=11531,V,22000,56,DVB-S,QPSK
21=11559,V,22000,56,DVB-S,QPSK
22=11605,V,43200,78,DVB-S,QPSK
23=11665,V,44922,56,DVB-S,QPSK
24=11733,V,43000,56,DVB-S,QPSK
25=11734,H,44000,23,DVB-S,QPSK
26=11790,H,44000,23,DVB-S,QPSK
27=11793,V,43200,56,DVB-S,QPSK
28=11853,V,45000,23,S2,8PSK
29=11913,V,45000,23,S2,8PSK
30=11973,V,45000,23,S2,8PSK
31=12033,V,45000,23,S2,8PSK
32=12093,V,45000,23,S2,8PSK
33=12153,V,45000,23,S2,8PSK
34=12153,H,41900,45,S2,QPSK
35=12524,H,30000,12,DVB-S,QPSK

View File

@ -1,85 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0765
2=Apstar 7 (76.5E)
[DVB]
0=76
1=3629,H,1489,34,S2,QPSK
2=3638,H,1600,35,S2,8PSK
3=3685,V,3333,34,DVB-S,QPSK
4=3690,H,13000,34,S2,8PSK
5=3705,V,8888,23,S2,8PSK
6=3720,H,29620,34,S2,8PSK
7=3747,H,2500,34,DVB-S,QPSK
8=3753,H,2400,34,DVB-S,QPSK
9=3757,H,4440,34,S2,QPSK
10=3769,H,13333,56,DVB-S,QPSK
11=3780,V,30000,34,S2,8PSK
12=3787,H,4600,23,DVB-S,QPSK
13=3793,H,4443,34,DVB-S,QPSK
14=3805,H,4800,34,S2,8PSK
15=3812,H,2200,34,S2,8PSK
16=3815,H,3333,34,DVB-S,QPSK
17=3824,H,2400,34,DVB-S,QPSK
18=3832,V,6111,34,DVB-S,QPSK
19=3835,H,3256,34,DVB-S,QPSK
20=3840,H,3000,34,DVB-S,QPSK
21=3847,H,5357,78,DVB-S,QPSK
22=3847,V,7857,56,S2,QPSK
23=3852,H,3000,34,DVB-S,QPSK
24=3857,H,3200,Auto,S2,8PSK
25=3880,H,30000,34,S2,8PSK
26=3914,V,3255,34,DVB-S,QPSK
27=3920,H,28340,56,DVB-S,QPSK
28=3932,V,1480,34,DVB-S,QPSK
29=3951,V,1480,34,DVB-S,QPSK
30=3960,H,30000,34,S2,8PSK
31=3985,H,3700,34,DVB-S,QPSK
32=3990,H,4300,34,S2,QPSK
33=3998,H,3200,34,DVB-S,QPSK
34=4003,H,4340,34,DVB-S,QPSK
35=4009,H,4300,34,DVB-S,QPSK
36=4016,H,4340,34,DVB-S,QPSK
37=4019,V,2222,23,S2,QPSK
38=4022,V,2961,12,DVB-S,QPSK
39=4026,H,4800,34,DVB-S,QPSK
40=4034,H,4300,34,DVB-S,QPSK
41=4038,H,1600,23,S2,8PSK
42=4041,H,1600,23,S2,QPSK
43=4044,H,1600,23,S2,QPSK
44=4048,V,2450,23,S2,8PSK
45=4050,H,4300,34,DVB-S,QPSK
46=4056,H,3600,35,S2,8PSK
47=4059,V,7857,56,S2,QPSK
48=4063,H,1250,34,DVB-S,QPSK
49=4067,H,2500,89,S2,QPSK
50=4079,H,1600,34,S2,QPSK
51=4082,H,2857,23,S2,8PSK
52=4088,V,7750,56,S2,8PSK
53=4104,H,5000,34,S2,QPSK
54=4110,H,4600,34,DVB-S,QPSK
55=4117,H,4285,34,DVB-S,QPSK
56=4125,H,4441,34,DVB-S,QPSK
57=4129,V,11395,34,DVB-S,QPSK
58=4131,H,3600,34,DVB-S,QPSK
59=4135,H,3333,34,DVB-S,QPSK
60=4151,H,14670,34,S2,8PSK
61=4188,V,3200,34,DVB-S,QPSK
62=10973,V,24500,23,S2,QPSK
63=11010,V,30000,12,DVB-S,QPSK
64=11052,V,30000,23,DVB-S,QPSK
65=11105,V,45000,23,DVB-S,QPSK
66=11167,V,45000,23,DVB-S,QPSK
67=11532,H,3732,56,S2,8PSK
68=11536,H,3732,56,S2,8PSK
69=11541,H,3450,34,S2,8PSK
70=11547,H,2500,34,S2,QPSK
71=11568,H,3330,34,S2,8PSK
72=11596,H,3732,56,S2,8PSK
73=12531,V,15000,34,S2,QPSK
74=12604,V,30000,56,S2,QPSK
75=12638,V,15000,34,S2,8PSK
76=12719,V,45000,56,S2,QPSK

View File

@ -1,112 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0785
2=Thaicom 5/6 (78.5E)
[DVB]
0=103
1=3408,V,2916,34,DVB-S,QPSK
2=3414,V,2916,34,DVB-S,QPSK
3=3418,V,3750,34,S2,QPSK
4=3422,V,2222,34,DVB-S,QPSK
5=3425,V,2592,12,DVB-S,QPSK
6=3433,V,5000,34,DVB-S,QPSK
7=3438,V,2915,34,DVB-S,QPSK
8=3440,H,26666,34,DVB-S,QPSK
9=3441,V,1556,34,DVB-S,QPSK
10=3444,V,1630,34,DVB-S,QPSK
11=3450,V,2500,34,DVB-S,QPSK
12=3454,V,3333,34,DVB-S,QPSK
13=3457,V,2857,34,DVB-S,QPSK
14=3462,V,2857,34,DVB-S,QPSK
15=3480,H,30000,56,DVB-S,QPSK
16=3515,V,2917,34,DVB-S,QPSK
17=3520,H,28125,34,DVB-S,QPSK
18=3545,V,30000,56,DVB-S,QPSK
19=3551,H,13333,34,DVB-S,QPSK
20=3563,H,5555,35,S2,8PSK
21=3574,H,6510,34,DVB-S,QPSK
22=3585,V,30000,56,DVB-S,QPSK
23=3600,H,26667,34,DVB-S,QPSK
24=3625,V,30000,34,S2,8PSK
25=3640,H,28066,34,DVB-S,QPSK
26=3665,H,3704,34,DVB-S,QPSK
27=3683,H,7500,34,S2,8PSK
28=3690,H,2417,78,DVB-S,QPSK
29=3696,H,4167,35,S2,8PSK
30=3703,V,3333,78,DVB-S,QPSK
31=3709,H,13333,23,S2,8PSK
32=3711,V,1458,78,DVB-S,QPSK
33=3715,V,1481,34,DVB-S,QPSK
34=3718,V,1600,34,DVB-S,QPSK
35=3719,H,2500,23,S2,8PSK
36=3731,H,12500,78,DVB-S,QPSK
37=3745,V,4688,34,DVB-S,QPSK
38=3749,V,4688,34,DVB-S,QPSK
39=3757,V,4688,34,DVB-S,QPSK
40=3758,H,28066,34,DVB-S,QPSK
41=3760,H,30000,56,DVB-S,QPSK
42=3784,V,4262,34,DVB-S,QPSK
43=3792,V,4262,34,DVB-S,QPSK
44=3797,V,4262,34,DVB-S,QPSK
45=3800,H,30000,56,DVB-S,QPSK
46=3803,V,4551,34,DVB-S,QPSK
47=3809,V,4550,34,DVB-S,QPSK
48=3826,H,4700,34,DVB-S,QPSK
49=3834,H,8000,56,S2,8PSK
50=3840,V,30000,56,DVB-S,QPSK
51=3841,H,2900,34,DVB-S,QPSK
52=3847,H,4700,34,DVB-S,QPSK
53=3851,H,2900,34,DVB-S,QPSK
54=3880,H,30000,34,DVB-S,QPSK
55=3910,V,14650,45,S2,QPSK
56=3920,H,30000,34,DVB-S,QPSK
57=3930,V,15000,56,S2,QPSK
58=3949,V,2550,78,DVB-S,QPSK
59=3975,V,2500,35,S2,8PSK
60=3990,V,12000,23,S2,8PSK
61=4000,V,4815,34,DVB-S,QPSK
62=4000,H,30000,23,S2,8PSK
63=4005,V,4815,34,DVB-S,QPSK
64=4017,V,1800,34,DVB-S,QPSK
65=4040,H,30000,23,S2,8PSK
66=4053,V,8333,34,DVB-S,QPSK
67=4080,H,30000,35,S2,8PSK
68=4091,V,2000,34,DVB-S,QPSK
69=4096,V,5295,34,DVB-S,QPSK
70=4120,V,30000,910,S2,QPSK
71=4120,H,30000,56,DVB-S,QPSK
72=4144,H,2530,34,DVB-S,QPSK
73=4148,H,4688,34,DVB-S,QPSK
74=4154,H,3125,34,DVB-S,QPSK
75=4157,H,2530,34,DVB-S,QPSK
76=4160,V,30000,56,DVB-S,QPSK
77=4160,H,2530,34,DVB-S,QPSK
78=4163,H,2530,34,DVB-S,QPSK
79=4167,H,2530,34,DVB-S,QPSK
80=4170,H,2530,34,DVB-S,QPSK
81=4173,H,2530,34,DVB-S,QPSK
82=4177,H,2530,34,DVB-S,QPSK
83=12272,H,30000,23,DVB-S,QPSK
84=12313,H,30000,23,DVB-S,QPSK
85=12313,V,30000,34,DVB-S,QPSK
86=12355,H,30000,56,DVB-S,QPSK
87=12355,V,30000,23,S2,8PSK
88=12396,H,30000,35,S2,8PSK
89=12405,V,45000,34,S2,8PSK
90=12438,H,30000,23,DVB-S,QPSK
91=12467,V,45000,34,DVB-S,QPSK
92=12479,H,30000,35,S2,8PSK
93=12521,H,30000,35,S2,8PSK
94=12521,V,30000,34,S2,8PSK
95=12562,H,25776,23,DVB-S,QPSK
96=12562,V,30000,34,S2,8PSK
97=12604,H,30000,56,DVB-S,8PSK
98=12604,V,30000,34,DVB-S,QPSK
99=12645,V,30000,23,S2,8PSK
100=12657,H,45000,34,S2,8PSK
101=12687,V,30000,23,DVB-S,QPSK
102=12720,H,45000,34,S2,8PSK
103=12728,V,30000,23,DVB-S,QPSK

View File

@ -1,74 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0830
2=G-Sat 10/Insat 4A (83.0E)
[DVB]
0=65
1=3725,H,26666,34,DVB-S,QPSK
2=3756,H,13333,34,DVB-S,QPSK
3=3756,V,3200,Auto,DVB-S,QPSK
4=3767,H,3000,34,S2,QPSK
5=3774,V,4250,Auto,DVB-S,QPSK
6=3777,H,10900,34,DVB-S,QPSK
7=3805,H,28500,78,DVB-S,QPSK
8=3828,H,3200,34,DVB-S,QPSK
9=3832,H,2100,34,DVB-S,QPSK
10=3836,H,1800,34,DVB-S,QPSK
11=3841,H,6920,78,DVB-S,QPSK
12=3847,H,3333,34,DVB-S,QPSK
13=3860,H,6920,34,DVB-S,QPSK
14=3868,H,3000,34,DVB-S,QPSK
15=3874,H,3400,34,S2,8PSK
16=3880,H,4600,34,DVB-S,QPSK
17=3884,H,1500,34,DVB-S,QPSK
18=3888,H,1071,34,DVB-S,QPSK
19=3892,H,3300,34,DVB-S,QPSK
20=3898,H,6800,34,DVB-S,QPSK
21=3909,H,4000,34,S2,8PSK
22=3921,H,13000,78,DVB-S,QPSK
23=3936,H,10100,78,DVB-S,QPSK
24=3949,H,3673,56,S2,8PSK
25=3958,H,9500,78,DVB-S,QPSK
26=3968,H,2000,34,DVB-S,QPSK
27=3976,H,3200,34,DVB-S,QPSK
28=3979,H,1451,34,DVB-S,QPSK
29=3983,H,1451,34,DVB-S,QPSK
30=3990,H,2140,34,DVB-S,QPSK
31=4004,H,22220,56,DVB-S,QPSK
32=4020,H,2140,34,DVB-S,QPSK
33=4030,H,4440,34,DVB-S,QPSK
34=4040,H,7500,78,DVB-S,QPSK
35=4054,H,13230,34,DVB-S,QPSK
36=4072,H,6500,34,DVB-S,QPSK
37=4076,H,1500,34,DVB-S,QPSK
38=4080,H,2000,34,DVB-S,QPSK
39=4083,H,2100,34,DVB-S,QPSK
40=4087,H,3300,34,DVB-S,QPSK
41=4091,H,3000,34,DVB-S,QPSK
42=4096,H,2170,23,S2,8PSK
43=4100,H,4750,34,DVB-S,QPSK
44=4109,H,1800,34,DVB-S,QPSK
45=4115,H,7776,34,DVB-S,QPSK
46=4122,H,1800,34,DVB-S,QPSK
47=4133,H,11888,34,S2,8PSK
48=4142,H,1255,34,DVB-S,QPSK
49=4151,H,6500,34,DVB-S,QPSK
50=4161,H,6500,34,DVB-S,QPSK
51=4170,H,4650,34,DVB-S,QPSK
52=4175,H,2977,56,DVB-S,QPSK
53=4180,H,3233,34,DVB-S,QPSK
54=10970,H,32000,23,S2,8PSK
55=11010,H,27500,34,DVB-S,8PSK
56=11050,H,32000,23,S2,8PSK
57=11090,H,32000,23,S2,8PSK
58=11130,H,32000,23,S2,8PSK
59=11170,H,32000,23,DVB-S,8PSK
60=11470,H,32000,23,S2,8PSK
61=11510,H,32000,23,S2,8PSK
62=11550,H,32000,23,S2,8PSK
63=11590,H,32000,23,S2,8PSK
64=11630,H,32000,23,S2,8PSK
65=11670,H,32000,23,S2,8PSK

View File

@ -1,38 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0851
2=Horizons 2/Intelsat 15 (85.1E)
[DVB]
0=29
1=10969,H,1800,34,S2,8PSK
2=10980,H,2220,34,DVB-S,QPSK
3=11466,H,2000,56,S2,8PSK
4=11468,H,2000,56,S2,8PSK
5=11470,H,1100,56,S2,8PSK
6=11479,H,2200,34,DVB-S,QPSK
7=11483,H,1800,56,DVB-S,QPSK
8=11559,H,2200,78,DVB-S,QPSK
9=11588,H,2500,34,DVB-S,QPSK
10=11594,H,2500,34,DVB-S,QPSK
11=11687,H,2000,89,S2,8PSK
12=11720,H,28800,34,DVB-S,QPSK
13=11760,H,28800,23,S2,8PSK
14=11800,H,28800,23,S2,8PSK
15=11840,H,28800,23,S2,8PSK
16=11872,H,15000,12,DVB-S,8PSK
17=11920,H,28800,23,S2,8PSK
18=11960,H,28800,35,S2,8PSK
19=12000,H,28000,23,DVB-S,QPSK
20=12040,H,28800,34,DVB-S,QPSK
21=12080,H,26700,35,S2,8PSK
22=12120,H,26700,35,S2,8PSK
23=12160,H,28800,35,S2,8PSK
24=12504,V,4217,34,DVB-S,QPSK
25=12510,V,3700,78,DVB-S,QPSK
26=12515,V,3353,34,S2,8PSK
27=12560,V,30000,56,DVB-S,QPSK
28=12600,V,30000,23,S2,8PSK
29=12640,V,30000,56,DVB-S,QPSK

View File

@ -1,30 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0865
2=KazSat 2 (86.5E)
[DVB]
0=21
1=11495,V,8750,89,S2,8PSK
2=11504,V,6250,89,S2,8PSK
3=11632,V,1457,89,S2,QPSK
4=11642,V,1080,34,S2,8PSK
5=11643,V,1080,34,S2,8PSK
6=11645,V,1080,34,S2,8PSK
7=11646,V,1080,34,S2,8PSK
8=11647,V,1080,34,S2,8PSK
9=11649,V,1080,34,S2,8PSK
10=11650,V,1080,34,S2,8PSK
11=11651,V,1080,34,S2,8PSK
12=11653,V,1080,34,S2,8PSK
13=11654,V,1080,34,S2,8PSK
14=11656,V,2100,34,S2,8PSK
15=11658,V,1080,34,S2,8PSK
16=11660,V,2100,34,S2,8PSK
17=11663,V,5500,56,S2,8PSK
18=11672,V,5500,34,S2,8PSK
19=11678,V,5500,56,S2,8PSK
20=11683,V,5500,56,S2,8PSK
21=11689,V,5500,56,S2,8PSK

View File

@ -1,13 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0875
2=ChinaSat 12 (87.5E)
[DVB]
0=4
1=3774,H,1800,34,S2,QPSK
2=4035,H,1200,34,DVB-S,QPSK
3=4067,H,1500,56,S2,QPSK
4=4140,V,28800,23,S2,8PSK

View File

@ -1,34 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0880
2=ST 2 (88.0E)
[DVB]
0=25
1=3629,H,24700,34,S2,8PSK
2=3632,V,30000,34,S2,8PSK
3=3657,H,3000,34,DVB-S,QPSK
4=3671,H,9256,34,DVB-S,QPSK
5=11062,V,1000,89,S2,8PSK
6=11066,V,2000,56,DVB-S,QPSK
7=11164,H,44995,23,S2,8PSK
8=11164,V,44995,23,S2,8PSK
9=11483,V,44995,23,S2,8PSK
10=11483,H,44995,23,S2,8PSK
11=11546,H,44995,23,S2,8PSK
12=11546,V,44995,23,S2,8PSK
13=11609,V,43975,23,S2,8PSK
14=11609,H,44995,23,S2,8PSK
15=11633,H,30000,56,S2,QPSK
16=11669,H,30000,56,S2,QPSK
17=11672,V,44995,23,S2,8PSK
18=11672,H,44995,23,S2,8PSK
19=12516,H,10833,34,DVB-S,QPSK
20=12533,H,9620,34,S2,8PSK
21=12642,H,24000,34,DVB-S,QPSK
22=12702,H,20000,34,DVB-S,QPSK
23=12705,V,2200,56,DVB-S,QPSK
24=12722,H,2200,56,DVB-S,QPSK
25=12730,H,3202,34,DVB-S,QPSK

View File

@ -1,59 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0900
2=Yamal 401 (90.0E)
[DVB]
0=50
1=3539,H,2500,34,DVB-S,QPSK
2=3553,H,20000,34,DVB-S,QPSK
3=3582,H,2850,34,DVB-S,QPSK
4=3588,H,4285,34,DVB-S,QPSK
5=3594,H,2850,34,DVB-S,QPSK
6=3600,H,5925,34,DVB-S,QPSK
7=3603,V,3300,34,DVB-S,QPSK
8=3605,H,2626,34,DVB-S,QPSK
9=3613,H,4285,34,DVB-S,QPSK
10=3617,V,1850,34,DVB-S,QPSK
11=3618,H,3038,34,DVB-S,QPSK
12=3623,H,4285,34,DVB-S,QPSK
13=3645,H,28000,34,DVB-S,QPSK
14=3675,H,17500,34,DVB-S,QPSK
15=3819,H,13333,34,S2,8PSK
16=3837,H,14815,34,DVB-S,QPSK
17=3858,H,1850,78,DVB-S,QPSK
18=3908,H,2850,34,DVB-S,QPSK
19=3920,H,3000,34,DVB-S,QPSK
20=3924,H,2850,34,DVB-S,QPSK
21=4026,H,14940,35,S2,8PSK
22=4046,H,15284,34,S2,8PSK
23=4106,V,14990,34,S2,8PSK
24=4124,H,14990,34,S2,8PSK
25=4126,V,15284,34,S2,8PSK
26=4144,H,15284,34,S2,8PSK
27=10972,H,11200,34,DVB-S,QPSK
28=11057,H,22222,34,S2,8PSK
29=11092,H,30000,34,S2,8PSK
30=11131,V,11160,23,S2,8PSK
31=11165,H,25000,23,S2,8PSK
32=11239,V,2737,34,S2,8PSK
33=11462,V,1400,78,DVB-S,QPSK
34=11492,H,6115,34,S2,QPSK
35=11504,H,2080,34,DVB-S,QPSK
36=11507,V,7000,56,DVB-S,QPSK
37=11512,H,6160,Auto,S2,QPSK
38=11524,V,2000,78,DVB-S,QPSK
39=11531,V,4280,34,DVB-S,QPSK
40=11558,H,20000,34,S2,QPSK
41=11565,V,1980,23,S2,8PSK
42=11573,V,5000,34,DVB-S,QPSK
43=11649,H,2170,34,DVB-S,QPSK
44=11654,H,6500,34,DVB-S,QPSK
45=11670,H,14400,56,S2,8PSK
46=11674,V,7800,56,S2,8PSK
47=12505,V,2020,Auto,S2,8PSK
48=12533,V,11760,34,S2,QPSK
49=12718,H,27500,56,S2,8PSK
50=12718,V,27500,34,DVB-S,QPSK

View File

@ -1,84 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0915
2=Measat 3/3a/3b (91.5E)
[DVB]
0=75
1=3464,H,2963,23,DVB-S,QPSK
2=3469,V,7500,34,S2,8PSK
3=3472,H,6000,34,DVB-S,QPSK
4=3475,H,2963,23,DVB-S,QPSK
5=3480,V,2961,23,DVB-S,QPSK
6=3481,H,2963,23,DVB-S,QPSK
7=3485,V,2961,23,DVB-S,QPSK
8=3492,H,2963,23,DVB-S,QPSK
9=3606,V,3750,34,DVB-S,QPSK
10=3625,V,1600,34,DVB-S,QPSK
11=3638,H,6666,34,DVB-S,QPSK
12=3641,V,13333,23,S2,8PSK
13=3650,H,6666,34,DVB-S,QPSK
14=3705,H,4290,34,DVB-S,QPSK
15=3708,V,1400,34,S2,QPSK
16=3710,H,2860,34,DVB-S,QPSK
17=3717,H,7500,23,S2,8PSK
18=3718,V,1916,56,S2,QPSK
19=3720,V,2170,78,DVB-S,QPSK
20=3724,V,3030,23,S2,8PSK
21=3727,H,9833,23,S2,8PSK
22=3760,V,29700,56,S2,8PSK
23=3786,V,7200,56,S2,QPSK
24=3795,V,5064,34,S2,QPSK
25=3802,V,3333,34,DVB-S,QPSK
26=3805,V,3255,34,S2,QPSK
27=3814,V,6660,35,S2,8PSK
28=3840,H,30000,56,S2,8PSK
29=3840,V,29720,56,S2,8PSK
30=3880,V,29720,56,S2,8PSK
31=3904,H,2916,23,S2,8PSK
32=3918,H,18385,23,S2,8PSK
33=3920,V,29720,56,S2,8PSK
34=3960,H,29700,56,S2,8PSK
35=4000,H,29700,56,S2,8PSK
36=4040,H,28600,56,S2,8PSK
37=4120,V,29720,56,S2,8PSK
38=4120,H,30000,56,S2,8PSK
39=4147,H,7200,56,S2,QPSK
40=4153,V,2090,34,S2,QPSK
41=4164,H,20640,23,S2,8PSK
42=10852,V,30000,Auto,S2,QPSK
43=10932,V,30000,Auto,S2,QPSK
44=10982,V,30000,34,DVB-S,QPSK
45=11022,V,30000,34,S2,8PSK
46=11062,V,30000,34,DVB-S,QPSK
47=11142,V,30000,78,DVB-S,QPSK
48=11182,V,30000,78,DVB-S,QPSK
49=11482,V,30000,78,DVB-S,QPSK
50=11522,V,30000,78,DVB-S,QPSK
51=11562,V,30000,78,DVB-S,QPSK
52=11602,V,30000,78,DVB-S,QPSK
53=11642,V,30000,78,DVB-S,QPSK
54=11682,V,30000,78,DVB-S,QPSK
55=12276,V,30000,35,S2,8PSK
56=12316,H,30000,56,DVB-S,8PSK
57=12316,V,30000,35,S2,8PSK
58=12356,V,30000,35,S2,8PSK
59=12396,V,30000,35,S2,8PSK
60=12396,H,31000,23,S2,8PSK
61=12436,V,30000,35,S2,8PSK
62=12436,H,31000,23,S2,8PSK
63=12476,V,30000,35,S2,8PSK
64=12523,V,30000,78,DVB-S,QPSK
65=12523,H,30000,56,DVB-S,QPSK
66=12563,V,30000,56,S2,8PSK
67=12563,H,30000,56,S2,8PSK
68=12603,V,30000,56,S2,8PSK
69=12603,H,30000,56,S2,8PSK
70=12643,V,30000,78,DVB-S,QPSK
71=12643,H,30000,56,S2,8PSK
72=12683,V,30000,56,DVB-S,QPSK
73=12683,H,27500,56,DVB-S,QPSK
74=12723,V,30000,56,DVB-S,QPSK
75=12723,H,30000,56,S2,8PSK

View File

@ -1,19 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0922
2=ChinaSat 9 (92.2E)
[DVB]
0=10
1=11880,H,28800,34,DVB-S,QPSK
2=11920,H,28800,34,DVB-S,QPSK
3=11940,V,28800,34,DVB-S,QPSK
4=11960,H,28800,34,DVB-S,QPSK
5=11980,V,28800,34,DVB-S,QPSK
6=12020,V,28800,34,DVB-S,QPSK
7=12060,V,28800,34,DVB-S,QPSK
8=12100,V,28800,34,DVB-S,QPSK
9=12140,V,28800,34,DVB-S,QPSK
10=12180,V,28800,34,DVB-S,QPSK

View File

@ -1,77 +0,0 @@
; file generated on saturday, 22nd of august 2015, 19:35:09 [GMT]
; by online transponder .ini generator @ http://satellites-xml.eu
; please let us know if you find any inconsistencies in this file
[SATTYPE]
1=0935
2=Insat 3A/4B (93.5E)
[DVB]
0=68
1=3725,H,27500,34,DVB-S,QPSK
2=3732,V,6250,34,DVB-S,QPSK
3=3740,V,6250,34,DVB-S,QPSK
4=3750,V,6250,34,DVB-S,QPSK
5=3750,H,3000,34,DVB-S,QPSK
6=3756,H,3000,34,DVB-S,QPSK
7=3758,V,6250,34,DVB-S,QPSK
8=3762,H,2500,34,DVB-S,QPSK
9=3768,H,2500,34,DVB-S,QPSK
10=3772,V,6250,34,DVB-S,QPSK
11=3774,H,4250,34,DVB-S,QPSK
12=3780,V,6250,34,DVB-S,QPSK
13=3780,H,2500,34,DVB-S,QPSK
14=3790,H,2500,34,DVB-S,QPSK
15=3791,V,8600,34,DVB-S,QPSK
16=3797,H,4250,34,DVB-S,QPSK
17=3800,V,4250,34,DVB-S,QPSK
18=3802,H,4250,34,DVB-S,QPSK
19=3808,H,2500,34,DVB-S,QPSK
20=3812,V,6250,34,DVB-S,QPSK
21=3815,H,2500,34,DVB-S,QPSK
22=3821,V,6250,34,DVB-S,QPSK
23=3822,H,4250,34,DVB-S,QPSK
24=3831,V,8600,34,DVB-S,QPSK
25=3832,H,6250,34,DVB-S,QPSK
26=3840,H,6250,34,DVB-S,QPSK
27=3841,V,4250,34,DVB-S,QPSK
28=3848,H,4250,34,DVB-S,QPSK
29=3855,H,3800,34,DVB-S,QPSK
30=3860,H,2500,34,DVB-S,QPSK
31=3888,V,1400,34,DVB-S,QPSK
32=3891,V,2000,34,DVB-S,QPSK
33=3894,V,2000,34,DVB-S,QPSK
34=3894,H,1500,34,DVB-S,QPSK
35=3897,V,1500,34,DVB-S,QPSK
36=3907,V,3125,34,DVB-S,QPSK
37=3910,V,1500,34,DVB-S,QPSK
38=3913,V,1000,34,DVB-S,QPSK
39=3916,V,1300,34,DVB-S,QPSK
40=3919,V,2000,34,DVB-S,QPSK
41=3922,V,2000,34,DVB-S,QPSK
42=3925,H,27500,34,DVB-S,QPSK
43=3932,V,6250,34,DVB-S,QPSK
44=3940,V,6250,34,DVB-S,QPSK
45=3950,V,6250,34,DVB-S,QPSK
46=3958,V,6250,34,DVB-S,QPSK
47=4086,V,1400,34,DVB-S,QPSK
48=4092,V,6250,34,DVB-S,QPSK
49=4101,V,6250,34,DVB-S,QPSK
50=4109,V,4250,34,DVB-S,QPSK
51=4115,V,4250,34,DVB-S,QPSK
52=4120,V,4250,34,DVB-S,QPSK
53=4132,V,4000,34,DVB-S,QPSK
54=4136,V,2000,34,DVB-S,QPSK
55=4141,V,5150,34,DVB-S,QPSK
56=4148,V,3000,34,DVB-S,QPSK
57=4151,V,2100,34,DVB-S,QPSK
58=10990,V,28500,34,DVB-S,QPSK
59=11030,V,32000,34,S2,8PSK
60=11053,V,1800,34,DVB-S,QPSK
61=11070,V,28500,34,DVB-S,QPSK
62=11110,V,30000,35,S2,8PSK
63=11150,V,28500,34,DVB-S,QPSK
64=11197,V,3333,34,DVB-S,QPSK
65=11490,V,30000,35,S2,8PSK
66=11508,V,1400,78,DVB-S,QPSK
67=11528,V,1400,34,DVB-S,QPSK
68=11570,V,28500,34,DVB-S,QPSK

Some files were not shown because too many files have changed in this diff Show More