mirror of https://github.com/jellyfin/jellyfin.git
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
7725949ead
commit
2eb00bf3c0
|
@ -1085,9 +1085,6 @@ namespace MediaBrowser.Model.Dlna
|
||||||
bool? isInterlaced = videoStream?.IsInterlaced;
|
bool? isInterlaced = videoStream?.IsInterlaced;
|
||||||
string videoCodecTag = videoStream?.CodecTag;
|
string videoCodecTag = videoStream?.CodecTag;
|
||||||
bool? isAvc = videoStream?.IsAVC;
|
bool? isAvc = videoStream?.IsAVC;
|
||||||
// Audio
|
|
||||||
var defaultLanguage = audioStream?.Language ?? string.Empty;
|
|
||||||
var defaultMarked = audioStream?.IsDefault ?? false;
|
|
||||||
|
|
||||||
TransportStreamTimestamp? timestamp = videoStream == null ? TransportStreamTimestamp.None : mediaSource.Timestamp;
|
TransportStreamTimestamp? timestamp = videoStream == null ? TransportStreamTimestamp.None : mediaSource.Timestamp;
|
||||||
int? packetLength = videoStream?.PacketLength;
|
int? packetLength = videoStream?.PacketLength;
|
||||||
|
@ -1119,7 +1116,7 @@ namespace MediaBrowser.Model.Dlna
|
||||||
.SelectMany(codecProfile => checkVideoConditions(codecProfile.Conditions)));
|
.SelectMany(codecProfile => checkVideoConditions(codecProfile.Conditions)));
|
||||||
|
|
||||||
// Check audiocandidates profile 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;
|
TranscodeReason subtitleProfileReasons = 0;
|
||||||
if (subtitleStream != null)
|
if (subtitleStream != null)
|
||||||
|
@ -1240,10 +1237,10 @@ namespace MediaBrowser.Model.Dlna
|
||||||
return (Profile: null, PlayMethod: null, AudioStreamIndex: null, TranscodeReasons: failureReasons);
|
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 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);
|
var audioStreamFailureReasons = AggregateFailureConditions(mediaSource, profile, "VideoAudioCodecProfile", audioFailureConditions);
|
||||||
if (audioStream?.IsExternal == true)
|
if (audioStream?.IsExternal == true)
|
||||||
|
|
|
@ -230,19 +230,15 @@ namespace MediaBrowser.Model.Dto
|
||||||
|
|
||||||
public bool? IsSecondaryAudio(MediaStream stream)
|
public bool? IsSecondaryAudio(MediaStream stream)
|
||||||
{
|
{
|
||||||
// Look for the first audio track marked as default
|
if (stream.IsExternal)
|
||||||
foreach (var currentStream in MediaStreams)
|
|
||||||
{
|
{
|
||||||
if (currentStream.Type == MediaStreamType.Audio && currentStream.IsDefault)
|
return false;
|
||||||
{
|
|
||||||
return currentStream.Index != stream.Index;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Look for the first audio track
|
// Look for the first audio track
|
||||||
foreach (var currentStream in MediaStreams)
|
foreach (var currentStream in MediaStreams)
|
||||||
{
|
{
|
||||||
if (currentStream.Type == MediaStreamType.Audio)
|
if (currentStream.Type == MediaStreamType.Audio && !currentStream.IsExternal)
|
||||||
{
|
{
|
||||||
return currentStream.Index != stream.Index;
|
return currentStream.Index != stream.Index;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue