|  | @@ -14,6 +14,7 @@ using System.IO;
 | 
	
		
			
				|  |  |  using System.Linq;
 | 
	
		
			
				|  |  |  using System.Threading;
 | 
	
		
			
				|  |  |  using System.Threading.Tasks;
 | 
	
		
			
				|  |  | +using MediaBrowser.Common.Extensions;
 | 
	
		
			
				|  |  |  using MediaBrowser.Controller.MediaEncoding;
 | 
	
		
			
				|  |  |  using MediaBrowser.Model.Configuration;
 | 
	
		
			
				|  |  |  using MediaBrowser.Model.Dlna;
 | 
	
	
		
			
				|  | @@ -64,7 +65,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.HdHomerun
 | 
	
		
			
				|  |  |                      {
 | 
	
		
			
				|  |  |                          Name = i.GuideName,
 | 
	
		
			
				|  |  |                          Number = i.GuideNumber.ToString(CultureInfo.InvariantCulture),
 | 
	
		
			
				|  |  | -                        Id = ChannelIdPrefix + i.GuideNumber.ToString(CultureInfo.InvariantCulture),
 | 
	
		
			
				|  |  | +                        Id = ChannelIdPrefix + i.GuideNumber.ToString(CultureInfo.InvariantCulture) + '_' + (i.GuideName ?? string.Empty).GetMD5().ToString("N"),
 | 
	
		
			
				|  |  |                          IsFavorite = i.Favorite
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                      });
 | 
	
	
		
			
				|  | @@ -347,6 +348,11 @@ namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.HdHomerun
 | 
	
		
			
				|  |  |              return Config.GetConfiguration<EncodingOptions>("encoding");
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +        private string GetHdHrIdFromChannelId(string channelId)
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +            return channelId.Split('_')[1];
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          protected override async Task<List<MediaSourceInfo>> GetChannelStreamMediaSources(TunerHostInfo info, string channelId, CancellationToken cancellationToken)
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  |              var list = new List<MediaSourceInfo>();
 | 
	
	
		
			
				|  | @@ -355,9 +361,9 @@ namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.HdHomerun
 | 
	
		
			
				|  |  |              {
 | 
	
		
			
				|  |  |                  return list;
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | -            channelId = channelId.Substring(ChannelIdPrefix.Length);
 | 
	
		
			
				|  |  | +            var hdhrId = GetHdHrIdFromChannelId(channelId);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            list.Add(GetMediaSource(info, channelId, "native"));
 | 
	
		
			
				|  |  | +            list.Add(GetMediaSource(info, hdhrId, "native"));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              try
 | 
	
		
			
				|  |  |              {
 | 
	
	
		
			
				|  | @@ -366,12 +372,12 @@ namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.HdHomerun
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                  if (model.IndexOf("hdtc", StringComparison.OrdinalIgnoreCase) != -1)
 | 
	
		
			
				|  |  |                  {
 | 
	
		
			
				|  |  | -                    list.Insert(0, GetMediaSource(info, channelId, "heavy"));
 | 
	
		
			
				|  |  | +                    list.Insert(0, GetMediaSource(info, hdhrId, "heavy"));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                    list.Add(GetMediaSource(info, channelId, "internet480"));
 | 
	
		
			
				|  |  | -                    list.Add(GetMediaSource(info, channelId, "internet360"));
 | 
	
		
			
				|  |  | -                    list.Add(GetMediaSource(info, channelId, "internet240"));
 | 
	
		
			
				|  |  | -                    list.Add(GetMediaSource(info, channelId, "mobile"));
 | 
	
		
			
				|  |  | +                    list.Add(GetMediaSource(info, hdhrId, "internet480"));
 | 
	
		
			
				|  |  | +                    list.Add(GetMediaSource(info, hdhrId, "internet360"));
 | 
	
		
			
				|  |  | +                    list.Add(GetMediaSource(info, hdhrId, "internet240"));
 | 
	
		
			
				|  |  | +                    list.Add(GetMediaSource(info, hdhrId, "mobile"));
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |              catch (Exception ex)
 | 
	
	
		
			
				|  | @@ -400,9 +406,9 @@ namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.HdHomerun
 | 
	
		
			
				|  |  |              {
 | 
	
		
			
				|  |  |                  throw new ArgumentException("Channel not found");
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | -            channelId = channelId.Substring(ChannelIdPrefix.Length);
 | 
	
		
			
				|  |  | +            var hdhrId = GetHdHrIdFromChannelId(channelId);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            return GetMediaSource(info, channelId, streamId);
 | 
	
		
			
				|  |  | +            return GetMediaSource(info, hdhrId, streamId);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          public async Task Validate(TunerHostInfo info)
 |