| 
					
				 | 
			
			
				@@ -19,8 +19,7 @@ namespace Emby.Server.Implementations.LiveTv 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public class LiveTvMediaSourceProvider : IMediaSourceProvider 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // Do not use a pipe here because Roku http requests to the server will fail, without any explicit error message. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        private const char StreamIdDelimeter = '_'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        private const string StreamIdDelimeterString = "_"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        private const char StreamIdDelimiter = '_'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         private readonly ILiveTvManager _liveTvManager; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         private readonly ILogger<LiveTvMediaSourceProvider> _logger; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -47,7 +46,7 @@ namespace Emby.Server.Implementations.LiveTv 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return Task.FromResult<IEnumerable<MediaSourceInfo>>(Array.Empty<MediaSourceInfo>()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return Task.FromResult(Enumerable.Empty<MediaSourceInfo>()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         private async Task<IEnumerable<MediaSourceInfo>> GetMediaSourcesInternal(BaseItem item, ActiveRecordingInfo activeRecordingInfo, CancellationToken cancellationToken) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -98,7 +97,7 @@ namespace Emby.Server.Implementations.LiveTv 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         source.Id ?? string.Empty 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    source.OpenToken = string.Join(StreamIdDelimeterString, openKeys); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    source.OpenToken = string.Join(StreamIdDelimiter, openKeys); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 // Dummy this up so that direct play checks can still run 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -116,7 +115,7 @@ namespace Emby.Server.Implementations.LiveTv 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /// <inheritdoc /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         public async Task<ILiveStream> OpenMediaSource(string openToken, List<ILiveStream> currentLiveStreams, CancellationToken cancellationToken) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            var keys = openToken.Split(new[] { StreamIdDelimeter }, 3); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            var keys = openToken.Split(StreamIdDelimiter, 3); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             var mediaSourceId = keys.Length >= 3 ? keys[2] : null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             var info = await _liveTvManager.GetChannelStream(keys[1], mediaSourceId, currentLiveStreams, cancellationToken).ConfigureAwait(false); 
			 |