mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-06-27 01:50:53 +01:00
Various DLNA Optimizations
This commit is contained in:
@@ -10,14 +10,8 @@ namespace MediaBrowser.Model.Dlna
|
||||
{
|
||||
public class ContentFeatureBuilder
|
||||
{
|
||||
private readonly DeviceProfile _profile;
|
||||
|
||||
public ContentFeatureBuilder(DeviceProfile profile)
|
||||
{
|
||||
_profile = profile;
|
||||
}
|
||||
|
||||
public string BuildImageHeader(
|
||||
public static string BuildImageHeader(
|
||||
DeviceProfile profile,
|
||||
string container,
|
||||
int? width,
|
||||
int? height,
|
||||
@@ -38,27 +32,31 @@ namespace MediaBrowser.Model.Dlna
|
||||
";DLNA.ORG_FLAGS={0}",
|
||||
DlnaMaps.FlagsToString(flagValue));
|
||||
|
||||
ResponseProfile mediaProfile = _profile.GetImageMediaProfile(
|
||||
container,
|
||||
width,
|
||||
height);
|
||||
|
||||
if (string.IsNullOrEmpty(orgPn))
|
||||
{
|
||||
ResponseProfile mediaProfile = profile.GetImageMediaProfile(
|
||||
container,
|
||||
width,
|
||||
height);
|
||||
|
||||
orgPn = mediaProfile?.OrgPn;
|
||||
|
||||
if (string.IsNullOrEmpty(orgPn))
|
||||
{
|
||||
orgPn = GetImageOrgPnValue(container, width, height);
|
||||
}
|
||||
}
|
||||
|
||||
if (string.IsNullOrEmpty(orgPn))
|
||||
{
|
||||
orgPn = GetImageOrgPnValue(container, width, height);
|
||||
return orgOp.TrimStart(';') + orgCi + dlnaflags;
|
||||
}
|
||||
|
||||
string contentFeatures = string.IsNullOrEmpty(orgPn) ? string.Empty : "DLNA.ORG_PN=" + orgPn;
|
||||
|
||||
return (contentFeatures + orgOp + orgCi + dlnaflags).Trim(';');
|
||||
return "DLNA.ORG_PN=" + orgPn + orgOp + orgCi + dlnaflags;
|
||||
}
|
||||
|
||||
public string BuildAudioHeader(
|
||||
public static string BuildAudioHeader(
|
||||
DeviceProfile profile,
|
||||
string container,
|
||||
string audioCodec,
|
||||
int? audioBitrate,
|
||||
@@ -94,7 +92,7 @@ namespace MediaBrowser.Model.Dlna
|
||||
";DLNA.ORG_FLAGS={0}",
|
||||
DlnaMaps.FlagsToString(flagValue));
|
||||
|
||||
ResponseProfile mediaProfile = _profile.GetAudioMediaProfile(
|
||||
ResponseProfile mediaProfile = profile.GetAudioMediaProfile(
|
||||
container,
|
||||
audioCodec,
|
||||
audioChannels,
|
||||
@@ -109,12 +107,16 @@ namespace MediaBrowser.Model.Dlna
|
||||
orgPn = GetAudioOrgPnValue(container, audioBitrate, audioSampleRate, audioChannels);
|
||||
}
|
||||
|
||||
string contentFeatures = string.IsNullOrEmpty(orgPn) ? string.Empty : "DLNA.ORG_PN=" + orgPn;
|
||||
if (string.IsNullOrEmpty(orgPn))
|
||||
{
|
||||
return orgOp.TrimStart(';') + orgCi + dlnaflags;
|
||||
}
|
||||
|
||||
return (contentFeatures + orgOp + orgCi + dlnaflags).Trim(';');
|
||||
return "DLNA.ORG_PN=" + orgPn + orgOp + orgCi + dlnaflags;
|
||||
}
|
||||
|
||||
public List<string> BuildVideoHeader(
|
||||
public static List<string> BuildVideoHeader(
|
||||
DeviceProfile profile,
|
||||
string container,
|
||||
string videoCodec,
|
||||
string audioCodec,
|
||||
@@ -163,7 +165,7 @@ namespace MediaBrowser.Model.Dlna
|
||||
";DLNA.ORG_FLAGS={0}",
|
||||
DlnaMaps.FlagsToString(flagValue));
|
||||
|
||||
ResponseProfile mediaProfile = _profile.GetVideoMediaProfile(
|
||||
ResponseProfile mediaProfile = profile.GetVideoMediaProfile(
|
||||
container,
|
||||
audioCodec,
|
||||
videoCodec,
|
||||
@@ -192,9 +194,9 @@ namespace MediaBrowser.Model.Dlna
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (string s in GetVideoOrgPnValue(container, videoCodec, audioCodec, width, height, timestamp))
|
||||
foreach (var s in GetVideoOrgPnValue(container, videoCodec, audioCodec, width, height, timestamp))
|
||||
{
|
||||
orgPnValues.Add(s);
|
||||
orgPnValues.Add(s.ToString());
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -203,20 +205,20 @@ namespace MediaBrowser.Model.Dlna
|
||||
|
||||
foreach (string orgPn in orgPnValues)
|
||||
{
|
||||
string contentFeatures = string.IsNullOrEmpty(orgPn) ? string.Empty : "DLNA.ORG_PN=" + orgPn;
|
||||
|
||||
var value = (contentFeatures + orgOp + orgCi + dlnaflags).Trim(';');
|
||||
|
||||
contentFeatureList.Add(value);
|
||||
if (string.IsNullOrEmpty(orgPn))
|
||||
{
|
||||
contentFeatureList.Add(orgOp.TrimStart(';') + orgCi + dlnaflags);
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
contentFeatureList.Add("DLNA.ORG_PN=" + orgPn + orgCi + dlnaflags);
|
||||
}
|
||||
}
|
||||
|
||||
if (orgPnValues.Count == 0)
|
||||
{
|
||||
string contentFeatures = string.Empty;
|
||||
|
||||
var value = (contentFeatures + orgOp + orgCi + dlnaflags).Trim(';');
|
||||
|
||||
contentFeatureList.Add(value);
|
||||
contentFeatureList.Add(orgOp.TrimStart(';') + orgCi + dlnaflags);
|
||||
}
|
||||
|
||||
return contentFeatureList;
|
||||
@@ -224,19 +226,14 @@ namespace MediaBrowser.Model.Dlna
|
||||
|
||||
private static string GetImageOrgPnValue(string container, int? width, int? height)
|
||||
{
|
||||
MediaFormatProfile? format = new MediaFormatProfileResolver()
|
||||
.ResolveImageFormat(
|
||||
container,
|
||||
width,
|
||||
height);
|
||||
MediaFormatProfile? format = MediaFormatProfileResolver.ResolveImageFormat(container, width, height);
|
||||
|
||||
return format.HasValue ? format.Value.ToString() : null;
|
||||
}
|
||||
|
||||
private static string GetAudioOrgPnValue(string container, int? audioBitrate, int? audioSampleRate, int? audioChannels)
|
||||
{
|
||||
MediaFormatProfile? format = new MediaFormatProfileResolver()
|
||||
.ResolveAudioFormat(
|
||||
MediaFormatProfile? format = MediaFormatProfileResolver.ResolveAudioFormat(
|
||||
container,
|
||||
audioBitrate,
|
||||
audioSampleRate,
|
||||
@@ -245,9 +242,9 @@ namespace MediaBrowser.Model.Dlna
|
||||
return format.HasValue ? format.Value.ToString() : null;
|
||||
}
|
||||
|
||||
private static string[] GetVideoOrgPnValue(string container, string videoCodec, string audioCodec, int? width, int? height, TransportStreamTimestamp timestamp)
|
||||
private static MediaFormatProfile[] GetVideoOrgPnValue(string container, string videoCodec, string audioCodec, int? width, int? height, TransportStreamTimestamp timestamp)
|
||||
{
|
||||
return new MediaFormatProfileResolver().ResolveVideoFormat(container, videoCodec, audioCodec, width, height, timestamp);
|
||||
return MediaFormatProfileResolver.ResolveVideoFormat(container, videoCodec, audioCodec, width, height, timestamp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user