|  | @@ -757,8 +757,8 @@ namespace MediaBrowser.Model.Dlna
 | 
	
		
			
				|  |  |              if (options.AllowVideoStreamCopy)
 | 
	
		
			
				|  |  |              {
 | 
	
		
			
				|  |  |                  // prefer direct copy profile
 | 
	
		
			
				|  |  | -                float videoFramerate = videoStream is null ? 0 : videoStream.AverageFrameRate ?? videoStream.AverageFrameRate ?? 0;
 | 
	
		
			
				|  |  | -                TransportStreamTimestamp? timestamp = videoStream is null ? TransportStreamTimestamp.None : item.Timestamp;
 | 
	
		
			
				|  |  | +                float videoFramerate = videoStream?.AverageFrameRate ?? videoStream?.RealFrameRate ?? 0;
 | 
	
		
			
				|  |  | +                TransportStreamTimestamp? timestamp = videoStream == null ? TransportStreamTimestamp.None : item.Timestamp;
 | 
	
		
			
				|  |  |                  int? numAudioStreams = item.GetStreamCount(MediaStreamType.Audio);
 | 
	
		
			
				|  |  |                  int? numVideoStreams = item.GetStreamCount(MediaStreamType.Video);
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -772,6 +772,7 @@ namespace MediaBrowser.Model.Dlna
 | 
	
		
			
				|  |  |                          var container = transcodingProfile.Container;
 | 
	
		
			
				|  |  |                          var appliedVideoConditions = options.Profile.CodecProfiles
 | 
	
		
			
				|  |  |                              .Where(i => i.Type == CodecType.Video &&
 | 
	
		
			
				|  |  | +                                (string.IsNullOrEmpty(i.Codec) || string.Equals(i.Codec, videoStream?.Codec, StringComparison.OrdinalIgnoreCase)) &&
 | 
	
		
			
				|  |  |                                  i.ContainsAnyCodec(videoCodec, container) &&
 | 
	
		
			
				|  |  |                                  i.ApplyConditions.All(applyCondition => ConditionProcessor.IsVideoConditionSatisfied(applyCondition, videoStream?.Width, videoStream?.Height, videoStream?.BitDepth, videoStream?.BitRate, videoStream?.Profile, videoStream?.VideoRangeType, videoStream?.Level, videoFramerate, videoStream?.PacketLength, timestamp, videoStream?.IsAnamorphic, videoStream?.IsInterlaced, videoStream?.RefFrames, numVideoStreams, numAudioStreams, videoStream?.CodecTag, videoStream?.IsAVC)))
 | 
	
		
			
				|  |  |                              .Select(i =>
 | 
	
	
		
			
				|  | @@ -905,6 +906,7 @@ namespace MediaBrowser.Model.Dlna
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              var appliedVideoConditions = options.Profile.CodecProfiles
 | 
	
		
			
				|  |  |                  .Where(i => i.Type == CodecType.Video &&
 | 
	
		
			
				|  |  | +                    (string.IsNullOrEmpty(i.Codec) || string.Equals(i.Codec, videoStream?.Codec, StringComparison.OrdinalIgnoreCase)) &&
 | 
	
		
			
				|  |  |                      i.ContainsAnyCodec(videoCodec, container) &&
 | 
	
		
			
				|  |  |                      i.ApplyConditions.All(applyCondition => ConditionProcessor.IsVideoConditionSatisfied(applyCondition, width, height, bitDepth, videoBitrate, videoProfile, videoRangeType, videoLevel, videoFramerate, packetLength, timestamp, isAnamorphic, isInterlaced, refFrames, numVideoStreams, numAudioStreams, videoCodecTag, isAvc)));
 | 
	
		
			
				|  |  |              var isFirstAppliedCodecProfile = true;
 | 
	
	
		
			
				|  | @@ -937,6 +939,7 @@ namespace MediaBrowser.Model.Dlna
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              var appliedAudioConditions = options.Profile.CodecProfiles
 | 
	
		
			
				|  |  |                  .Where(i => i.Type == CodecType.VideoAudio &&
 | 
	
		
			
				|  |  | +                    (string.IsNullOrEmpty(i.Codec) || string.Equals(i.Codec, audioStream?.Codec, StringComparison.OrdinalIgnoreCase)) &&
 | 
	
		
			
				|  |  |                      i.ContainsAnyCodec(audioCodec, container) &&
 | 
	
		
			
				|  |  |                      i.ApplyConditions.All(applyCondition => ConditionProcessor.IsVideoAudioConditionSatisfied(applyCondition, audioChannels, inputAudioBitrate, inputAudioSampleRate, inputAudioBitDepth, audioProfile, isSecondaryAudio)));
 | 
	
		
			
				|  |  |              isFirstAppliedCodecProfile = true;
 | 
	
	
		
			
				|  | @@ -1176,7 +1179,9 @@ namespace MediaBrowser.Model.Dlna
 | 
	
		
			
				|  |  |                  profile,
 | 
	
		
			
				|  |  |                  "VideoCodecProfile",
 | 
	
		
			
				|  |  |                  profile.CodecProfiles
 | 
	
		
			
				|  |  | -                    .Where(codecProfile => codecProfile.Type == CodecType.Video && codecProfile.ContainsAnyCodec(videoStream?.Codec, container) &&
 | 
	
		
			
				|  |  | +                    .Where(codecProfile => codecProfile.Type == CodecType.Video &&
 | 
	
		
			
				|  |  | +                        (string.IsNullOrEmpty(codecProfile.Codec) || string.Equals(codecProfile.Codec, videoStream?.Codec, StringComparison.OrdinalIgnoreCase)) &&
 | 
	
		
			
				|  |  | +                        codecProfile.ContainsAnyCodec(videoStream?.Codec, container) &&
 | 
	
		
			
				|  |  |                          !checkVideoConditions(codecProfile.ApplyConditions).Any())
 | 
	
		
			
				|  |  |                      .SelectMany(codecProfile => checkVideoConditions(codecProfile.Conditions)));
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -1585,7 +1590,9 @@ namespace MediaBrowser.Model.Dlna
 | 
	
		
			
				|  |  |              bool? isSecondaryAudio)
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  |              return codecProfiles
 | 
	
		
			
				|  |  | -                .Where(profile => profile.Type == CodecType.VideoAudio && profile.ContainsAnyCodec(codec, container) &&
 | 
	
		
			
				|  |  | +                .Where(profile => profile.Type == CodecType.VideoAudio &&
 | 
	
		
			
				|  |  | +                    (string.IsNullOrEmpty(profile.Codec) || string.Equals(profile.Codec, codec, StringComparison.OrdinalIgnoreCase)) &&
 | 
	
		
			
				|  |  | +                    profile.ContainsAnyCodec(codec, container) &&
 | 
	
		
			
				|  |  |                      profile.ApplyConditions.All(applyCondition => ConditionProcessor.IsVideoAudioConditionSatisfied(applyCondition, audioChannels, audioBitrate, audioSampleRate, audioBitDepth, audioProfile, isSecondaryAudio)))
 | 
	
		
			
				|  |  |                  .SelectMany(profile => profile.Conditions)
 | 
	
		
			
				|  |  |                  .Where(condition => !ConditionProcessor.IsVideoAudioConditionSatisfied(condition, audioChannels, audioBitrate, audioSampleRate, audioBitDepth, audioProfile, isSecondaryAudio));
 | 
	
	
		
			
				|  | @@ -1602,7 +1609,9 @@ namespace MediaBrowser.Model.Dlna
 | 
	
		
			
				|  |  |              bool checkConditions)
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  |              var conditions = codecProfiles
 | 
	
		
			
				|  |  | -                .Where(profile => profile.Type == CodecType.Audio && profile.ContainsAnyCodec(codec, container) &&
 | 
	
		
			
				|  |  | +                .Where(profile => profile.Type == CodecType.Audio &&
 | 
	
		
			
				|  |  | +                    (string.IsNullOrEmpty(profile.Codec) || string.Equals(profile.Codec, codec, StringComparison.OrdinalIgnoreCase)) &&
 | 
	
		
			
				|  |  | +                    profile.ContainsAnyCodec(codec, container) &&
 | 
	
		
			
				|  |  |                      profile.ApplyConditions.All(applyCondition => ConditionProcessor.IsAudioConditionSatisfied(applyCondition, audioChannels, audioBitrate, audioSampleRate, audioBitDepth)))
 | 
	
		
			
				|  |  |                  .SelectMany(profile => profile.Conditions);
 | 
	
		
			
				|  |  |  
 |