|
@@ -10,8 +10,6 @@ namespace MediaBrowser.Model.Dlna
|
|
{
|
|
{
|
|
public class StreamBuilder
|
|
public class StreamBuilder
|
|
{
|
|
{
|
|
- private readonly string[] _serverTextSubtitleOutputs = { "srt", "vtt", "ttml" };
|
|
|
|
-
|
|
|
|
public StreamInfo BuildAudioItem(AudioOptions options)
|
|
public StreamInfo BuildAudioItem(AudioOptions options)
|
|
{
|
|
{
|
|
ValidateAudioInput(options);
|
|
ValidateAudioInput(options);
|
|
@@ -544,16 +542,18 @@ namespace MediaBrowser.Model.Dlna
|
|
|
|
|
|
private SubtitleProfile GetSubtitleProfile(MediaStream subtitleStream, VideoOptions options)
|
|
private SubtitleProfile GetSubtitleProfile(MediaStream subtitleStream, VideoOptions options)
|
|
{
|
|
{
|
|
- if (subtitleStream.IsTextSubtitleStream)
|
|
|
|
|
|
+ // Look for an external profile that matches the stream type (text/graphical)
|
|
|
|
+ foreach (SubtitleProfile profile in options.Profile.SubtitleProfiles)
|
|
{
|
|
{
|
|
- SubtitleProfile externalProfile = GetSubtitleProfile(options.Profile.SubtitleProfiles, SubtitleDeliveryMethod.External, _serverTextSubtitleOutputs);
|
|
|
|
-
|
|
|
|
- if (externalProfile != null)
|
|
|
|
|
|
+ if (profile.Method == SubtitleDeliveryMethod.External && subtitleStream.IsTextSubtitleStream == MediaStream.IsTextFormat(profile.Format))
|
|
{
|
|
{
|
|
- return externalProfile;
|
|
|
|
|
|
+ return profile;
|
|
}
|
|
}
|
|
|
|
+ }
|
|
|
|
|
|
- SubtitleProfile embedProfile = GetSubtitleProfile(options.Profile.SubtitleProfiles, SubtitleDeliveryMethod.Embed, _serverTextSubtitleOutputs);
|
|
|
|
|
|
+ if (subtitleStream.IsTextSubtitleStream)
|
|
|
|
+ {
|
|
|
|
+ SubtitleProfile embedProfile = GetSubtitleProfile(options.Profile.SubtitleProfiles, SubtitleDeliveryMethod.Embed);
|
|
|
|
|
|
if (embedProfile != null)
|
|
if (embedProfile != null)
|
|
{
|
|
{
|
|
@@ -581,6 +581,19 @@ namespace MediaBrowser.Model.Dlna
|
|
return null;
|
|
return null;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ private SubtitleProfile GetSubtitleProfile(SubtitleProfile[] profiles, SubtitleDeliveryMethod method)
|
|
|
|
+ {
|
|
|
|
+ foreach (SubtitleProfile profile in profiles)
|
|
|
|
+ {
|
|
|
|
+ if (method == profile.Method)
|
|
|
|
+ {
|
|
|
|
+ return profile;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
+
|
|
private bool IsAudioEligibleForDirectPlay(MediaSourceInfo item, int? maxBitrate)
|
|
private bool IsAudioEligibleForDirectPlay(MediaSourceInfo item, int? maxBitrate)
|
|
{
|
|
{
|
|
// Honor the max bitrate setting
|
|
// Honor the max bitrate setting
|