diff --git a/Emby.Common.Implementations/Networking/NetworkManager.cs b/Emby.Common.Implementations/Networking/NetworkManager.cs index 4485e8b14e..2b84b2aa18 100644 --- a/Emby.Common.Implementations/Networking/NetworkManager.cs +++ b/Emby.Common.Implementations/Networking/NetworkManager.cs @@ -234,7 +234,7 @@ namespace Emby.Common.Implementations.Networking // Try to exclude virtual adapters // http://stackoverflow.com/questions/8089685/c-sharp-finding-my-machines-local-ip-address-and-not-the-vms var addr = ipProperties.GatewayAddresses.FirstOrDefault(); - if (addr == null|| string.Equals(addr.Address.ToString(), "0.0.0.0", StringComparison.OrdinalIgnoreCase)) + if (addr == null || string.Equals(addr.Address.ToString(), "0.0.0.0", StringComparison.OrdinalIgnoreCase)) { return new List(); } @@ -275,7 +275,7 @@ namespace Emby.Common.Implementations.Networking /// Gets a random port number that is currently available /// /// System.Int32. - 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; + } + } + /// /// Returns MAC Address from first Network Card in Computer /// diff --git a/Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunHost.cs b/Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunHost.cs index e0d5530f69..2eb02d63c6 100644 --- a/Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunHost.cs +++ b/Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunHost.cs @@ -106,7 +106,7 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun AudioCodec = i.AudioCodec, VideoCodec = i.VideoCodec, ChannelType = ChannelType.TV, - IsLegacyTuner = (info.Url ?? string.Empty).StartsWith("hdhomerun", StringComparison.OrdinalIgnoreCase) + IsLegacyTuner = (i.URL ?? string.Empty).StartsWith("hdhomerun", StringComparison.OrdinalIgnoreCase) }).Cast().ToList(); } @@ -173,7 +173,7 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun var tuners = new List(); - var uri = new Uri(info.Url); + var uri = new Uri(GetApiUrl(info, false)); using (var manager = new HdHomerunManager(_socketFactory)) { diff --git a/Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/LegacyHdHomerunLiveStream.cs b/Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/LegacyHdHomerunLiveStream.cs index 4bac1e1aa9..7bb524c49a 100644 --- a/Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/LegacyHdHomerunLiveStream.cs +++ b/Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/LegacyHdHomerunLiveStream.cs @@ -31,8 +31,9 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun private readonly MulticastStream _multicastStream; private readonly string _channelUrl; private readonly int _numTuners; + private readonly INetworkManager _networkManager; - public LegacyHdHomerunLiveStream(MediaSourceInfo mediaSource, string originalStreamId, string channelUrl, int numTuners, IFileSystem fileSystem, IHttpClient httpClient, ILogger logger, IServerApplicationPaths appPaths, IServerApplicationHost appHost, ISocketFactory socketFactory) + public LegacyHdHomerunLiveStream(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; @@ -41,6 +42,7 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun _appPaths = appPaths; _appHost = appHost; _socketFactory = socketFactory; + _networkManager = networkManager; OriginalStreamId = originalStreamId; _multicastStream = new MulticastStream(_logger); _channelUrl = channelUrl; @@ -53,15 +55,14 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun var mediaSource = OriginalMediaSource; - var splitString = mediaSource.Path.Split('_'); - var remoteIp = splitString[0]; - var localPort = Convert.ToInt32(splitString[1]); + var uri = new Uri(mediaSource.Path); + var localPort = _networkManager.GetRandomUnusedUdpPort(); - _logger.Info("Opening Legacy HDHR Live stream from {0}", remoteIp); + _logger.Info("Opening Legacy HDHR Live stream from {0}", uri.Host); var taskCompletionSource = new TaskCompletionSource(); - StartStreaming(remoteIp, localPort, taskCompletionSource, _liveStreamCancellationTokenSource.Token); + StartStreaming(uri.Host, localPort, taskCompletionSource, _liveStreamCancellationTokenSource.Token); //OpenedMediaSource.Protocol = MediaProtocol.File; //OpenedMediaSource.Path = tempFile; diff --git a/MediaBrowser.Common/Net/INetworkManager.cs b/MediaBrowser.Common/Net/INetworkManager.cs index 3bc22c07f5..e2ab47322a 100644 --- a/MediaBrowser.Common/Net/INetworkManager.cs +++ b/MediaBrowser.Common/Net/INetworkManager.cs @@ -12,7 +12,9 @@ namespace MediaBrowser.Common.Net /// Gets a random port number that is currently available /// /// System.Int32. - int GetRandomUnusedPort(); + int GetRandomUnusedTcpPort(); + + int GetRandomUnusedUdpPort(); /// /// Returns MAC Address from first Network Card in Computer