commit
9f8cbc668d
|
@ -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);
|
||||
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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" />
|
||||
|
|
|
@ -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,67 +147,59 @@ 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";
|
||||
var response = new DiscoverResponse
|
||||
{
|
||||
ModelNumber = defaultValue
|
||||
};
|
||||
// HDHR4 doesn't have this api
|
||||
lock (_modelCache)
|
||||
{
|
||||
_modelCache[info.Id] = new DiscoverResponse
|
||||
{
|
||||
ModelNumber = defaultValue
|
||||
};
|
||||
_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
|
||||
var tuners = new List<LiveTvTunerInfo>();
|
||||
|
||||
}).ConfigureAwait(false))
|
||||
var uri = new Uri(GetApiUrl(info, false));
|
||||
|
||||
using (var manager = new HdHomerunManager(_socketFactory))
|
||||
{
|
||||
var tuners = new List<LiveTvTunerInfo>();
|
||||
using (var sr = new StreamReader(stream, System.Text.Encoding.UTF8))
|
||||
// Legacy HdHomeruns are IPv4 only
|
||||
var ipInfo = new IpAddressInfo(uri.Host, IpAddressFamily.InterNetwork);
|
||||
|
||||
for (int i = 0; i < model.TunerCount; ++i)
|
||||
{
|
||||
while (!sr.EndOfStream)
|
||||
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
|
||||
{
|
||||
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; }
|
||||
tuners.Add(new LiveTvTunerInfo
|
||||
{
|
||||
Name = name,
|
||||
SourceType = string.IsNullOrWhiteSpace(model) ? Name : model,
|
||||
ProgramName = currentChannel,
|
||||
Status = status
|
||||
});
|
||||
}
|
||||
}
|
||||
Name = name,
|
||||
SourceType = string.IsNullOrWhiteSpace(model.ModelNumber) ? Name : model.ModelNumber,
|
||||
ProgramName = currentChannel,
|
||||
Status = status
|
||||
});
|
||||
}
|
||||
return tuners;
|
||||
}
|
||||
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,35 +503,49 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
|
|||
}
|
||||
var hdhrId = GetHdHrIdFromChannelId(channelId);
|
||||
|
||||
try
|
||||
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)
|
||||
{
|
||||
var model = await GetModelInfo(info, cancellationToken).ConfigureAwait(false);
|
||||
model = model ?? string.Empty;
|
||||
|
||||
if ((model.IndexOf("hdtc", StringComparison.OrdinalIgnoreCase) != -1))
|
||||
list.Add(GetLegacyMediaSource(info, hdhrId, channelInfo));
|
||||
}
|
||||
else
|
||||
{
|
||||
try
|
||||
{
|
||||
list.Add(await GetMediaSource(info, hdhrId, "native").ConfigureAwait(false));
|
||||
var modelInfo = await GetModelInfo(info, false, cancellationToken).ConfigureAwait(false);
|
||||
var model = modelInfo == null ? string.Empty : (modelInfo.ModelNumber ?? string.Empty);
|
||||
|
||||
if (info.AllowHWTranscoding)
|
||||
if ((model.IndexOf("hdtc", StringComparison.OrdinalIgnoreCase) != -1))
|
||||
{
|
||||
list.Add(await GetMediaSource(info, hdhrId, "heavy").ConfigureAwait(false));
|
||||
list.Add(GetMediaSource(info, hdhrId, channelInfo, "native"));
|
||||
|
||||
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));
|
||||
if (info.AllowHWTranscoding)
|
||||
{
|
||||
list.Add(GetMediaSource(info, hdhrId, channelInfo, "heavy"));
|
||||
|
||||
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"));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
catch
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if (list.Count == 0)
|
||||
{
|
||||
list.Add(await GetMediaSource(info, hdhrId, "native").ConfigureAwait(false));
|
||||
if (list.Count == 0)
|
||||
{
|
||||
list.Add(GetMediaSource(info, hdhrId, channelInfo, "native"));
|
||||
}
|
||||
}
|
||||
|
||||
return list;
|
||||
|
@ -509,11 +573,26 @@ 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;
|
||||
return liveStream;
|
||||
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; }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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" />
|
||||
|
|
28
MediaBrowser.Model/Net/IAcceptSocket.cs
Normal file
28
MediaBrowser.Model/Net/IAcceptSocket.cs
Normal 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; }
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
|
||||
/// <summary>
|
||||
/// Sends a UDP message to a particular end point (uni or multicast).
|
||||
/// </summary>
|
||||
Task SendAsync(byte[] buffer, int bytes, IpEndPointInfo endPoint, CancellationToken cancellationToken);
|
||||
}
|
||||
|
||||
public class SocketCreateException : Exception
|
||||
{
|
||||
public SocketCreateException(string errorCode, Exception originalException)
|
||||
: base(errorCode, originalException)
|
||||
{
|
||||
ErrorCode = errorCode;
|
||||
}
|
||||
|
||||
public string ErrorCode { get; private set; }
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
|
@ -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; }
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
|
||||
}
|
||||
}
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
Loading…
Reference in New Issue
Block a user