mirror of
				https://github.com/jellyfin/jellyfin.git
				synced 2025-11-04 03:27:21 -05:00 
			
		
		
		
	fix secondary audio
Browsers (Chrome, Firefox) can only play the first track, even if the second track is the default. Ignore default flag when testing on secondary audio. External audio tracks are not secondary.
This commit is contained in:
		
							parent
							
								
									383d514353
								
							
						
					
					
						commit
						c4c5af40a1
					
				@ -1088,9 +1088,6 @@ namespace MediaBrowser.Model.Dlna
 | 
			
		||||
            bool? isInterlaced = videoStream?.IsInterlaced;
 | 
			
		||||
            string videoCodecTag = videoStream?.CodecTag;
 | 
			
		||||
            bool? isAvc = videoStream?.IsAVC;
 | 
			
		||||
            // Audio
 | 
			
		||||
            var defaultLanguage = audioStream?.Language ?? string.Empty;
 | 
			
		||||
            var defaultMarked = audioStream?.IsDefault ?? false;
 | 
			
		||||
 | 
			
		||||
            TransportStreamTimestamp? timestamp = videoStream == null ? TransportStreamTimestamp.None : mediaSource.Timestamp;
 | 
			
		||||
            int? packetLength = videoStream?.PacketLength;
 | 
			
		||||
@ -1122,7 +1119,7 @@ namespace MediaBrowser.Model.Dlna
 | 
			
		||||
                    .SelectMany(codecProfile => checkVideoConditions(codecProfile.Conditions)));
 | 
			
		||||
 | 
			
		||||
            // Check audiocandidates profile conditions
 | 
			
		||||
            var audioStreamMatches = candidateAudioStreams.ToDictionary(s => s, audioStream => CheckVideoAudioStreamDirectPlay(options, mediaSource, container, audioStream, defaultLanguage, defaultMarked));
 | 
			
		||||
            var audioStreamMatches = candidateAudioStreams.ToDictionary(s => s, audioStream => CheckVideoAudioStreamDirectPlay(options, mediaSource, container, audioStream));
 | 
			
		||||
 | 
			
		||||
            TranscodeReason subtitleProfileReasons = 0;
 | 
			
		||||
            if (subtitleStream != null)
 | 
			
		||||
@ -1243,10 +1240,10 @@ namespace MediaBrowser.Model.Dlna
 | 
			
		||||
            return (Profile: null, PlayMethod: null, AudioStreamIndex: null, TranscodeReasons: failureReasons);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private TranscodeReason CheckVideoAudioStreamDirectPlay(VideoOptions options, MediaSourceInfo mediaSource, string container, MediaStream audioStream, string language, bool isDefault)
 | 
			
		||||
        private TranscodeReason CheckVideoAudioStreamDirectPlay(VideoOptions options, MediaSourceInfo mediaSource, string container, MediaStream audioStream)
 | 
			
		||||
        {
 | 
			
		||||
            var profile = options.Profile;
 | 
			
		||||
            var audioFailureConditions = GetProfileConditionsForVideoAudio(profile.CodecProfiles, container, audioStream.Codec, audioStream.Channels, audioStream.BitRate, audioStream.SampleRate, audioStream.BitDepth, audioStream.Profile, !audioStream.IsDefault);
 | 
			
		||||
            var audioFailureConditions = GetProfileConditionsForVideoAudio(profile.CodecProfiles, container, audioStream.Codec, audioStream.Channels, audioStream.BitRate, audioStream.SampleRate, audioStream.BitDepth, audioStream.Profile, mediaSource.IsSecondaryAudio(audioStream));
 | 
			
		||||
 | 
			
		||||
            var audioStreamFailureReasons = AggregateFailureConditions(mediaSource, profile, "VideoAudioCodecProfile", audioFailureConditions);
 | 
			
		||||
            if (audioStream?.IsExternal == true)
 | 
			
		||||
 | 
			
		||||
@ -230,19 +230,15 @@ namespace MediaBrowser.Model.Dto
 | 
			
		||||
 | 
			
		||||
        public bool? IsSecondaryAudio(MediaStream stream)
 | 
			
		||||
        {
 | 
			
		||||
            // Look for the first audio track marked as default
 | 
			
		||||
            foreach (var currentStream in MediaStreams)
 | 
			
		||||
            if (stream.IsExternal)
 | 
			
		||||
            {
 | 
			
		||||
                if (currentStream.Type == MediaStreamType.Audio && currentStream.IsDefault)
 | 
			
		||||
                {
 | 
			
		||||
                    return currentStream.Index != stream.Index;
 | 
			
		||||
                }
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Look for the first audio track
 | 
			
		||||
            foreach (var currentStream in MediaStreams)
 | 
			
		||||
            {
 | 
			
		||||
                if (currentStream.Type == MediaStreamType.Audio)
 | 
			
		||||
                if (currentStream.Type == MediaStreamType.Audio && !currentStream.IsExternal)
 | 
			
		||||
                {
 | 
			
		||||
                    return currentStream.Index != stream.Index;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user