|
@@ -267,7 +267,10 @@ namespace MediaBrowser.Model.Dlna
|
|
|
|
|
|
if (subtitleStream != null)
|
|
if (subtitleStream != null)
|
|
{
|
|
{
|
|
- playlistItem.SubtitleDeliveryMethod = GetSubtitleDeliveryMethod(subtitleStream, options);
|
|
|
|
|
|
+ SubtitleProfile subtitleProfile = GetSubtitleProfile(subtitleStream, options);
|
|
|
|
+
|
|
|
|
+ playlistItem.SubtitleDeliveryMethod = subtitleProfile.Method;
|
|
|
|
+ playlistItem.SubtitleFormat = subtitleProfile.Format;
|
|
}
|
|
}
|
|
|
|
|
|
return playlistItem;
|
|
return playlistItem;
|
|
@@ -289,7 +292,10 @@ namespace MediaBrowser.Model.Dlna
|
|
{
|
|
{
|
|
if (subtitleStream != null)
|
|
if (subtitleStream != null)
|
|
{
|
|
{
|
|
- playlistItem.SubtitleDeliveryMethod = GetSubtitleDeliveryMethod(subtitleStream, options);
|
|
|
|
|
|
+ SubtitleProfile subtitleProfile = GetSubtitleProfile(subtitleStream, options);
|
|
|
|
+
|
|
|
|
+ playlistItem.SubtitleDeliveryMethod = subtitleProfile.Method;
|
|
|
|
+ playlistItem.SubtitleFormat = subtitleProfile.Format;
|
|
}
|
|
}
|
|
|
|
|
|
playlistItem.PlayMethod = PlayMethod.Transcode;
|
|
playlistItem.PlayMethod = PlayMethod.Transcode;
|
|
@@ -525,9 +531,9 @@ namespace MediaBrowser.Model.Dlna
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
|
|
|
|
- SubtitleDeliveryMethod subtitleMethod = GetSubtitleDeliveryMethod(subtitleStream, options);
|
|
|
|
|
|
+ SubtitleProfile subtitleProfile = GetSubtitleProfile(subtitleStream, options);
|
|
|
|
|
|
- if (subtitleMethod != SubtitleDeliveryMethod.External && subtitleMethod != SubtitleDeliveryMethod.Embed)
|
|
|
|
|
|
+ if (subtitleProfile.Method != SubtitleDeliveryMethod.External && subtitleProfile.Method != SubtitleDeliveryMethod.Embed)
|
|
{
|
|
{
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
@@ -536,43 +542,43 @@ namespace MediaBrowser.Model.Dlna
|
|
return IsAudioEligibleForDirectPlay(item, maxBitrate);
|
|
return IsAudioEligibleForDirectPlay(item, maxBitrate);
|
|
}
|
|
}
|
|
|
|
|
|
- private SubtitleDeliveryMethod GetSubtitleDeliveryMethod(MediaStream subtitleStream,
|
|
|
|
- VideoOptions options)
|
|
|
|
|
|
+ private SubtitleProfile GetSubtitleProfile(MediaStream subtitleStream, VideoOptions options)
|
|
{
|
|
{
|
|
if (subtitleStream.IsTextSubtitleStream)
|
|
if (subtitleStream.IsTextSubtitleStream)
|
|
{
|
|
{
|
|
- // See if the device can retrieve the subtitles externally
|
|
|
|
- bool supportsSubsExternally = options.Context == EncodingContext.Streaming &&
|
|
|
|
- ContainsSubtitleFormat(options.Profile.SubtitleProfiles, SubtitleDeliveryMethod.External, _serverTextSubtitleOutputs);
|
|
|
|
|
|
+ SubtitleProfile externalProfile = GetSubtitleProfile(options.Profile.SubtitleProfiles, SubtitleDeliveryMethod.External, _serverTextSubtitleOutputs);
|
|
|
|
|
|
- if (supportsSubsExternally)
|
|
|
|
|
|
+ if (options.Context == EncodingContext.Streaming && externalProfile != null)
|
|
{
|
|
{
|
|
- return SubtitleDeliveryMethod.External;
|
|
|
|
|
|
+ return externalProfile;
|
|
}
|
|
}
|
|
|
|
|
|
- // See if the device can retrieve the subtitles externally
|
|
|
|
- bool supportsEmbedded = ContainsSubtitleFormat(options.Profile.SubtitleProfiles, SubtitleDeliveryMethod.Embed, _serverTextSubtitleOutputs);
|
|
|
|
|
|
+ SubtitleProfile embedProfile = GetSubtitleProfile(options.Profile.SubtitleProfiles, SubtitleDeliveryMethod.Embed, _serverTextSubtitleOutputs);
|
|
|
|
|
|
- if (supportsEmbedded)
|
|
|
|
|
|
+ if (embedProfile != null)
|
|
{
|
|
{
|
|
- return SubtitleDeliveryMethod.Embed;
|
|
|
|
|
|
+ return embedProfile;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- return SubtitleDeliveryMethod.Encode;
|
|
|
|
|
|
+ return new SubtitleProfile
|
|
|
|
+ {
|
|
|
|
+ Method = SubtitleDeliveryMethod.Embed,
|
|
|
|
+ Format = subtitleStream.Codec
|
|
|
|
+ };
|
|
}
|
|
}
|
|
|
|
|
|
- private bool ContainsSubtitleFormat(SubtitleProfile[] profiles, SubtitleDeliveryMethod method, string[] formats)
|
|
|
|
|
|
+ private SubtitleProfile GetSubtitleProfile(SubtitleProfile[] profiles, SubtitleDeliveryMethod method, string[] formats)
|
|
{
|
|
{
|
|
foreach (SubtitleProfile profile in profiles)
|
|
foreach (SubtitleProfile profile in profiles)
|
|
{
|
|
{
|
|
if (method == profile.Method && ListHelper.ContainsIgnoreCase(formats, profile.Format))
|
|
if (method == profile.Method && ListHelper.ContainsIgnoreCase(formats, profile.Format))
|
|
{
|
|
{
|
|
- return true;
|
|
|
|
|
|
+ return profile;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- return false;
|
|
|
|
|
|
+ return null;
|
|
}
|
|
}
|
|
|
|
|
|
private bool IsAudioEligibleForDirectPlay(MediaSourceInfo item, int? maxBitrate)
|
|
private bool IsAudioEligibleForDirectPlay(MediaSourceInfo item, int? maxBitrate)
|