mirror of
				https://github.com/jellyfin/jellyfin.git
				synced 2025-11-04 03:27:21 -05:00 
			
		
		
		
	
						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();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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,68 +147,60 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
 | 
			
		||||
                        _modelCache[info.Id] = response;
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    return response.ModelNumber;
 | 
			
		||||
                    return response;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            catch (HttpException ex)
 | 
			
		||||
            {
 | 
			
		||||
                if (ex.StatusCode.HasValue && ex.StatusCode.Value == System.Net.HttpStatusCode.NotFound)
 | 
			
		||||
                if (!throwAllExceptions && ex.StatusCode.HasValue && ex.StatusCode.Value == System.Net.HttpStatusCode.NotFound)
 | 
			
		||||
                {
 | 
			
		||||
                    var defaultValue = "HDHR";
 | 
			
		||||
                    // HDHR4 doesn't have this api
 | 
			
		||||
                    lock (_modelCache)
 | 
			
		||||
                    {
 | 
			
		||||
                        _modelCache[info.Id] = new DiscoverResponse
 | 
			
		||||
                    var response = new DiscoverResponse
 | 
			
		||||
                    {
 | 
			
		||||
                        ModelNumber = defaultValue
 | 
			
		||||
                    };
 | 
			
		||||
                    // HDHR4 doesn't have this api
 | 
			
		||||
                    lock (_modelCache)
 | 
			
		||||
                    {
 | 
			
		||||
                        _modelCache[info.Id] = response;
 | 
			
		||||
                    }
 | 
			
		||||
                    return defaultValue;
 | 
			
		||||
                    return response;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                throw;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public async Task<List<LiveTvTunerInfo>> GetTunerInfos(TunerHostInfo info, CancellationToken cancellationToken)
 | 
			
		||||
        private async Task<List<LiveTvTunerInfo>> GetTunerInfos(TunerHostInfo info, CancellationToken cancellationToken)
 | 
			
		||||
        {
 | 
			
		||||
            var model = await GetModelInfo(info, cancellationToken).ConfigureAwait(false);
 | 
			
		||||
            var model = await GetModelInfo(info, false, cancellationToken).ConfigureAwait(false);
 | 
			
		||||
 | 
			
		||||
            using (var stream = await _httpClient.Get(new HttpRequestOptions()
 | 
			
		||||
            {
 | 
			
		||||
                Url = string.Format("{0}/tuners.html", GetApiUrl(info, false)),
 | 
			
		||||
                CancellationToken = cancellationToken,
 | 
			
		||||
                TimeoutMs = Convert.ToInt32(TimeSpan.FromSeconds(5).TotalMilliseconds),
 | 
			
		||||
                BufferContent = false
 | 
			
		||||
 | 
			
		||||
            }).ConfigureAwait(false))
 | 
			
		||||
            {
 | 
			
		||||
            var tuners = new List<LiveTvTunerInfo>();
 | 
			
		||||
                using (var sr = new StreamReader(stream, System.Text.Encoding.UTF8))
 | 
			
		||||
 | 
			
		||||
            var uri = new Uri(GetApiUrl(info, false));
 | 
			
		||||
 | 
			
		||||
            using (var manager = new HdHomerunManager(_socketFactory))
 | 
			
		||||
            {
 | 
			
		||||
                    while (!sr.EndOfStream)
 | 
			
		||||
                // Legacy HdHomeruns are IPv4 only
 | 
			
		||||
                var ipInfo = new IpAddressInfo(uri.Host, IpAddressFamily.InterNetwork);
 | 
			
		||||
 | 
			
		||||
                for (int i = 0; i < model.TunerCount; ++i)
 | 
			
		||||
                {
 | 
			
		||||
                        string line = StripXML(sr.ReadLine());
 | 
			
		||||
                        if (line.Contains("Channel"))
 | 
			
		||||
                        {
 | 
			
		||||
                            LiveTvTunerStatus status;
 | 
			
		||||
                            var index = line.IndexOf("Channel", StringComparison.OrdinalIgnoreCase);
 | 
			
		||||
                            var name = line.Substring(0, index - 1);
 | 
			
		||||
                            var currentChannel = line.Substring(index + 7);
 | 
			
		||||
                            if (currentChannel != "none") { status = LiveTvTunerStatus.LiveTv; } else { status = LiveTvTunerStatus.Available; }
 | 
			
		||||
                    var name = String.Format("Tuner {0}", i + 1);
 | 
			
		||||
                    var currentChannel = "none"; /// @todo Get current channel and map back to Station Id      
 | 
			
		||||
                    var isAvailable = await manager.CheckTunerAvailability(ipInfo, i, cancellationToken).ConfigureAwait(false);
 | 
			
		||||
                    LiveTvTunerStatus status = isAvailable ? LiveTvTunerStatus.Available : LiveTvTunerStatus.LiveTv;
 | 
			
		||||
                    tuners.Add(new LiveTvTunerInfo
 | 
			
		||||
                    {
 | 
			
		||||
                        Name = name,
 | 
			
		||||
                                SourceType = string.IsNullOrWhiteSpace(model) ? Name : model,
 | 
			
		||||
                        SourceType = string.IsNullOrWhiteSpace(model.ModelNumber) ? Name : model.ModelNumber,
 | 
			
		||||
                        ProgramName = currentChannel,
 | 
			
		||||
                        Status = status
 | 
			
		||||
                    });
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
                }
 | 
			
		||||
            return tuners;
 | 
			
		||||
        }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public async Task<List<LiveTvTunerInfo>> GetTunerInfos(CancellationToken cancellationToken)
 | 
			
		||||
        {
 | 
			
		||||
@ -244,34 +248,6 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
 | 
			
		||||
            return uri.AbsoluteUri.TrimEnd('/');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private static string StripXML(string source)
 | 
			
		||||
        {
 | 
			
		||||
            char[] buffer = new char[source.Length];
 | 
			
		||||
            int bufferIndex = 0;
 | 
			
		||||
            bool inside = false;
 | 
			
		||||
 | 
			
		||||
            for (int i = 0; i < source.Length; i++)
 | 
			
		||||
            {
 | 
			
		||||
                char let = source[i];
 | 
			
		||||
                if (let == '<')
 | 
			
		||||
                {
 | 
			
		||||
                    inside = true;
 | 
			
		||||
                    continue;
 | 
			
		||||
                }
 | 
			
		||||
                if (let == '>')
 | 
			
		||||
                {
 | 
			
		||||
                    inside = false;
 | 
			
		||||
                    continue;
 | 
			
		||||
                }
 | 
			
		||||
                if (!inside)
 | 
			
		||||
                {
 | 
			
		||||
                    buffer[bufferIndex] = let;
 | 
			
		||||
                    bufferIndex++;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            return new string(buffer, 0, bufferIndex);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private class Channels
 | 
			
		||||
        {
 | 
			
		||||
            public string GuideNumber { get; set; }
 | 
			
		||||
@ -284,13 +260,13 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
 | 
			
		||||
            public int HD { get; set; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private async Task<MediaSourceInfo> GetMediaSource(TunerHostInfo info, string channelId, string profile)
 | 
			
		||||
        private MediaSourceInfo GetMediaSource(TunerHostInfo info, string channelId, ChannelInfo channelInfo, string profile)
 | 
			
		||||
        {
 | 
			
		||||
            int? width = null;
 | 
			
		||||
            int? height = null;
 | 
			
		||||
            bool isInterlaced = true;
 | 
			
		||||
            string videoCodec = null;
 | 
			
		||||
            string audioCodec = "ac3";
 | 
			
		||||
            string audioCodec = null;
 | 
			
		||||
 | 
			
		||||
            int? videoBitrate = null;
 | 
			
		||||
            int? audioBitrate = null;
 | 
			
		||||
@ -344,21 +320,19 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
 | 
			
		||||
                videoBitrate = 1000000;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            var channels = await GetChannels(info, true, CancellationToken.None).ConfigureAwait(false);
 | 
			
		||||
            var channel = channels.FirstOrDefault(i => string.Equals(i.Number, channelId, StringComparison.OrdinalIgnoreCase));
 | 
			
		||||
            if (channel != null)
 | 
			
		||||
            if (channelInfo != null)
 | 
			
		||||
            {
 | 
			
		||||
                if (string.IsNullOrWhiteSpace(videoCodec))
 | 
			
		||||
                {
 | 
			
		||||
                    videoCodec = channel.VideoCodec;
 | 
			
		||||
                    videoCodec = channelInfo.VideoCodec;
 | 
			
		||||
                }
 | 
			
		||||
                audioCodec = channel.AudioCodec;
 | 
			
		||||
                audioCodec = channelInfo.AudioCodec;
 | 
			
		||||
 | 
			
		||||
                if (!videoBitrate.HasValue)
 | 
			
		||||
                {
 | 
			
		||||
                    videoBitrate = (channel.IsHD ?? true) ? 15000000 : 2000000;
 | 
			
		||||
                    videoBitrate = (channelInfo.IsHD ?? true) ? 15000000 : 2000000;
 | 
			
		||||
                }
 | 
			
		||||
                audioBitrate = (channel.IsHD ?? true) ? 448000 : 192000;
 | 
			
		||||
                audioBitrate = (channelInfo.IsHD ?? true) ? 448000 : 192000;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // normalize
 | 
			
		||||
@ -443,6 +417,82 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
 | 
			
		||||
            return channelId.Split('_')[1];
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private MediaSourceInfo GetLegacyMediaSource(TunerHostInfo info, string channelId, ChannelInfo channel)
 | 
			
		||||
        {
 | 
			
		||||
            int? width = null;
 | 
			
		||||
            int? height = null;
 | 
			
		||||
            bool isInterlaced = true;
 | 
			
		||||
            string videoCodec = null;
 | 
			
		||||
            string audioCodec = null;
 | 
			
		||||
 | 
			
		||||
            int? videoBitrate = null;
 | 
			
		||||
            int? audioBitrate = null;
 | 
			
		||||
 | 
			
		||||
            if (channel != null)
 | 
			
		||||
            {
 | 
			
		||||
                if (string.IsNullOrWhiteSpace(videoCodec))
 | 
			
		||||
                {
 | 
			
		||||
                    videoCodec = channel.VideoCodec;
 | 
			
		||||
                }
 | 
			
		||||
                audioCodec = channel.AudioCodec;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // normalize
 | 
			
		||||
            if (string.Equals(videoCodec, "mpeg2", StringComparison.OrdinalIgnoreCase))
 | 
			
		||||
            {
 | 
			
		||||
                videoCodec = "mpeg2video";
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            string nal = null;
 | 
			
		||||
 | 
			
		||||
            var url = info.Url;
 | 
			
		||||
            var id = channelId;
 | 
			
		||||
            id += "_" + url.GetMD5().ToString("N");
 | 
			
		||||
 | 
			
		||||
            var mediaSource = new MediaSourceInfo
 | 
			
		||||
            {
 | 
			
		||||
                Path = url,
 | 
			
		||||
                Protocol = MediaProtocol.Udp,
 | 
			
		||||
                MediaStreams = new List<MediaStream>
 | 
			
		||||
                        {
 | 
			
		||||
                            new MediaStream
 | 
			
		||||
                            {
 | 
			
		||||
                                Type = MediaStreamType.Video,
 | 
			
		||||
                                // Set the index to -1 because we don't know the exact index of the video stream within the container
 | 
			
		||||
                                Index = -1,
 | 
			
		||||
                                IsInterlaced = isInterlaced,
 | 
			
		||||
                                Codec = videoCodec,
 | 
			
		||||
                                Width = width,
 | 
			
		||||
                                Height = height,
 | 
			
		||||
                                BitRate = videoBitrate,
 | 
			
		||||
                                NalLengthSize = nal
 | 
			
		||||
 | 
			
		||||
                            },
 | 
			
		||||
                            new MediaStream
 | 
			
		||||
                            {
 | 
			
		||||
                                Type = MediaStreamType.Audio,
 | 
			
		||||
                                // Set the index to -1 because we don't know the exact index of the audio stream within the container
 | 
			
		||||
                                Index = -1,
 | 
			
		||||
                                Codec = audioCodec,
 | 
			
		||||
                                BitRate = audioBitrate
 | 
			
		||||
                            }
 | 
			
		||||
                        },
 | 
			
		||||
                RequiresOpening = true,
 | 
			
		||||
                RequiresClosing = true,
 | 
			
		||||
                BufferMs = 0,
 | 
			
		||||
                Container = "ts",
 | 
			
		||||
                Id = id,
 | 
			
		||||
                SupportsDirectPlay = false,
 | 
			
		||||
                SupportsDirectStream = true,
 | 
			
		||||
                SupportsTranscoding = true,
 | 
			
		||||
                IsInfiniteStream = true
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            mediaSource.InferTotalBitrate();
 | 
			
		||||
 | 
			
		||||
            return mediaSource;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        protected override async Task<List<MediaSourceInfo>> GetChannelStreamMediaSources(TunerHostInfo info, string channelId, CancellationToken cancellationToken)
 | 
			
		||||
        {
 | 
			
		||||
            var list = new List<MediaSourceInfo>();
 | 
			
		||||
@ -453,24 +503,37 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
 | 
			
		||||
            }
 | 
			
		||||
            var hdhrId = GetHdHrIdFromChannelId(channelId);
 | 
			
		||||
 | 
			
		||||
            var channels = await GetChannels(info, true, CancellationToken.None).ConfigureAwait(false);
 | 
			
		||||
            var channelInfo = channels.FirstOrDefault(i => string.Equals(i.Id, channelId, StringComparison.OrdinalIgnoreCase));
 | 
			
		||||
 | 
			
		||||
            var hdHomerunChannelInfo = channelInfo as HdHomerunChannelInfo;
 | 
			
		||||
 | 
			
		||||
            var isLegacyTuner = hdHomerunChannelInfo != null && hdHomerunChannelInfo.IsLegacyTuner;
 | 
			
		||||
 | 
			
		||||
            if (isLegacyTuner)
 | 
			
		||||
            {
 | 
			
		||||
                list.Add(GetLegacyMediaSource(info, hdhrId, channelInfo));
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                try
 | 
			
		||||
                {
 | 
			
		||||
                var model = await GetModelInfo(info, cancellationToken).ConfigureAwait(false);
 | 
			
		||||
                model = model ?? string.Empty;
 | 
			
		||||
                    var modelInfo = await GetModelInfo(info, false, cancellationToken).ConfigureAwait(false);
 | 
			
		||||
                    var model = modelInfo == null ? string.Empty : (modelInfo.ModelNumber ?? string.Empty);
 | 
			
		||||
 | 
			
		||||
                    if ((model.IndexOf("hdtc", StringComparison.OrdinalIgnoreCase) != -1))
 | 
			
		||||
                    {
 | 
			
		||||
                    list.Add(await GetMediaSource(info, hdhrId, "native").ConfigureAwait(false));
 | 
			
		||||
                        list.Add(GetMediaSource(info, hdhrId, channelInfo, "native"));
 | 
			
		||||
 | 
			
		||||
                        if (info.AllowHWTranscoding)
 | 
			
		||||
                        {
 | 
			
		||||
                        list.Add(await GetMediaSource(info, hdhrId, "heavy").ConfigureAwait(false));
 | 
			
		||||
                            list.Add(GetMediaSource(info, hdhrId, channelInfo, "heavy"));
 | 
			
		||||
 | 
			
		||||
                        list.Add(await GetMediaSource(info, hdhrId, "internet540").ConfigureAwait(false));
 | 
			
		||||
                        list.Add(await GetMediaSource(info, hdhrId, "internet480").ConfigureAwait(false));
 | 
			
		||||
                        list.Add(await GetMediaSource(info, hdhrId, "internet360").ConfigureAwait(false));
 | 
			
		||||
                        list.Add(await GetMediaSource(info, hdhrId, "internet240").ConfigureAwait(false));
 | 
			
		||||
                        list.Add(await GetMediaSource(info, hdhrId, "mobile").ConfigureAwait(false));
 | 
			
		||||
                            list.Add(GetMediaSource(info, hdhrId, channelInfo, "internet540"));
 | 
			
		||||
                            list.Add(GetMediaSource(info, hdhrId, channelInfo, "internet480"));
 | 
			
		||||
                            list.Add(GetMediaSource(info, hdhrId, channelInfo, "internet360"));
 | 
			
		||||
                            list.Add(GetMediaSource(info, hdhrId, channelInfo, "internet240"));
 | 
			
		||||
                            list.Add(GetMediaSource(info, hdhrId, channelInfo, "mobile"));
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
@ -481,7 +544,8 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
 | 
			
		||||
 | 
			
		||||
                if (list.Count == 0)
 | 
			
		||||
                {
 | 
			
		||||
                list.Add(await GetMediaSource(info, hdhrId, "native").ConfigureAwait(false));
 | 
			
		||||
                    list.Add(GetMediaSource(info, hdhrId, channelInfo, "native"));
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return list;
 | 
			
		||||
@ -509,12 +573,27 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
 | 
			
		||||
            }
 | 
			
		||||
            var hdhrId = GetHdHrIdFromChannelId(channelId);
 | 
			
		||||
 | 
			
		||||
            var mediaSource = await GetMediaSource(info, hdhrId, profile).ConfigureAwait(false);
 | 
			
		||||
            var channels = await GetChannels(info, true, CancellationToken.None).ConfigureAwait(false);
 | 
			
		||||
            var channelInfo = channels.FirstOrDefault(i => string.Equals(i.Id, channelId, StringComparison.OrdinalIgnoreCase));
 | 
			
		||||
 | 
			
		||||
            var liveStream = new HdHomerunLiveStream(mediaSource, streamId, _fileSystem, _httpClient, Logger, Config.ApplicationPaths, _appHost);
 | 
			
		||||
            liveStream.EnableStreamSharing = true;
 | 
			
		||||
            var hdhomerunChannel = channelInfo as HdHomerunChannelInfo;
 | 
			
		||||
 | 
			
		||||
            if (hdhomerunChannel != null && hdhomerunChannel.IsLegacyTuner)
 | 
			
		||||
            {
 | 
			
		||||
                var modelInfo = await GetModelInfo(info, false, cancellationToken).ConfigureAwait(false);
 | 
			
		||||
                var mediaSource = GetLegacyMediaSource(info, hdhrId, channelInfo);
 | 
			
		||||
 | 
			
		||||
                var liveStream = new HdHomerunUdpStream(mediaSource, streamId, hdhomerunChannel.Url, modelInfo.TunerCount, _fileSystem, _httpClient, Logger, Config.ApplicationPaths, _appHost, _socketFactory, _networkManager);
 | 
			
		||||
                return liveStream;
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                var mediaSource = GetMediaSource(info, hdhrId, channelInfo, profile);
 | 
			
		||||
 | 
			
		||||
                var liveStream = new HdHomerunHttpStream(mediaSource, streamId, _fileSystem, _httpClient, Logger, Config.ApplicationPaths, _appHost);
 | 
			
		||||
                return liveStream;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public async Task Validate(TunerHostInfo info)
 | 
			
		||||
        {
 | 
			
		||||
@ -531,18 +610,8 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                // Test it by pulling down the lineup
 | 
			
		||||
                using (var stream = await _httpClient.Get(new HttpRequestOptions
 | 
			
		||||
                {
 | 
			
		||||
                    Url = string.Format("{0}/discover.json", GetApiUrl(info, false)),
 | 
			
		||||
                    CancellationToken = CancellationToken.None,
 | 
			
		||||
                    BufferContent = false
 | 
			
		||||
 | 
			
		||||
                }).ConfigureAwait(false))
 | 
			
		||||
                {
 | 
			
		||||
                    var response = JsonSerializer.DeserializeFromStream<DiscoverResponse>(stream);
 | 
			
		||||
 | 
			
		||||
                    info.DeviceId = response.DeviceID;
 | 
			
		||||
                }
 | 
			
		||||
                var modelInfo = await GetModelInfo(info, true, CancellationToken.None).ConfigureAwait(false);
 | 
			
		||||
                info.DeviceId = modelInfo.DeviceID;
 | 
			
		||||
            }
 | 
			
		||||
            catch (HttpException ex)
 | 
			
		||||
            {
 | 
			
		||||
@ -573,6 +642,7 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
 | 
			
		||||
            public string DeviceAuth { get; set; }
 | 
			
		||||
            public string BaseURL { get; set; }
 | 
			
		||||
            public string LineupURL { get; set; }
 | 
			
		||||
            public int TunerCount { get; set; }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -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);
 | 
			
		||||
 | 
			
		||||
    public class SocketCreateException : Exception
 | 
			
		||||
    {
 | 
			
		||||
        public SocketCreateException(string errorCode, Exception originalException)
 | 
			
		||||
            : base(errorCode, originalException)
 | 
			
		||||
        {
 | 
			
		||||
            ErrorCode = errorCode;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string ErrorCode { get; private set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Sends a UDP message to a particular end point (uni or multicast).
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        Task SendAsync(byte[] buffer, int bytes, IpEndPointInfo endPoint, CancellationToken cancellationToken);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user