Merge pull request #6751 from Bond-009/tests12
Fix DLNA UpdateProfile test
This commit is contained in:
commit
14027f962c
|
@ -1,4 +1,5 @@
|
||||||
#pragma warning disable CS1591
|
#pragma warning disable CS1591
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
|
@ -61,6 +62,7 @@ namespace Emby.Dlna
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await ExtractSystemProfilesAsync().ConfigureAwait(false);
|
await ExtractSystemProfilesAsync().ConfigureAwait(false);
|
||||||
|
Directory.CreateDirectory(UserProfilesPath);
|
||||||
LoadProfiles();
|
LoadProfiles();
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
|
@ -322,32 +324,28 @@ namespace Emby.Dlna
|
||||||
|
|
||||||
var path = Path.Join(
|
var path = Path.Join(
|
||||||
systemProfilesPath,
|
systemProfilesPath,
|
||||||
Path.GetFileName(name.AsSpan()).Slice(namespaceName.Length));
|
Path.GetFileName(name.AsSpan())[namespaceName.Length..]);
|
||||||
|
|
||||||
|
if (File.Exists(path))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
// The stream should exist as we just got its name from GetManifestResourceNames
|
// The stream should exist as we just got its name from GetManifestResourceNames
|
||||||
using (var stream = _assembly.GetManifestResourceStream(name)!)
|
using (var stream = _assembly.GetManifestResourceStream(name)!)
|
||||||
{
|
{
|
||||||
var length = stream.Length;
|
Directory.CreateDirectory(systemProfilesPath);
|
||||||
var fileInfo = _fileSystem.GetFileInfo(path);
|
|
||||||
|
|
||||||
if (!fileInfo.Exists || fileInfo.Length != length)
|
var fileOptions = AsyncFile.WriteOptions;
|
||||||
|
fileOptions.Mode = FileMode.CreateNew;
|
||||||
|
fileOptions.PreallocationSize = stream.Length;
|
||||||
|
var fileStream = new FileStream(path, fileOptions);
|
||||||
|
await using (fileStream.ConfigureAwait(false))
|
||||||
{
|
{
|
||||||
Directory.CreateDirectory(systemProfilesPath);
|
await stream.CopyToAsync(fileStream).ConfigureAwait(false);
|
||||||
|
|
||||||
var fileOptions = AsyncFile.WriteOptions;
|
|
||||||
fileOptions.Mode = FileMode.Create;
|
|
||||||
fileOptions.PreallocationSize = length;
|
|
||||||
var fileStream = new FileStream(path, fileOptions);
|
|
||||||
await using (fileStream.ConfigureAwait(false))
|
|
||||||
{
|
|
||||||
await stream.CopyToAsync(fileStream).ConfigureAwait(false);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Not necessary, but just to make it easy to find
|
|
||||||
Directory.CreateDirectory(UserProfilesPath);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
|
@ -400,14 +398,20 @@ namespace Emby.Dlna
|
||||||
}
|
}
|
||||||
|
|
||||||
var current = GetProfileInfosInternal().First(i => string.Equals(i.Info.Id, profileId, StringComparison.OrdinalIgnoreCase));
|
var current = GetProfileInfosInternal().First(i => string.Equals(i.Info.Id, profileId, StringComparison.OrdinalIgnoreCase));
|
||||||
|
if (current.Info.Type == DeviceProfileType.System)
|
||||||
|
{
|
||||||
|
throw new ArgumentException("System profiles can't be edited");
|
||||||
|
}
|
||||||
|
|
||||||
var newFilename = _fileSystem.GetValidFilename(profile.Name) + ".xml";
|
var newFilename = _fileSystem.GetValidFilename(profile.Name) + ".xml";
|
||||||
var path = Path.Combine(UserProfilesPath, newFilename);
|
var path = Path.Join(UserProfilesPath, newFilename);
|
||||||
|
|
||||||
if (!string.Equals(path, current.Path, StringComparison.Ordinal) &&
|
if (!string.Equals(path, current.Path, StringComparison.Ordinal))
|
||||||
current.Info.Type != DeviceProfileType.System)
|
|
||||||
{
|
{
|
||||||
_fileSystem.DeleteFile(current.Path);
|
lock (_profiles)
|
||||||
|
{
|
||||||
|
_profiles.Remove(current.Path);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SaveProfile(profile, path, DeviceProfileType.User);
|
SaveProfile(profile, path, DeviceProfileType.User);
|
||||||
|
@ -490,72 +494,4 @@ namespace Emby.Dlna
|
||||||
internal string Path { get; }
|
internal string Path { get; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
class DlnaProfileEntryPoint : IServerEntryPoint
|
|
||||||
{
|
|
||||||
private readonly IApplicationPaths _appPaths;
|
|
||||||
private readonly IFileSystem _fileSystem;
|
|
||||||
private readonly IXmlSerializer _xmlSerializer;
|
|
||||||
|
|
||||||
public DlnaProfileEntryPoint(IApplicationPaths appPaths, IFileSystem fileSystem, IXmlSerializer xmlSerializer)
|
|
||||||
{
|
|
||||||
_appPaths = appPaths;
|
|
||||||
_fileSystem = fileSystem;
|
|
||||||
_xmlSerializer = xmlSerializer;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Run()
|
|
||||||
{
|
|
||||||
DumpProfiles();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void DumpProfiles()
|
|
||||||
{
|
|
||||||
DeviceProfile[] list = new[]
|
|
||||||
{
|
|
||||||
new SamsungSmartTvProfile(),
|
|
||||||
new XboxOneProfile(),
|
|
||||||
new SonyPs3Profile(),
|
|
||||||
new SonyPs4Profile(),
|
|
||||||
new SonyBravia2010Profile(),
|
|
||||||
new SonyBravia2011Profile(),
|
|
||||||
new SonyBravia2012Profile(),
|
|
||||||
new SonyBravia2013Profile(),
|
|
||||||
new SonyBravia2014Profile(),
|
|
||||||
new SonyBlurayPlayer2013(),
|
|
||||||
new SonyBlurayPlayer2014(),
|
|
||||||
new SonyBlurayPlayer2015(),
|
|
||||||
new SonyBlurayPlayer2016(),
|
|
||||||
new SonyBlurayPlayerProfile(),
|
|
||||||
new PanasonicVieraProfile(),
|
|
||||||
new WdtvLiveProfile(),
|
|
||||||
new DenonAvrProfile(),
|
|
||||||
new LinksysDMA2100Profile(),
|
|
||||||
new LgTvProfile(),
|
|
||||||
new Foobar2000Profile(),
|
|
||||||
new SharpSmartTvProfile(),
|
|
||||||
new MediaMonkeyProfile(),
|
|
||||||
// new Windows81Profile(),
|
|
||||||
// new WindowsMediaCenterProfile(),
|
|
||||||
// new WindowsPhoneProfile(),
|
|
||||||
new DirectTvProfile(),
|
|
||||||
new DishHopperJoeyProfile(),
|
|
||||||
new DefaultProfile(),
|
|
||||||
new PopcornHourProfile(),
|
|
||||||
new MarantzProfile()
|
|
||||||
};
|
|
||||||
|
|
||||||
foreach (var item in list)
|
|
||||||
{
|
|
||||||
var path = Path.Combine(_appPaths.ProgramDataPath, _fileSystem.GetValidFilename(item.Name) + ".xml");
|
|
||||||
|
|
||||||
_xmlSerializer.SerializeToFile(item, path);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Dispose()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using System.Linq;
|
|
||||||
using MediaBrowser.Model.Dlna;
|
using MediaBrowser.Model.Dlna;
|
||||||
|
|
||||||
namespace Emby.Dlna.Profiles
|
namespace Emby.Dlna.Profiles
|
||||||
|
@ -164,18 +163,5 @@ namespace Emby.Dlna.Profiles
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AddXmlRootAttribute(string name, string value)
|
|
||||||
{
|
|
||||||
var list = XmlRootAttributes.ToList();
|
|
||||||
|
|
||||||
list.Add(new XmlAttribute
|
|
||||||
{
|
|
||||||
Name = name,
|
|
||||||
Value = value
|
|
||||||
});
|
|
||||||
|
|
||||||
XmlRootAttributes = list.ToArray();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,34 +0,0 @@
|
||||||
#pragma warning disable CS1591
|
|
||||||
|
|
||||||
using MediaBrowser.Model.Dlna;
|
|
||||||
|
|
||||||
namespace Emby.Dlna.Profiles
|
|
||||||
{
|
|
||||||
[System.Xml.Serialization.XmlRoot("Profile")]
|
|
||||||
public class DenonAvrProfile : DefaultProfile
|
|
||||||
{
|
|
||||||
public DenonAvrProfile()
|
|
||||||
{
|
|
||||||
Name = "Denon AVR";
|
|
||||||
|
|
||||||
SupportedMediaTypes = "Audio";
|
|
||||||
|
|
||||||
Identification = new DeviceIdentification
|
|
||||||
{
|
|
||||||
FriendlyName = @"Denon:\[AVR:.*",
|
|
||||||
Manufacturer = "Denon"
|
|
||||||
};
|
|
||||||
|
|
||||||
DirectPlayProfiles = new[]
|
|
||||||
{
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "mp3,flac,m4a,wma",
|
|
||||||
Type = DlnaProfileType.Audio
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
ResponseProfiles = System.Array.Empty<ResponseProfile>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,129 +0,0 @@
|
||||||
#pragma warning disable CS1591
|
|
||||||
|
|
||||||
using MediaBrowser.Model.Dlna;
|
|
||||||
|
|
||||||
namespace Emby.Dlna.Profiles
|
|
||||||
{
|
|
||||||
[System.Xml.Serialization.XmlRoot("Profile")]
|
|
||||||
public class DirectTvProfile : DefaultProfile
|
|
||||||
{
|
|
||||||
public DirectTvProfile()
|
|
||||||
{
|
|
||||||
Name = "DirecTV HD-DVR";
|
|
||||||
|
|
||||||
TimelineOffsetSeconds = 10;
|
|
||||||
RequiresPlainFolders = true;
|
|
||||||
RequiresPlainVideoItems = true;
|
|
||||||
|
|
||||||
Identification = new DeviceIdentification
|
|
||||||
{
|
|
||||||
Headers = new[]
|
|
||||||
{
|
|
||||||
new HttpHeaderInfo
|
|
||||||
{
|
|
||||||
Match = HeaderMatchType.Substring,
|
|
||||||
Name = "User-Agent",
|
|
||||||
Value = "DIRECTV"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
FriendlyName = "^DIRECTV.*$"
|
|
||||||
};
|
|
||||||
|
|
||||||
DirectPlayProfiles = new[]
|
|
||||||
{
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "mpeg",
|
|
||||||
VideoCodec = "mpeg2video",
|
|
||||||
AudioCodec = "mp2",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "jpeg,jpg",
|
|
||||||
Type = DlnaProfileType.Photo
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
TranscodingProfiles = new[]
|
|
||||||
{
|
|
||||||
new TranscodingProfile
|
|
||||||
{
|
|
||||||
Container = "mpeg",
|
|
||||||
VideoCodec = "mpeg2video",
|
|
||||||
AudioCodec = "mp2",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new TranscodingProfile
|
|
||||||
{
|
|
||||||
Container = "jpeg",
|
|
||||||
Type = DlnaProfileType.Photo
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
CodecProfiles = new[]
|
|
||||||
{
|
|
||||||
new CodecProfile
|
|
||||||
{
|
|
||||||
Codec = "mpeg2video",
|
|
||||||
Type = CodecType.Video,
|
|
||||||
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Width,
|
|
||||||
Value = "1920"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Height,
|
|
||||||
Value = "1080"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.VideoFramerate,
|
|
||||||
Value = "30"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.VideoBitrate,
|
|
||||||
Value = "8192000"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
new CodecProfile
|
|
||||||
{
|
|
||||||
Codec = "mp2",
|
|
||||||
Type = CodecType.Audio,
|
|
||||||
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.AudioChannels,
|
|
||||||
Value = "2"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
SubtitleProfiles = new[]
|
|
||||||
{
|
|
||||||
new SubtitleProfile
|
|
||||||
{
|
|
||||||
Format = "srt",
|
|
||||||
Method = SubtitleDeliveryMethod.Embed
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
ResponseProfiles = System.Array.Empty<ResponseProfile>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,228 +0,0 @@
|
||||||
#pragma warning disable CS1591
|
|
||||||
|
|
||||||
using MediaBrowser.Model.Dlna;
|
|
||||||
|
|
||||||
namespace Emby.Dlna.Profiles
|
|
||||||
{
|
|
||||||
[System.Xml.Serialization.XmlRoot("Profile")]
|
|
||||||
public class DishHopperJoeyProfile : DefaultProfile
|
|
||||||
{
|
|
||||||
public DishHopperJoeyProfile()
|
|
||||||
{
|
|
||||||
Name = "Dish Hopper-Joey";
|
|
||||||
|
|
||||||
ProtocolInfo = "http-get:*:video/mp2t:*,http-get:*:video/mpeg:*,http-get:*:video/MP1S:*,http-get:*:video/mpeg2:*,http-get:*:video/mp4:*,http-get:*:video/x-matroska:*,http-get:*:audio/mpeg:*,http-get:*:audio/mpeg3:*,http-get:*:audio/mp3:*,http-get:*:audio/mp4:*,http-get:*:audio/mp4a-latm:*,http-get:*:image/jpeg:*";
|
|
||||||
|
|
||||||
Identification = new DeviceIdentification
|
|
||||||
{
|
|
||||||
Manufacturer = "Echostar Technologies LLC",
|
|
||||||
ManufacturerUrl = "http://www.echostar.com",
|
|
||||||
|
|
||||||
Headers = new[]
|
|
||||||
{
|
|
||||||
new HttpHeaderInfo
|
|
||||||
{
|
|
||||||
Match = HeaderMatchType.Substring,
|
|
||||||
Name = "User-Agent",
|
|
||||||
Value = "Zip_"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
TranscodingProfiles = new[]
|
|
||||||
{
|
|
||||||
new TranscodingProfile
|
|
||||||
{
|
|
||||||
Container = "mp3",
|
|
||||||
AudioCodec = "mp3",
|
|
||||||
Type = DlnaProfileType.Audio
|
|
||||||
},
|
|
||||||
new TranscodingProfile
|
|
||||||
{
|
|
||||||
Container = "mp4",
|
|
||||||
Type = DlnaProfileType.Video,
|
|
||||||
AudioCodec = "aac",
|
|
||||||
VideoCodec = "h264"
|
|
||||||
},
|
|
||||||
|
|
||||||
new TranscodingProfile
|
|
||||||
{
|
|
||||||
Container = "jpeg",
|
|
||||||
Type = DlnaProfileType.Photo
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
DirectPlayProfiles = new[]
|
|
||||||
{
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "mp4,mkv,mpeg,ts",
|
|
||||||
VideoCodec = "h264,mpeg2video",
|
|
||||||
AudioCodec = "mp3,ac3,aac,he-aac,pcm",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "mp3,alac,flac",
|
|
||||||
Type = DlnaProfileType.Audio
|
|
||||||
},
|
|
||||||
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "jpeg",
|
|
||||||
Type = DlnaProfileType.Photo
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
CodecProfiles = new[]
|
|
||||||
{
|
|
||||||
new CodecProfile
|
|
||||||
{
|
|
||||||
Type = CodecType.Video,
|
|
||||||
Codec = "h264",
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Width,
|
|
||||||
Value = "1920",
|
|
||||||
IsRequired = true
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Height,
|
|
||||||
Value = "1080",
|
|
||||||
IsRequired = true
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.VideoFramerate,
|
|
||||||
Value = "30",
|
|
||||||
IsRequired = true
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.VideoBitrate,
|
|
||||||
Value = "20000000",
|
|
||||||
IsRequired = true
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.VideoLevel,
|
|
||||||
Value = "41",
|
|
||||||
IsRequired = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
new CodecProfile
|
|
||||||
{
|
|
||||||
Type = CodecType.Video,
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Width,
|
|
||||||
Value = "1920",
|
|
||||||
IsRequired = true
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Height,
|
|
||||||
Value = "1080",
|
|
||||||
IsRequired = true
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.VideoFramerate,
|
|
||||||
Value = "30",
|
|
||||||
IsRequired = true
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.VideoBitrate,
|
|
||||||
Value = "20000000",
|
|
||||||
IsRequired = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
new CodecProfile
|
|
||||||
{
|
|
||||||
Type = CodecType.VideoAudio,
|
|
||||||
Codec = "ac3,he-aac",
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.AudioChannels,
|
|
||||||
Value = "6",
|
|
||||||
IsRequired = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
new CodecProfile
|
|
||||||
{
|
|
||||||
Type = CodecType.VideoAudio,
|
|
||||||
Codec = "aac",
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.AudioChannels,
|
|
||||||
Value = "2",
|
|
||||||
IsRequired = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
new CodecProfile
|
|
||||||
{
|
|
||||||
Type = CodecType.VideoAudio,
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
// The device does not have any audio switching capabilities
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.Equals,
|
|
||||||
Property = ProfileConditionValue.IsSecondaryAudio,
|
|
||||||
Value = "false"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
ResponseProfiles = new[]
|
|
||||||
{
|
|
||||||
new ResponseProfile
|
|
||||||
{
|
|
||||||
Container = "mkv,ts,mpegts",
|
|
||||||
Type = DlnaProfileType.Video,
|
|
||||||
MimeType = "video/mp4"
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
SubtitleProfiles = new[]
|
|
||||||
{
|
|
||||||
new SubtitleProfile
|
|
||||||
{
|
|
||||||
Format = "srt",
|
|
||||||
Method = SubtitleDeliveryMethod.Embed
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,78 +0,0 @@
|
||||||
#pragma warning disable CS1591
|
|
||||||
|
|
||||||
using MediaBrowser.Model.Dlna;
|
|
||||||
|
|
||||||
namespace Emby.Dlna.Profiles
|
|
||||||
{
|
|
||||||
[System.Xml.Serialization.XmlRoot("Profile")]
|
|
||||||
public class Foobar2000Profile : DefaultProfile
|
|
||||||
{
|
|
||||||
public Foobar2000Profile()
|
|
||||||
{
|
|
||||||
Name = "foobar2000";
|
|
||||||
|
|
||||||
SupportedMediaTypes = "Audio";
|
|
||||||
|
|
||||||
Identification = new DeviceIdentification
|
|
||||||
{
|
|
||||||
FriendlyName = @"foobar",
|
|
||||||
|
|
||||||
Headers = new[]
|
|
||||||
{
|
|
||||||
new HttpHeaderInfo
|
|
||||||
{
|
|
||||||
Name = "User-Agent",
|
|
||||||
Value = "foobar",
|
|
||||||
Match = HeaderMatchType.Substring
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
DirectPlayProfiles = new[]
|
|
||||||
{
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "mp3",
|
|
||||||
AudioCodec = "mp2,mp3",
|
|
||||||
Type = DlnaProfileType.Audio
|
|
||||||
},
|
|
||||||
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "mp4",
|
|
||||||
AudioCodec = "mp4",
|
|
||||||
Type = DlnaProfileType.Audio
|
|
||||||
},
|
|
||||||
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "aac,wav",
|
|
||||||
Type = DlnaProfileType.Audio
|
|
||||||
},
|
|
||||||
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "flac",
|
|
||||||
AudioCodec = "flac",
|
|
||||||
Type = DlnaProfileType.Audio
|
|
||||||
},
|
|
||||||
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "asf",
|
|
||||||
AudioCodec = "wmav2,wmapro,wmavoice",
|
|
||||||
Type = DlnaProfileType.Audio
|
|
||||||
},
|
|
||||||
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "ogg",
|
|
||||||
AudioCodec = "vorbis",
|
|
||||||
Type = DlnaProfileType.Audio
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
ResponseProfiles = System.Array.Empty<ResponseProfile>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,211 +0,0 @@
|
||||||
#pragma warning disable CS1591
|
|
||||||
|
|
||||||
using MediaBrowser.Model.Dlna;
|
|
||||||
|
|
||||||
namespace Emby.Dlna.Profiles
|
|
||||||
{
|
|
||||||
[System.Xml.Serialization.XmlRoot("Profile")]
|
|
||||||
public class LgTvProfile : DefaultProfile
|
|
||||||
{
|
|
||||||
public LgTvProfile()
|
|
||||||
{
|
|
||||||
Name = "LG Smart TV";
|
|
||||||
|
|
||||||
TimelineOffsetSeconds = 10;
|
|
||||||
|
|
||||||
Identification = new DeviceIdentification
|
|
||||||
{
|
|
||||||
FriendlyName = @"LG.*",
|
|
||||||
|
|
||||||
Headers = new[]
|
|
||||||
{
|
|
||||||
new HttpHeaderInfo
|
|
||||||
{
|
|
||||||
Name = "User-Agent",
|
|
||||||
Value = "LG",
|
|
||||||
Match = HeaderMatchType.Substring
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
TranscodingProfiles = new[]
|
|
||||||
{
|
|
||||||
new TranscodingProfile
|
|
||||||
{
|
|
||||||
Container = "mp3",
|
|
||||||
AudioCodec = "mp3",
|
|
||||||
Type = DlnaProfileType.Audio
|
|
||||||
},
|
|
||||||
new TranscodingProfile
|
|
||||||
{
|
|
||||||
Container = "ts",
|
|
||||||
AudioCodec = "ac3,aac,mp3",
|
|
||||||
VideoCodec = "h264",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new TranscodingProfile
|
|
||||||
{
|
|
||||||
Container = "jpeg",
|
|
||||||
Type = DlnaProfileType.Photo
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
DirectPlayProfiles = new[]
|
|
||||||
{
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "ts,mpegts,avi,mkv,m2ts",
|
|
||||||
VideoCodec = "h264",
|
|
||||||
AudioCodec = "aac,ac3,eac3,mp3,dca,dts",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "mp4,m4v",
|
|
||||||
VideoCodec = "h264,mpeg4",
|
|
||||||
AudioCodec = "aac,ac3,eac3,mp3,dca,dts",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "mp3",
|
|
||||||
Type = DlnaProfileType.Audio
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "jpeg",
|
|
||||||
Type = DlnaProfileType.Photo
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
ContainerProfiles = new[]
|
|
||||||
{
|
|
||||||
new ContainerProfile
|
|
||||||
{
|
|
||||||
Type = DlnaProfileType.Photo,
|
|
||||||
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Width,
|
|
||||||
Value = "1920"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Height,
|
|
||||||
Value = "1080"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
CodecProfiles = new[]
|
|
||||||
{
|
|
||||||
new CodecProfile
|
|
||||||
{
|
|
||||||
Type = CodecType.Video,
|
|
||||||
Codec = "mpeg4",
|
|
||||||
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Width,
|
|
||||||
Value = "1920"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Height,
|
|
||||||
Value = "1080"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.VideoFramerate,
|
|
||||||
Value = "30"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
new CodecProfile
|
|
||||||
{
|
|
||||||
Type = CodecType.Video,
|
|
||||||
Codec = "h264",
|
|
||||||
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Width,
|
|
||||||
Value = "1920"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Height,
|
|
||||||
Value = "1080"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.VideoLevel,
|
|
||||||
Value = "41"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
new CodecProfile
|
|
||||||
{
|
|
||||||
Type = CodecType.VideoAudio,
|
|
||||||
Codec = "ac3,eac3,aac,mp3",
|
|
||||||
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.AudioChannels,
|
|
||||||
Value = "6"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
SubtitleProfiles = new[]
|
|
||||||
{
|
|
||||||
new SubtitleProfile
|
|
||||||
{
|
|
||||||
Format = "srt",
|
|
||||||
Method = SubtitleDeliveryMethod.Embed
|
|
||||||
},
|
|
||||||
new SubtitleProfile
|
|
||||||
{
|
|
||||||
Format = "srt",
|
|
||||||
Method = SubtitleDeliveryMethod.External
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
ResponseProfiles = new[]
|
|
||||||
{
|
|
||||||
new ResponseProfile
|
|
||||||
{
|
|
||||||
Container = "m4v",
|
|
||||||
Type = DlnaProfileType.Video,
|
|
||||||
MimeType = "video/mp4"
|
|
||||||
},
|
|
||||||
new ResponseProfile
|
|
||||||
{
|
|
||||||
Container = "ts,mpegts",
|
|
||||||
Type = DlnaProfileType.Video,
|
|
||||||
MimeType = "video/mpeg"
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,55 +0,0 @@
|
||||||
#pragma warning disable CS1591
|
|
||||||
|
|
||||||
using MediaBrowser.Model.Dlna;
|
|
||||||
|
|
||||||
namespace Emby.Dlna.Profiles
|
|
||||||
{
|
|
||||||
[System.Xml.Serialization.XmlRoot("Profile")]
|
|
||||||
public class LinksysDMA2100Profile : DefaultProfile
|
|
||||||
{
|
|
||||||
public LinksysDMA2100Profile()
|
|
||||||
{
|
|
||||||
// Linksys DMA2100us does not need any transcoding of the formats we support statically
|
|
||||||
Name = "Linksys DMA2100";
|
|
||||||
|
|
||||||
Identification = new DeviceIdentification
|
|
||||||
{
|
|
||||||
ModelName = "DMA2100us"
|
|
||||||
};
|
|
||||||
|
|
||||||
DirectPlayProfiles = new[]
|
|
||||||
{
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "mp3,flac,m4a,wma",
|
|
||||||
Type = DlnaProfileType.Audio
|
|
||||||
},
|
|
||||||
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "avi,mp4,mkv,ts,mpegts,m4v",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
ResponseProfiles = new[]
|
|
||||||
{
|
|
||||||
new ResponseProfile
|
|
||||||
{
|
|
||||||
Container = "m4v",
|
|
||||||
Type = DlnaProfileType.Video,
|
|
||||||
MimeType = "video/mp4"
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
SubtitleProfiles = new[]
|
|
||||||
{
|
|
||||||
new SubtitleProfile
|
|
||||||
{
|
|
||||||
Format = "srt",
|
|
||||||
Method = SubtitleDeliveryMethod.Embed
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,43 +0,0 @@
|
||||||
#pragma warning disable CS1591
|
|
||||||
|
|
||||||
using MediaBrowser.Model.Dlna;
|
|
||||||
|
|
||||||
namespace Emby.Dlna.Profiles
|
|
||||||
{
|
|
||||||
[System.Xml.Serialization.XmlRoot("Profile")]
|
|
||||||
public class MarantzProfile : DefaultProfile
|
|
||||||
{
|
|
||||||
public MarantzProfile()
|
|
||||||
{
|
|
||||||
Name = "Marantz";
|
|
||||||
|
|
||||||
SupportedMediaTypes = "Audio";
|
|
||||||
|
|
||||||
Identification = new DeviceIdentification
|
|
||||||
{
|
|
||||||
Manufacturer = @"Marantz",
|
|
||||||
|
|
||||||
Headers = new[]
|
|
||||||
{
|
|
||||||
new HttpHeaderInfo
|
|
||||||
{
|
|
||||||
Name = "User-Agent",
|
|
||||||
Value = "Marantz",
|
|
||||||
Match = HeaderMatchType.Substring
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
DirectPlayProfiles = new[]
|
|
||||||
{
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "aac,mp3,wav,wma,flac",
|
|
||||||
Type = DlnaProfileType.Audio
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
ResponseProfiles = System.Array.Empty<ResponseProfile>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,44 +0,0 @@
|
||||||
#pragma warning disable CS1591
|
|
||||||
|
|
||||||
using System;
|
|
||||||
using MediaBrowser.Model.Dlna;
|
|
||||||
|
|
||||||
namespace Emby.Dlna.Profiles
|
|
||||||
{
|
|
||||||
[System.Xml.Serialization.XmlRoot("Profile")]
|
|
||||||
public class MediaMonkeyProfile : DefaultProfile
|
|
||||||
{
|
|
||||||
public MediaMonkeyProfile()
|
|
||||||
{
|
|
||||||
Name = "MediaMonkey";
|
|
||||||
|
|
||||||
SupportedMediaTypes = "Audio";
|
|
||||||
|
|
||||||
Identification = new DeviceIdentification
|
|
||||||
{
|
|
||||||
FriendlyName = @"MediaMonkey",
|
|
||||||
|
|
||||||
Headers = new[]
|
|
||||||
{
|
|
||||||
new HttpHeaderInfo
|
|
||||||
{
|
|
||||||
Name = "User-Agent",
|
|
||||||
Value = "MediaMonkey",
|
|
||||||
Match = HeaderMatchType.Substring
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
DirectPlayProfiles = new[]
|
|
||||||
{
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "aac,mp3,mpa,wav,wma,mp2,ogg,oga,webma,ape,opus,flac,m4a",
|
|
||||||
Type = DlnaProfileType.Audio
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
ResponseProfiles = Array.Empty<ResponseProfile>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,222 +0,0 @@
|
||||||
#pragma warning disable CS1591
|
|
||||||
|
|
||||||
using MediaBrowser.Model.Dlna;
|
|
||||||
|
|
||||||
namespace Emby.Dlna.Profiles
|
|
||||||
{
|
|
||||||
[System.Xml.Serialization.XmlRoot("Profile")]
|
|
||||||
public class PanasonicVieraProfile : DefaultProfile
|
|
||||||
{
|
|
||||||
public PanasonicVieraProfile()
|
|
||||||
{
|
|
||||||
Name = "Panasonic Viera";
|
|
||||||
|
|
||||||
Identification = new DeviceIdentification
|
|
||||||
{
|
|
||||||
FriendlyName = @"VIERA",
|
|
||||||
Manufacturer = "Panasonic",
|
|
||||||
|
|
||||||
Headers = new[]
|
|
||||||
{
|
|
||||||
new HttpHeaderInfo
|
|
||||||
{
|
|
||||||
Name = "User-Agent",
|
|
||||||
Value = "Panasonic MIL DLNA",
|
|
||||||
Match = HeaderMatchType.Substring
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
AddXmlRootAttribute("xmlns:pv", "http://www.pv.com/pvns/");
|
|
||||||
|
|
||||||
TimelineOffsetSeconds = 10;
|
|
||||||
|
|
||||||
TranscodingProfiles = new[]
|
|
||||||
{
|
|
||||||
new TranscodingProfile
|
|
||||||
{
|
|
||||||
Container = "mp3",
|
|
||||||
AudioCodec = "mp3",
|
|
||||||
Type = DlnaProfileType.Audio
|
|
||||||
},
|
|
||||||
new TranscodingProfile
|
|
||||||
{
|
|
||||||
Container = "ts",
|
|
||||||
AudioCodec = "ac3",
|
|
||||||
VideoCodec = "h264",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new TranscodingProfile
|
|
||||||
{
|
|
||||||
Container = "jpeg",
|
|
||||||
Type = DlnaProfileType.Photo
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
DirectPlayProfiles = new[]
|
|
||||||
{
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "mpeg,mpg",
|
|
||||||
VideoCodec = "mpeg2video,mpeg4",
|
|
||||||
AudioCodec = "ac3,mp3,pcm_dvd",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "mkv",
|
|
||||||
VideoCodec = "h264,mpeg2video",
|
|
||||||
AudioCodec = "aac,ac3,dca,mp3,mp2,pcm,dts",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "ts,mpegts",
|
|
||||||
VideoCodec = "h264,mpeg2video",
|
|
||||||
AudioCodec = "aac,mp3,mp2",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "mp4,m4v",
|
|
||||||
VideoCodec = "h264",
|
|
||||||
AudioCodec = "aac,ac3,mp3,pcm",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "mov",
|
|
||||||
VideoCodec = "h264",
|
|
||||||
AudioCodec = "aac,pcm",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "avi",
|
|
||||||
VideoCodec = "mpeg4",
|
|
||||||
AudioCodec = "pcm",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "flv",
|
|
||||||
VideoCodec = "h264",
|
|
||||||
AudioCodec = "aac",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "mp3",
|
|
||||||
AudioCodec = "mp3",
|
|
||||||
Type = DlnaProfileType.Audio
|
|
||||||
},
|
|
||||||
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "mp4",
|
|
||||||
AudioCodec = "aac",
|
|
||||||
Type = DlnaProfileType.Audio
|
|
||||||
},
|
|
||||||
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "jpeg",
|
|
||||||
Type = DlnaProfileType.Photo
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
ContainerProfiles = new[]
|
|
||||||
{
|
|
||||||
new ContainerProfile
|
|
||||||
{
|
|
||||||
Type = DlnaProfileType.Photo,
|
|
||||||
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Width,
|
|
||||||
Value = "1920"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Height,
|
|
||||||
Value = "1080"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
CodecProfiles = new[]
|
|
||||||
{
|
|
||||||
new CodecProfile
|
|
||||||
{
|
|
||||||
Type = CodecType.Video,
|
|
||||||
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Width,
|
|
||||||
Value = "1920"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Height,
|
|
||||||
Value = "1080"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.VideoBitDepth,
|
|
||||||
Value = "8",
|
|
||||||
IsRequired = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
SubtitleProfiles = new[]
|
|
||||||
{
|
|
||||||
new SubtitleProfile
|
|
||||||
{
|
|
||||||
Format = "srt",
|
|
||||||
Method = SubtitleDeliveryMethod.Embed
|
|
||||||
},
|
|
||||||
new SubtitleProfile
|
|
||||||
{
|
|
||||||
Format = "srt",
|
|
||||||
Method = SubtitleDeliveryMethod.External
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
ResponseProfiles = new[]
|
|
||||||
{
|
|
||||||
new ResponseProfile
|
|
||||||
{
|
|
||||||
Type = DlnaProfileType.Video,
|
|
||||||
Container = "ts,mpegts",
|
|
||||||
OrgPn = "MPEG_TS_SD_EU,MPEG_TS_SD_NA,MPEG_TS_SD_KO",
|
|
||||||
MimeType = "video/vnd.dlna.mpeg-tts"
|
|
||||||
},
|
|
||||||
new ResponseProfile
|
|
||||||
{
|
|
||||||
Container = "m4v",
|
|
||||||
Type = DlnaProfileType.Video,
|
|
||||||
MimeType = "video/mp4"
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,225 +0,0 @@
|
||||||
#pragma warning disable CS1591
|
|
||||||
|
|
||||||
using MediaBrowser.Model.Dlna;
|
|
||||||
|
|
||||||
namespace Emby.Dlna.Profiles
|
|
||||||
{
|
|
||||||
[System.Xml.Serialization.XmlRoot("Profile")]
|
|
||||||
public class PopcornHourProfile : DefaultProfile
|
|
||||||
{
|
|
||||||
public PopcornHourProfile()
|
|
||||||
{
|
|
||||||
Name = "Popcorn Hour";
|
|
||||||
|
|
||||||
TranscodingProfiles = new[]
|
|
||||||
{
|
|
||||||
new TranscodingProfile
|
|
||||||
{
|
|
||||||
Container = "mp3",
|
|
||||||
AudioCodec = "mp3",
|
|
||||||
Type = DlnaProfileType.Audio
|
|
||||||
},
|
|
||||||
|
|
||||||
new TranscodingProfile
|
|
||||||
{
|
|
||||||
Container = "mp4",
|
|
||||||
Type = DlnaProfileType.Video,
|
|
||||||
AudioCodec = "aac",
|
|
||||||
VideoCodec = "h264"
|
|
||||||
},
|
|
||||||
|
|
||||||
new TranscodingProfile
|
|
||||||
{
|
|
||||||
Container = "jpeg",
|
|
||||||
Type = DlnaProfileType.Photo
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
DirectPlayProfiles = new[]
|
|
||||||
{
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "mp4,mov,m4v",
|
|
||||||
Type = DlnaProfileType.Video,
|
|
||||||
VideoCodec = "h264,mpeg4",
|
|
||||||
AudioCodec = "aac"
|
|
||||||
},
|
|
||||||
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "ts,mpegts",
|
|
||||||
Type = DlnaProfileType.Video,
|
|
||||||
VideoCodec = "h264",
|
|
||||||
AudioCodec = "aac,ac3,eac3,mp3,mp2,pcm"
|
|
||||||
},
|
|
||||||
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "asf,wmv",
|
|
||||||
Type = DlnaProfileType.Video,
|
|
||||||
VideoCodec = "wmv3,vc1",
|
|
||||||
AudioCodec = "wmav2,wmapro"
|
|
||||||
},
|
|
||||||
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "avi",
|
|
||||||
Type = DlnaProfileType.Video,
|
|
||||||
VideoCodec = "mpeg4,msmpeg4",
|
|
||||||
AudioCodec = "mp3,ac3,eac3,mp2,pcm"
|
|
||||||
},
|
|
||||||
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "mkv",
|
|
||||||
Type = DlnaProfileType.Video,
|
|
||||||
VideoCodec = "h264",
|
|
||||||
AudioCodec = "aac,mp3,ac3,eac3,mp2,pcm"
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "aac,mp3,flac,ogg,wma,wav",
|
|
||||||
Type = DlnaProfileType.Audio
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "jpeg,gif,bmp,png",
|
|
||||||
Type = DlnaProfileType.Photo
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
CodecProfiles = new[]
|
|
||||||
{
|
|
||||||
new CodecProfile
|
|
||||||
{
|
|
||||||
Type = CodecType.Video,
|
|
||||||
Codec = "h264",
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition(ProfileConditionType.EqualsAny, ProfileConditionValue.VideoProfile, "baseline|constrained baseline"),
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Width,
|
|
||||||
Value = "1920"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Height,
|
|
||||||
Value = "1080"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.NotEquals,
|
|
||||||
Property = ProfileConditionValue.IsAnamorphic,
|
|
||||||
Value = "true",
|
|
||||||
IsRequired = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
new CodecProfile
|
|
||||||
{
|
|
||||||
Type = CodecType.Video,
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Width,
|
|
||||||
Value = "1920"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Height,
|
|
||||||
Value = "1080"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.NotEquals,
|
|
||||||
Property = ProfileConditionValue.IsAnamorphic,
|
|
||||||
Value = "true",
|
|
||||||
IsRequired = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
new CodecProfile
|
|
||||||
{
|
|
||||||
Type = CodecType.VideoAudio,
|
|
||||||
Codec = "aac",
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.AudioChannels,
|
|
||||||
Value = "2",
|
|
||||||
IsRequired = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
new CodecProfile
|
|
||||||
{
|
|
||||||
Type = CodecType.Audio,
|
|
||||||
Codec = "aac",
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.AudioChannels,
|
|
||||||
Value = "2",
|
|
||||||
IsRequired = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
new CodecProfile
|
|
||||||
{
|
|
||||||
Type = CodecType.Audio,
|
|
||||||
Codec = "mp3",
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.AudioChannels,
|
|
||||||
Value = "2",
|
|
||||||
IsRequired = false
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.AudioBitrate,
|
|
||||||
Value = "320000",
|
|
||||||
IsRequired = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
ResponseProfiles = new[]
|
|
||||||
{
|
|
||||||
new ResponseProfile
|
|
||||||
{
|
|
||||||
Container = "m4v",
|
|
||||||
Type = DlnaProfileType.Video,
|
|
||||||
MimeType = "video/mp4"
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
SubtitleProfiles = new[]
|
|
||||||
{
|
|
||||||
new SubtitleProfile
|
|
||||||
{
|
|
||||||
Format = "srt",
|
|
||||||
Method = SubtitleDeliveryMethod.Embed
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,367 +0,0 @@
|
||||||
#pragma warning disable CS1591
|
|
||||||
|
|
||||||
using MediaBrowser.Model.Dlna;
|
|
||||||
|
|
||||||
namespace Emby.Dlna.Profiles
|
|
||||||
{
|
|
||||||
[System.Xml.Serialization.XmlRoot("Profile")]
|
|
||||||
public class SamsungSmartTvProfile : DefaultProfile
|
|
||||||
{
|
|
||||||
public SamsungSmartTvProfile()
|
|
||||||
{
|
|
||||||
Name = "Samsung Smart TV";
|
|
||||||
|
|
||||||
EnableAlbumArtInDidl = true;
|
|
||||||
|
|
||||||
// Without this, older samsungs fail to browse
|
|
||||||
EnableSingleAlbumArtLimit = true;
|
|
||||||
|
|
||||||
Identification = new DeviceIdentification
|
|
||||||
{
|
|
||||||
ModelUrl = "samsung.com",
|
|
||||||
|
|
||||||
Headers = new[]
|
|
||||||
{
|
|
||||||
new HttpHeaderInfo
|
|
||||||
{
|
|
||||||
Name = "User-Agent",
|
|
||||||
Value = @"SEC_",
|
|
||||||
Match = HeaderMatchType.Substring
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
AddXmlRootAttribute("xmlns:sec", "http://www.sec.co.kr/");
|
|
||||||
|
|
||||||
TranscodingProfiles = new[]
|
|
||||||
{
|
|
||||||
new TranscodingProfile
|
|
||||||
{
|
|
||||||
Container = "mp3",
|
|
||||||
AudioCodec = "mp3",
|
|
||||||
Type = DlnaProfileType.Audio
|
|
||||||
},
|
|
||||||
new TranscodingProfile
|
|
||||||
{
|
|
||||||
Container = "ts",
|
|
||||||
AudioCodec = "ac3",
|
|
||||||
VideoCodec = "h264",
|
|
||||||
Type = DlnaProfileType.Video,
|
|
||||||
EstimateContentLength = false
|
|
||||||
},
|
|
||||||
new TranscodingProfile
|
|
||||||
{
|
|
||||||
Container = "jpeg",
|
|
||||||
Type = DlnaProfileType.Photo
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
DirectPlayProfiles = new[]
|
|
||||||
{
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "asf",
|
|
||||||
VideoCodec = "h264,mpeg4,mjpeg",
|
|
||||||
AudioCodec = "mp3,ac3,wmav2,wmapro,wmavoice",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "avi",
|
|
||||||
VideoCodec = "h264,mpeg4,mjpeg",
|
|
||||||
AudioCodec = "mp3,ac3,dca,dts",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "mkv",
|
|
||||||
VideoCodec = "h264,mpeg4,mjpeg4",
|
|
||||||
AudioCodec = "mp3,ac3,dca,aac,dts",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "mp4,m4v",
|
|
||||||
VideoCodec = "h264,mpeg4",
|
|
||||||
AudioCodec = "mp3,aac",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "3gp",
|
|
||||||
VideoCodec = "h264,mpeg4",
|
|
||||||
AudioCodec = "aac,he-aac",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "mpg,mpeg",
|
|
||||||
VideoCodec = "mpeg1video,mpeg2video,h264",
|
|
||||||
AudioCodec = "ac3,mp2,mp3,aac",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "vro,vob",
|
|
||||||
VideoCodec = "mpeg1video,mpeg2video",
|
|
||||||
AudioCodec = "ac3,mp2,mp3",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "ts",
|
|
||||||
VideoCodec = "mpeg2video,h264,vc1",
|
|
||||||
AudioCodec = "ac3,aac,mp3,eac3",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "asf",
|
|
||||||
VideoCodec = "wmv2,wmv3",
|
|
||||||
AudioCodec = "wmav2,wmavoice",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "mp3,flac",
|
|
||||||
Type = DlnaProfileType.Audio
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "jpeg",
|
|
||||||
Type = DlnaProfileType.Photo
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
ContainerProfiles = new[]
|
|
||||||
{
|
|
||||||
new ContainerProfile
|
|
||||||
{
|
|
||||||
Type = DlnaProfileType.Photo,
|
|
||||||
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Width,
|
|
||||||
Value = "1920"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Height,
|
|
||||||
Value = "1080"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
CodecProfiles = new[]
|
|
||||||
{
|
|
||||||
new CodecProfile
|
|
||||||
{
|
|
||||||
Type = CodecType.Video,
|
|
||||||
Codec = "mpeg2video",
|
|
||||||
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Width,
|
|
||||||
Value = "1920"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Height,
|
|
||||||
Value = "1080"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.VideoFramerate,
|
|
||||||
Value = "30"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.VideoBitrate,
|
|
||||||
Value = "30720000"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
new CodecProfile
|
|
||||||
{
|
|
||||||
Type = CodecType.Video,
|
|
||||||
Codec = "mpeg4",
|
|
||||||
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Width,
|
|
||||||
Value = "1920"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Height,
|
|
||||||
Value = "1080"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.VideoFramerate,
|
|
||||||
Value = "30"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.VideoBitrate,
|
|
||||||
Value = "8192000"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
new CodecProfile
|
|
||||||
{
|
|
||||||
Type = CodecType.Video,
|
|
||||||
Codec = "h264",
|
|
||||||
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Width,
|
|
||||||
Value = "1920"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Height,
|
|
||||||
Value = "1080"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.VideoFramerate,
|
|
||||||
Value = "30"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.VideoBitrate,
|
|
||||||
Value = "37500000"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.VideoLevel,
|
|
||||||
Value = "41"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
new CodecProfile
|
|
||||||
{
|
|
||||||
Type = CodecType.Video,
|
|
||||||
Codec = "wmv2,wmv3,vc1",
|
|
||||||
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Width,
|
|
||||||
Value = "1920"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Height,
|
|
||||||
Value = "1080"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.VideoFramerate,
|
|
||||||
Value = "30"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.VideoBitrate,
|
|
||||||
Value = "25600000"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
new CodecProfile
|
|
||||||
{
|
|
||||||
Type = CodecType.VideoAudio,
|
|
||||||
Codec = "wmav2,dca,aac,mp3,dts",
|
|
||||||
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.AudioChannels,
|
|
||||||
Value = "6"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
ResponseProfiles = new[]
|
|
||||||
{
|
|
||||||
new ResponseProfile
|
|
||||||
{
|
|
||||||
Container = "avi",
|
|
||||||
MimeType = "video/x-msvideo",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
|
|
||||||
new ResponseProfile
|
|
||||||
{
|
|
||||||
Container = "mkv",
|
|
||||||
MimeType = "video/x-mkv",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
|
|
||||||
new ResponseProfile
|
|
||||||
{
|
|
||||||
Container = "flac",
|
|
||||||
MimeType = "audio/x-flac",
|
|
||||||
Type = DlnaProfileType.Audio
|
|
||||||
},
|
|
||||||
new ResponseProfile
|
|
||||||
{
|
|
||||||
Container = "m4v",
|
|
||||||
Type = DlnaProfileType.Video,
|
|
||||||
MimeType = "video/mp4"
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
SubtitleProfiles = new[]
|
|
||||||
{
|
|
||||||
new SubtitleProfile
|
|
||||||
{
|
|
||||||
Format = "srt",
|
|
||||||
Method = SubtitleDeliveryMethod.Embed
|
|
||||||
},
|
|
||||||
new SubtitleProfile
|
|
||||||
{
|
|
||||||
Format = "srt",
|
|
||||||
Method = SubtitleDeliveryMethod.External,
|
|
||||||
DidlMode = "CaptionInfoEx"
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,121 +0,0 @@
|
||||||
#pragma warning disable CS1591
|
|
||||||
|
|
||||||
using MediaBrowser.Model.Dlna;
|
|
||||||
|
|
||||||
namespace Emby.Dlna.Profiles
|
|
||||||
{
|
|
||||||
[System.Xml.Serialization.XmlRoot("Profile")]
|
|
||||||
public class SharpSmartTvProfile : DefaultProfile
|
|
||||||
{
|
|
||||||
public SharpSmartTvProfile()
|
|
||||||
{
|
|
||||||
Name = "Sharp Smart TV";
|
|
||||||
|
|
||||||
RequiresPlainFolders = true;
|
|
||||||
RequiresPlainVideoItems = true;
|
|
||||||
|
|
||||||
Identification = new DeviceIdentification
|
|
||||||
{
|
|
||||||
Manufacturer = "Sharp",
|
|
||||||
|
|
||||||
Headers = new[]
|
|
||||||
{
|
|
||||||
new HttpHeaderInfo
|
|
||||||
{
|
|
||||||
Name = "User-Agent",
|
|
||||||
Value = "Sharp",
|
|
||||||
Match = HeaderMatchType.Substring
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
TranscodingProfiles = new[]
|
|
||||||
{
|
|
||||||
new TranscodingProfile
|
|
||||||
{
|
|
||||||
Container = "mp3",
|
|
||||||
AudioCodec = "mp3",
|
|
||||||
Type = DlnaProfileType.Audio
|
|
||||||
},
|
|
||||||
|
|
||||||
new TranscodingProfile
|
|
||||||
{
|
|
||||||
Container = "ts",
|
|
||||||
Type = DlnaProfileType.Video,
|
|
||||||
AudioCodec = "ac3,aac,mp3,dts,dca",
|
|
||||||
VideoCodec = "h264",
|
|
||||||
EnableMpegtsM2TsMode = true
|
|
||||||
},
|
|
||||||
|
|
||||||
new TranscodingProfile
|
|
||||||
{
|
|
||||||
Container = "jpeg",
|
|
||||||
Type = DlnaProfileType.Photo
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
DirectPlayProfiles = new[]
|
|
||||||
{
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "m4v,mkv,avi,mov,mp4",
|
|
||||||
VideoCodec = "h264,mpeg4",
|
|
||||||
AudioCodec = "aac,mp3,ac3,dts,dca",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "asf,wmv",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "mpg,mpeg",
|
|
||||||
VideoCodec = "mpeg2video",
|
|
||||||
AudioCodec = "mp3,aac",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "flv",
|
|
||||||
VideoCodec = "h264",
|
|
||||||
AudioCodec = "mp3,aac",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "mp3,wav",
|
|
||||||
Type = DlnaProfileType.Audio
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
SubtitleProfiles = new[]
|
|
||||||
{
|
|
||||||
new SubtitleProfile
|
|
||||||
{
|
|
||||||
Format = "srt",
|
|
||||||
Method = SubtitleDeliveryMethod.Embed
|
|
||||||
},
|
|
||||||
new SubtitleProfile
|
|
||||||
{
|
|
||||||
Format = "srt",
|
|
||||||
Method = SubtitleDeliveryMethod.External
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
ResponseProfiles = new[]
|
|
||||||
{
|
|
||||||
new ResponseProfile
|
|
||||||
{
|
|
||||||
Container = "m4v",
|
|
||||||
Type = DlnaProfileType.Video,
|
|
||||||
MimeType = "video/mp4"
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -1,366 +0,0 @@
|
||||||
#pragma warning disable CS1591
|
|
||||||
|
|
||||||
using MediaBrowser.Model.Dlna;
|
|
||||||
|
|
||||||
namespace Emby.Dlna.Profiles
|
|
||||||
{
|
|
||||||
[System.Xml.Serialization.XmlRoot("Profile")]
|
|
||||||
public class SonyBravia2010Profile : DefaultProfile
|
|
||||||
{
|
|
||||||
public SonyBravia2010Profile()
|
|
||||||
{
|
|
||||||
Name = "Sony Bravia (2010)";
|
|
||||||
|
|
||||||
Identification = new DeviceIdentification
|
|
||||||
{
|
|
||||||
FriendlyName = @"KDL-[0-9]{2}[EHLNPB]X[0-9][01][0-9].*",
|
|
||||||
Manufacturer = "Sony",
|
|
||||||
|
|
||||||
Headers = new[]
|
|
||||||
{
|
|
||||||
new HttpHeaderInfo
|
|
||||||
{
|
|
||||||
Name = "X-AV-Client-Info",
|
|
||||||
Value = @".*KDL-[0-9]{2}[EHLNPB]X[0-9][01][0-9].*",
|
|
||||||
Match = HeaderMatchType.Regex
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
AddXmlRootAttribute("xmlns:av", "urn:schemas-sony-com:av");
|
|
||||||
|
|
||||||
AlbumArtPn = "JPEG_TN";
|
|
||||||
|
|
||||||
ModelName = "Windows Media Player Sharing";
|
|
||||||
ModelNumber = "3.0";
|
|
||||||
ModelUrl = "http://www.microsoft.com/";
|
|
||||||
Manufacturer = "Microsoft Corporation";
|
|
||||||
ManufacturerUrl = "http://www.microsoft.com/";
|
|
||||||
SonyAggregationFlags = "10";
|
|
||||||
ProtocolInfo =
|
|
||||||
"http-get:*:audio/mpeg:DLNA.ORG_PN=MP3;DLNA.ORG_OP=01;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_SM;DLNA.ORG_OP=00;DLNA.ORG_FLAGS=00D00000000000000000000000000000,http-get:*:video/mpeg:DLNA.ORG_PN=MPEG_PS_PAL;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000";
|
|
||||||
|
|
||||||
EnableSingleAlbumArtLimit = true;
|
|
||||||
EnableAlbumArtInDidl = true;
|
|
||||||
|
|
||||||
TranscodingProfiles = new[]
|
|
||||||
{
|
|
||||||
new TranscodingProfile
|
|
||||||
{
|
|
||||||
Container = "mp3",
|
|
||||||
AudioCodec = "mp3",
|
|
||||||
Type = DlnaProfileType.Audio
|
|
||||||
},
|
|
||||||
new TranscodingProfile
|
|
||||||
{
|
|
||||||
Container = "ts",
|
|
||||||
VideoCodec = "h264",
|
|
||||||
AudioCodec = "ac3",
|
|
||||||
Type = DlnaProfileType.Video,
|
|
||||||
EnableMpegtsM2TsMode = true
|
|
||||||
},
|
|
||||||
new TranscodingProfile
|
|
||||||
{
|
|
||||||
Container = "jpeg",
|
|
||||||
Type = DlnaProfileType.Photo
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
DirectPlayProfiles = new[]
|
|
||||||
{
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "ts,mpegts",
|
|
||||||
VideoCodec = "h264",
|
|
||||||
AudioCodec = "ac3,aac,mp3",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "ts,mpegts",
|
|
||||||
VideoCodec = "mpeg1video,mpeg2video",
|
|
||||||
AudioCodec = "mp3,mp2",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "mpeg",
|
|
||||||
VideoCodec = "mpeg2video,mpeg1video",
|
|
||||||
AudioCodec = "mp3,mp2",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "mp3",
|
|
||||||
AudioCodec = "mp3",
|
|
||||||
Type = DlnaProfileType.Audio
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
ResponseProfiles = new[]
|
|
||||||
{
|
|
||||||
new ResponseProfile
|
|
||||||
{
|
|
||||||
Container = "ts,mpegts",
|
|
||||||
VideoCodec = "h264",
|
|
||||||
AudioCodec = "ac3,aac,mp3",
|
|
||||||
MimeType = "video/vnd.dlna.mpeg-tts",
|
|
||||||
OrgPn = "AVC_TS_HD_24_AC3_T,AVC_TS_HD_50_AC3_T,AVC_TS_HD_60_AC3_T,AVC_TS_HD_EU_T",
|
|
||||||
Type = DlnaProfileType.Video,
|
|
||||||
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.Equals,
|
|
||||||
Property = ProfileConditionValue.PacketLength,
|
|
||||||
Value = "192"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.Equals,
|
|
||||||
Property = ProfileConditionValue.VideoTimestamp,
|
|
||||||
Value = "Valid"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
new ResponseProfile
|
|
||||||
{
|
|
||||||
Container = "ts,mpegts",
|
|
||||||
VideoCodec = "h264",
|
|
||||||
AudioCodec = "ac3,aac,mp3",
|
|
||||||
MimeType = "video/mpeg",
|
|
||||||
OrgPn = "AVC_TS_HD_24_AC3_ISO,AVC_TS_HD_50_AC3_ISO,AVC_TS_HD_60_AC3_ISO,AVC_TS_HD_EU_ISO",
|
|
||||||
Type = DlnaProfileType.Video,
|
|
||||||
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.Equals,
|
|
||||||
Property = ProfileConditionValue.PacketLength,
|
|
||||||
Value = "188"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
new ResponseProfile
|
|
||||||
{
|
|
||||||
Container = "ts,mpegts",
|
|
||||||
VideoCodec = "h264",
|
|
||||||
AudioCodec = "ac3,aac,mp3",
|
|
||||||
MimeType = "video/vnd.dlna.mpeg-tts",
|
|
||||||
OrgPn = "AVC_TS_HD_24_AC3,AVC_TS_HD_50_AC3,AVC_TS_HD_60_AC3,AVC_TS_HD_EU",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
|
|
||||||
new ResponseProfile
|
|
||||||
{
|
|
||||||
Container = "ts,mpegts",
|
|
||||||
VideoCodec = "mpeg2video",
|
|
||||||
MimeType = "video/vnd.dlna.mpeg-tts",
|
|
||||||
OrgPn = "MPEG_TS_SD_EU,MPEG_TS_SD_NA,MPEG_TS_SD_KO",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
|
|
||||||
new ResponseProfile
|
|
||||||
{
|
|
||||||
Container = "mpeg",
|
|
||||||
VideoCodec = "mpeg1video,mpeg2video",
|
|
||||||
MimeType = "video/mpeg",
|
|
||||||
OrgPn = "MPEG_PS_NTSC,MPEG_PS_PAL",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
ContainerProfiles = new[]
|
|
||||||
{
|
|
||||||
new ContainerProfile
|
|
||||||
{
|
|
||||||
Type = DlnaProfileType.Photo,
|
|
||||||
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Width,
|
|
||||||
Value = "1920"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Height,
|
|
||||||
Value = "1080"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
CodecProfiles = new[]
|
|
||||||
{
|
|
||||||
new CodecProfile
|
|
||||||
{
|
|
||||||
Type = CodecType.Video,
|
|
||||||
Codec = "h264",
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Width,
|
|
||||||
Value = "1920"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Height,
|
|
||||||
Value = "1080"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.VideoFramerate,
|
|
||||||
Value = "30"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.VideoBitrate,
|
|
||||||
Value = "20000000"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.VideoLevel,
|
|
||||||
Value = "41"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
new CodecProfile
|
|
||||||
{
|
|
||||||
Type = CodecType.Video,
|
|
||||||
Codec = "mpeg2video",
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Width,
|
|
||||||
Value = "1920"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Height,
|
|
||||||
Value = "1080"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.VideoFramerate,
|
|
||||||
Value = "30"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.VideoBitrate,
|
|
||||||
Value = "20000000"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
new CodecProfile
|
|
||||||
{
|
|
||||||
Type = CodecType.Video,
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Width,
|
|
||||||
Value = "1920"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Height,
|
|
||||||
Value = "1080"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.VideoFramerate,
|
|
||||||
Value = "30"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
new CodecProfile
|
|
||||||
{
|
|
||||||
Type = CodecType.VideoAudio,
|
|
||||||
Codec = "ac3",
|
|
||||||
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.AudioChannels,
|
|
||||||
Value = "6"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
new CodecProfile
|
|
||||||
{
|
|
||||||
Type = CodecType.VideoAudio,
|
|
||||||
Codec = "aac",
|
|
||||||
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.AudioChannels,
|
|
||||||
Value = "2"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.NotEquals,
|
|
||||||
Property = ProfileConditionValue.AudioProfile,
|
|
||||||
Value = "he-aac"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
new CodecProfile
|
|
||||||
{
|
|
||||||
Type = CodecType.VideoAudio,
|
|
||||||
Codec = "mp3,mp2",
|
|
||||||
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.AudioChannels,
|
|
||||||
Value = "2"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
SubtitleProfiles = new[]
|
|
||||||
{
|
|
||||||
new SubtitleProfile
|
|
||||||
{
|
|
||||||
Format = "srt",
|
|
||||||
Method = SubtitleDeliveryMethod.Embed
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,389 +0,0 @@
|
||||||
#pragma warning disable CS1591
|
|
||||||
|
|
||||||
using MediaBrowser.Model.Dlna;
|
|
||||||
|
|
||||||
namespace Emby.Dlna.Profiles
|
|
||||||
{
|
|
||||||
[System.Xml.Serialization.XmlRoot("Profile")]
|
|
||||||
public class SonyBravia2011Profile : DefaultProfile
|
|
||||||
{
|
|
||||||
public SonyBravia2011Profile()
|
|
||||||
{
|
|
||||||
Name = "Sony Bravia (2011)";
|
|
||||||
|
|
||||||
Identification = new DeviceIdentification
|
|
||||||
{
|
|
||||||
FriendlyName = @"KDL-[0-9]{2}([A-Z]X[0-9]2[0-9]|CX400).*",
|
|
||||||
Manufacturer = "Sony",
|
|
||||||
|
|
||||||
Headers = new[]
|
|
||||||
{
|
|
||||||
new HttpHeaderInfo
|
|
||||||
{
|
|
||||||
Name = "X-AV-Client-Info",
|
|
||||||
Value = @".*KDL-[0-9]{2}([A-Z]X[0-9]2[0-9]|CX400).*",
|
|
||||||
Match = HeaderMatchType.Regex
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
AddXmlRootAttribute("xmlns:av", "urn:schemas-sony-com:av");
|
|
||||||
|
|
||||||
AlbumArtPn = "JPEG_TN";
|
|
||||||
|
|
||||||
ModelName = "Windows Media Player Sharing";
|
|
||||||
ModelNumber = "3.0";
|
|
||||||
ModelUrl = "http://www.microsoft.com/";
|
|
||||||
Manufacturer = "Microsoft Corporation";
|
|
||||||
ManufacturerUrl = "http://www.microsoft.com/";
|
|
||||||
SonyAggregationFlags = "10";
|
|
||||||
EnableSingleAlbumArtLimit = true;
|
|
||||||
EnableAlbumArtInDidl = true;
|
|
||||||
|
|
||||||
TranscodingProfiles = new[]
|
|
||||||
{
|
|
||||||
new TranscodingProfile
|
|
||||||
{
|
|
||||||
Container = "mp3",
|
|
||||||
AudioCodec = "mp3",
|
|
||||||
Type = DlnaProfileType.Audio
|
|
||||||
},
|
|
||||||
new TranscodingProfile
|
|
||||||
{
|
|
||||||
Container = "ts",
|
|
||||||
VideoCodec = "h264",
|
|
||||||
AudioCodec = "ac3",
|
|
||||||
Type = DlnaProfileType.Video,
|
|
||||||
EnableMpegtsM2TsMode = true
|
|
||||||
},
|
|
||||||
new TranscodingProfile
|
|
||||||
{
|
|
||||||
Container = "jpeg",
|
|
||||||
Type = DlnaProfileType.Photo
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
DirectPlayProfiles = new[]
|
|
||||||
{
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "ts,mpegts",
|
|
||||||
VideoCodec = "h264",
|
|
||||||
AudioCodec = "ac3,aac,mp3",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "ts,mpegts",
|
|
||||||
VideoCodec = "mpeg2video",
|
|
||||||
AudioCodec = "mp3",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "mp4,m4v",
|
|
||||||
VideoCodec = "h264,mpeg4",
|
|
||||||
AudioCodec = "ac3,aac,mp3",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "mpeg",
|
|
||||||
VideoCodec = "mpeg2video,mpeg1video",
|
|
||||||
AudioCodec = "mp3",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "asf",
|
|
||||||
VideoCodec = "wmv2,wmv3,vc1",
|
|
||||||
AudioCodec = "wmav2,wmapro,wmavoice",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "mp3",
|
|
||||||
AudioCodec = "mp3",
|
|
||||||
Type = DlnaProfileType.Audio
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "asf",
|
|
||||||
AudioCodec = "wmav2,wmapro,wmavoice",
|
|
||||||
Type = DlnaProfileType.Audio
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
ContainerProfiles = new[]
|
|
||||||
{
|
|
||||||
new ContainerProfile
|
|
||||||
{
|
|
||||||
Type = DlnaProfileType.Photo,
|
|
||||||
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Width,
|
|
||||||
Value = "1920"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Height,
|
|
||||||
Value = "1080"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
ResponseProfiles = new[]
|
|
||||||
{
|
|
||||||
new ResponseProfile
|
|
||||||
{
|
|
||||||
Container = "ts,mpegts",
|
|
||||||
VideoCodec = "h264",
|
|
||||||
AudioCodec = "ac3,aac,mp3",
|
|
||||||
MimeType = "video/vnd.dlna.mpeg-tts",
|
|
||||||
OrgPn = "AVC_TS_HD_24_AC3_T,AVC_TS_HD_50_AC3_T,AVC_TS_HD_60_AC3_T,AVC_TS_HD_EU_T",
|
|
||||||
Type = DlnaProfileType.Video,
|
|
||||||
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.Equals,
|
|
||||||
Property = ProfileConditionValue.PacketLength,
|
|
||||||
Value = "192"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.Equals,
|
|
||||||
Property = ProfileConditionValue.VideoTimestamp,
|
|
||||||
Value = "Valid"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
new ResponseProfile
|
|
||||||
{
|
|
||||||
Container = "ts,mpegts",
|
|
||||||
VideoCodec = "h264",
|
|
||||||
AudioCodec = "ac3,aac,mp3",
|
|
||||||
MimeType = "video/mpeg",
|
|
||||||
OrgPn = "AVC_TS_HD_24_AC3_ISO,AVC_TS_HD_50_AC3_ISO,AVC_TS_HD_60_AC3_ISO,AVC_TS_HD_EU_ISO",
|
|
||||||
Type = DlnaProfileType.Video,
|
|
||||||
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.Equals,
|
|
||||||
Property = ProfileConditionValue.PacketLength,
|
|
||||||
Value = "188"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
new ResponseProfile
|
|
||||||
{
|
|
||||||
Container = "ts,mpegts",
|
|
||||||
VideoCodec = "h264",
|
|
||||||
AudioCodec = "ac3,aac,mp3",
|
|
||||||
MimeType = "video/vnd.dlna.mpeg-tts",
|
|
||||||
OrgPn = "AVC_TS_HD_24_AC3,AVC_TS_HD_50_AC3,AVC_TS_HD_60_AC3,AVC_TS_HD_EU",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
|
|
||||||
new ResponseProfile
|
|
||||||
{
|
|
||||||
Container = "ts,mpegts",
|
|
||||||
VideoCodec = "mpeg2video",
|
|
||||||
MimeType = "video/vnd.dlna.mpeg-tts",
|
|
||||||
OrgPn = "MPEG_TS_SD_EU,MPEG_TS_SD_NA,MPEG_TS_SD_KO",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
|
|
||||||
new ResponseProfile
|
|
||||||
{
|
|
||||||
Container = "mpeg",
|
|
||||||
VideoCodec = "mpeg1video,mpeg2video",
|
|
||||||
MimeType = "video/mpeg",
|
|
||||||
OrgPn = "MPEG_PS_NTSC,MPEG_PS_PAL",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new ResponseProfile
|
|
||||||
{
|
|
||||||
Container = "m4v",
|
|
||||||
Type = DlnaProfileType.Video,
|
|
||||||
MimeType = "video/mp4"
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
CodecProfiles = new[]
|
|
||||||
{
|
|
||||||
new CodecProfile
|
|
||||||
{
|
|
||||||
Type = CodecType.Video,
|
|
||||||
Codec = "h264",
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Width,
|
|
||||||
Value = "1920"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Height,
|
|
||||||
Value = "1080"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.VideoFramerate,
|
|
||||||
Value = "30"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.VideoBitrate,
|
|
||||||
Value = "20000000"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.VideoLevel,
|
|
||||||
Value = "41"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
new CodecProfile
|
|
||||||
{
|
|
||||||
Type = CodecType.Video,
|
|
||||||
Codec = "mpeg2video",
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Width,
|
|
||||||
Value = "1920"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Height,
|
|
||||||
Value = "1080"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.VideoFramerate,
|
|
||||||
Value = "30"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.VideoBitrate,
|
|
||||||
Value = "20000000"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
new CodecProfile
|
|
||||||
{
|
|
||||||
Type = CodecType.Video,
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Width,
|
|
||||||
Value = "1920"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Height,
|
|
||||||
Value = "1080"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.VideoFramerate,
|
|
||||||
Value = "30"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
new CodecProfile
|
|
||||||
{
|
|
||||||
Type = CodecType.VideoAudio,
|
|
||||||
Codec = "ac3",
|
|
||||||
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.AudioChannels,
|
|
||||||
Value = "6"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
new CodecProfile
|
|
||||||
{
|
|
||||||
Type = CodecType.VideoAudio,
|
|
||||||
Codec = "aac",
|
|
||||||
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.AudioChannels,
|
|
||||||
Value = "2"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.NotEquals,
|
|
||||||
Property = ProfileConditionValue.AudioProfile,
|
|
||||||
Value = "he-aac"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
new CodecProfile
|
|
||||||
{
|
|
||||||
Type = CodecType.VideoAudio,
|
|
||||||
Codec = "mp3,mp2",
|
|
||||||
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.AudioChannels,
|
|
||||||
Value = "2"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
SubtitleProfiles = new[]
|
|
||||||
{
|
|
||||||
new SubtitleProfile
|
|
||||||
{
|
|
||||||
Format = "srt",
|
|
||||||
Method = SubtitleDeliveryMethod.Embed
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,307 +0,0 @@
|
||||||
#pragma warning disable CS1591
|
|
||||||
|
|
||||||
using MediaBrowser.Model.Dlna;
|
|
||||||
|
|
||||||
namespace Emby.Dlna.Profiles
|
|
||||||
{
|
|
||||||
[System.Xml.Serialization.XmlRoot("Profile")]
|
|
||||||
public class SonyBravia2012Profile : DefaultProfile
|
|
||||||
{
|
|
||||||
public SonyBravia2012Profile()
|
|
||||||
{
|
|
||||||
Name = "Sony Bravia (2012)";
|
|
||||||
|
|
||||||
Identification = new DeviceIdentification
|
|
||||||
{
|
|
||||||
FriendlyName = @"KDL-[0-9]{2}[A-Z]X[0-9]5([0-9]|G).*",
|
|
||||||
Manufacturer = "Sony",
|
|
||||||
|
|
||||||
Headers = new[]
|
|
||||||
{
|
|
||||||
new HttpHeaderInfo
|
|
||||||
{
|
|
||||||
Name = "X-AV-Client-Info",
|
|
||||||
Value = @".*KDL-[0-9]{2}[A-Z]X[0-9]5([0-9]|G).*",
|
|
||||||
Match = HeaderMatchType.Regex
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
AddXmlRootAttribute("xmlns:av", "urn:schemas-sony-com:av");
|
|
||||||
|
|
||||||
AlbumArtPn = "JPEG_TN";
|
|
||||||
|
|
||||||
ModelName = "Windows Media Player Sharing";
|
|
||||||
ModelNumber = "3.0";
|
|
||||||
ModelUrl = "http://www.microsoft.com/";
|
|
||||||
Manufacturer = "Microsoft Corporation";
|
|
||||||
ManufacturerUrl = "http://www.microsoft.com/";
|
|
||||||
SonyAggregationFlags = "10";
|
|
||||||
EnableSingleAlbumArtLimit = true;
|
|
||||||
EnableAlbumArtInDidl = true;
|
|
||||||
|
|
||||||
TranscodingProfiles = new[]
|
|
||||||
{
|
|
||||||
new TranscodingProfile
|
|
||||||
{
|
|
||||||
Container = "mp3",
|
|
||||||
AudioCodec = "mp3",
|
|
||||||
Type = DlnaProfileType.Audio
|
|
||||||
},
|
|
||||||
new TranscodingProfile
|
|
||||||
{
|
|
||||||
Container = "ts",
|
|
||||||
VideoCodec = "h264",
|
|
||||||
AudioCodec = "ac3",
|
|
||||||
Type = DlnaProfileType.Video,
|
|
||||||
EnableMpegtsM2TsMode = true
|
|
||||||
},
|
|
||||||
new TranscodingProfile
|
|
||||||
{
|
|
||||||
Container = "jpeg",
|
|
||||||
Type = DlnaProfileType.Photo
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
DirectPlayProfiles = new[]
|
|
||||||
{
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "ts,mpegts",
|
|
||||||
VideoCodec = "h264",
|
|
||||||
AudioCodec = "ac3,aac,mp3",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "ts,mpegts",
|
|
||||||
VideoCodec = "mpeg2video",
|
|
||||||
AudioCodec = "mp3,mp2",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "mp4,m4v",
|
|
||||||
VideoCodec = "h264,mpeg4",
|
|
||||||
AudioCodec = "ac3,aac,mp3,mp2",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "avi",
|
|
||||||
VideoCodec = "mpeg4",
|
|
||||||
AudioCodec = "ac3,mp3",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "mpeg",
|
|
||||||
VideoCodec = "mpeg2video,mpeg1video",
|
|
||||||
AudioCodec = "mp3,mp2",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "asf",
|
|
||||||
VideoCodec = "wmv2,wmv3,vc1",
|
|
||||||
AudioCodec = "wmav2,wmapro,wmavoice",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "mp3",
|
|
||||||
AudioCodec = "mp3",
|
|
||||||
Type = DlnaProfileType.Audio
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "asf",
|
|
||||||
AudioCodec = "wmav2,wmapro,wmavoice",
|
|
||||||
Type = DlnaProfileType.Audio
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "jpeg",
|
|
||||||
Type = DlnaProfileType.Photo
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
ResponseProfiles = new[]
|
|
||||||
{
|
|
||||||
new ResponseProfile
|
|
||||||
{
|
|
||||||
Container = "ts,mpegts",
|
|
||||||
VideoCodec = "h264",
|
|
||||||
AudioCodec = "ac3,aac,mp3",
|
|
||||||
MimeType = "video/vnd.dlna.mpeg-tts",
|
|
||||||
OrgPn = "AVC_TS_HD_24_AC3_T,AVC_TS_HD_50_AC3_T,AVC_TS_HD_60_AC3_T,AVC_TS_HD_EU_T",
|
|
||||||
Type = DlnaProfileType.Video,
|
|
||||||
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.Equals,
|
|
||||||
Property = ProfileConditionValue.PacketLength,
|
|
||||||
Value = "192"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.Equals,
|
|
||||||
Property = ProfileConditionValue.VideoTimestamp,
|
|
||||||
Value = "Valid"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
new ResponseProfile
|
|
||||||
{
|
|
||||||
Container = "ts,mpegts",
|
|
||||||
VideoCodec = "h264",
|
|
||||||
AudioCodec = "ac3,aac,mp3",
|
|
||||||
MimeType = "video/mpeg",
|
|
||||||
OrgPn = "AVC_TS_HD_24_AC3_ISO,AVC_TS_HD_50_AC3_ISO,AVC_TS_HD_60_AC3_ISO,AVC_TS_HD_EU_ISO",
|
|
||||||
Type = DlnaProfileType.Video,
|
|
||||||
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.Equals,
|
|
||||||
Property = ProfileConditionValue.PacketLength,
|
|
||||||
Value = "188"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
new ResponseProfile
|
|
||||||
{
|
|
||||||
Container = "ts,mpegts",
|
|
||||||
VideoCodec = "h264",
|
|
||||||
AudioCodec = "ac3,aac,mp3",
|
|
||||||
MimeType = "video/vnd.dlna.mpeg-tts",
|
|
||||||
OrgPn = "AVC_TS_HD_24_AC3,AVC_TS_HD_50_AC3,AVC_TS_HD_60_AC3,AVC_TS_HD_EU",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
|
|
||||||
new ResponseProfile
|
|
||||||
{
|
|
||||||
Container = "ts,mpegts",
|
|
||||||
VideoCodec = "mpeg2video",
|
|
||||||
MimeType = "video/vnd.dlna.mpeg-tts",
|
|
||||||
OrgPn = "MPEG_TS_SD_EU,MPEG_TS_SD_NA,MPEG_TS_SD_KO",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
|
|
||||||
new ResponseProfile
|
|
||||||
{
|
|
||||||
Container = "mpeg",
|
|
||||||
VideoCodec = "mpeg1video,mpeg2video",
|
|
||||||
MimeType = "video/mpeg",
|
|
||||||
OrgPn = "MPEG_PS_NTSC,MPEG_PS_PAL",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new ResponseProfile
|
|
||||||
{
|
|
||||||
Container = "m4v",
|
|
||||||
Type = DlnaProfileType.Video,
|
|
||||||
MimeType = "video/mp4"
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
ContainerProfiles = new[]
|
|
||||||
{
|
|
||||||
new ContainerProfile
|
|
||||||
{
|
|
||||||
Type = DlnaProfileType.Photo,
|
|
||||||
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Width,
|
|
||||||
Value = "1920"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Height,
|
|
||||||
Value = "1080"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
CodecProfiles = new[]
|
|
||||||
{
|
|
||||||
new CodecProfile
|
|
||||||
{
|
|
||||||
Type = CodecType.Video,
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Width,
|
|
||||||
Value = "1920"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Height,
|
|
||||||
Value = "1080"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.VideoFramerate,
|
|
||||||
Value = "30"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
new CodecProfile
|
|
||||||
{
|
|
||||||
Type = CodecType.VideoAudio,
|
|
||||||
Codec = "ac3",
|
|
||||||
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.AudioChannels,
|
|
||||||
Value = "6"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
new CodecProfile
|
|
||||||
{
|
|
||||||
Type = CodecType.VideoAudio,
|
|
||||||
Codec = "mp3,mp2",
|
|
||||||
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.AudioChannels,
|
|
||||||
Value = "2"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
SubtitleProfiles = new[]
|
|
||||||
{
|
|
||||||
new SubtitleProfile
|
|
||||||
{
|
|
||||||
Format = "srt",
|
|
||||||
Method = SubtitleDeliveryMethod.Embed
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,324 +0,0 @@
|
||||||
#pragma warning disable CS1591
|
|
||||||
|
|
||||||
using MediaBrowser.Model.Dlna;
|
|
||||||
|
|
||||||
namespace Emby.Dlna.Profiles
|
|
||||||
{
|
|
||||||
[System.Xml.Serialization.XmlRoot("Profile")]
|
|
||||||
public class SonyBravia2013Profile : DefaultProfile
|
|
||||||
{
|
|
||||||
public SonyBravia2013Profile()
|
|
||||||
{
|
|
||||||
Name = "Sony Bravia (2013)";
|
|
||||||
|
|
||||||
Identification = new DeviceIdentification
|
|
||||||
{
|
|
||||||
FriendlyName = @"KDL-[0-9]{2}[WR][5689][0-9]{2}A.*",
|
|
||||||
Manufacturer = "Sony",
|
|
||||||
|
|
||||||
Headers = new[]
|
|
||||||
{
|
|
||||||
new HttpHeaderInfo
|
|
||||||
{
|
|
||||||
Name = "X-AV-Client-Info",
|
|
||||||
Value = @".*KDL-[0-9]{2}[WR][5689][0-9]{2}A.*",
|
|
||||||
Match = HeaderMatchType.Regex
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
AddXmlRootAttribute("xmlns:av", "urn:schemas-sony-com:av");
|
|
||||||
|
|
||||||
AlbumArtPn = "JPEG_TN";
|
|
||||||
|
|
||||||
ModelName = "Windows Media Player Sharing";
|
|
||||||
ModelNumber = "3.0";
|
|
||||||
ModelUrl = "http://www.microsoft.com/";
|
|
||||||
Manufacturer = "Microsoft Corporation";
|
|
||||||
ManufacturerUrl = "http://www.microsoft.com/";
|
|
||||||
SonyAggregationFlags = "10";
|
|
||||||
EnableSingleAlbumArtLimit = true;
|
|
||||||
EnableAlbumArtInDidl = true;
|
|
||||||
|
|
||||||
TranscodingProfiles = new[]
|
|
||||||
{
|
|
||||||
new TranscodingProfile
|
|
||||||
{
|
|
||||||
Container = "mp3",
|
|
||||||
Type = DlnaProfileType.Audio
|
|
||||||
},
|
|
||||||
new TranscodingProfile
|
|
||||||
{
|
|
||||||
Container = "ts",
|
|
||||||
VideoCodec = "h264",
|
|
||||||
AudioCodec = "ac3",
|
|
||||||
Type = DlnaProfileType.Video,
|
|
||||||
EnableMpegtsM2TsMode = true
|
|
||||||
},
|
|
||||||
new TranscodingProfile
|
|
||||||
{
|
|
||||||
Container = "jpeg",
|
|
||||||
Type = DlnaProfileType.Photo
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
DirectPlayProfiles = new[]
|
|
||||||
{
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "ts,mpegts",
|
|
||||||
VideoCodec = "h264",
|
|
||||||
AudioCodec = "ac3,eac3,aac,mp3",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "ts,mpegts",
|
|
||||||
VideoCodec = "mpeg2video",
|
|
||||||
AudioCodec = "mp3,mp2",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "mp4,m4v",
|
|
||||||
VideoCodec = "h264,mpeg4",
|
|
||||||
AudioCodec = "ac3,eac3,aac,mp3,mp2",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "mov",
|
|
||||||
VideoCodec = "h264,mpeg4,mjpeg",
|
|
||||||
AudioCodec = "ac3,eac3,aac,mp3,mp2",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "mkv",
|
|
||||||
VideoCodec = "h264,mpeg4,vp8",
|
|
||||||
AudioCodec = "ac3,eac3,aac,mp3,mp2,pcm,vorbis",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "avi",
|
|
||||||
VideoCodec = "mpeg4",
|
|
||||||
AudioCodec = "ac3,eac3,mp3",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "avi",
|
|
||||||
VideoCodec = "mjpeg",
|
|
||||||
AudioCodec = "pcm",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "mpeg",
|
|
||||||
VideoCodec = "mpeg2video,mpeg1video",
|
|
||||||
AudioCodec = "mp3,mp2",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "asf",
|
|
||||||
VideoCodec = "wmv2,wmv3,vc1",
|
|
||||||
AudioCodec = "wmav2,wmapro,wmavoice",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "mp3",
|
|
||||||
AudioCodec = "mp3",
|
|
||||||
Type = DlnaProfileType.Audio
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "mp4",
|
|
||||||
AudioCodec = "aac",
|
|
||||||
Type = DlnaProfileType.Audio
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "wav",
|
|
||||||
AudioCodec = "pcm",
|
|
||||||
Type = DlnaProfileType.Audio
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "asf",
|
|
||||||
AudioCodec = "wmav2,wmapro,wmavoice",
|
|
||||||
Type = DlnaProfileType.Audio
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "jpeg",
|
|
||||||
Type = DlnaProfileType.Photo
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
ContainerProfiles = new[]
|
|
||||||
{
|
|
||||||
new ContainerProfile
|
|
||||||
{
|
|
||||||
Type = DlnaProfileType.Photo,
|
|
||||||
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Width,
|
|
||||||
Value = "1920"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Height,
|
|
||||||
Value = "1080"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
ResponseProfiles = new[]
|
|
||||||
{
|
|
||||||
new ResponseProfile
|
|
||||||
{
|
|
||||||
Container = "ts,mpegts",
|
|
||||||
VideoCodec = "h264",
|
|
||||||
AudioCodec = "ac3,aac,mp3",
|
|
||||||
MimeType = "video/vnd.dlna.mpeg-tts",
|
|
||||||
OrgPn = "AVC_TS_HD_24_AC3_T,AVC_TS_HD_50_AC3_T,AVC_TS_HD_60_AC3_T,AVC_TS_HD_EU_T",
|
|
||||||
Type = DlnaProfileType.Video,
|
|
||||||
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.Equals,
|
|
||||||
Property = ProfileConditionValue.PacketLength,
|
|
||||||
Value = "192"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.Equals,
|
|
||||||
Property = ProfileConditionValue.VideoTimestamp,
|
|
||||||
Value = "Valid"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
new ResponseProfile
|
|
||||||
{
|
|
||||||
Container = "ts,mpegts",
|
|
||||||
VideoCodec = "h264",
|
|
||||||
AudioCodec = "ac3,aac,mp3",
|
|
||||||
MimeType = "video/mpeg",
|
|
||||||
OrgPn = "AVC_TS_HD_24_AC3_ISO,AVC_TS_HD_50_AC3_ISO,AVC_TS_HD_60_AC3_ISO,AVC_TS_HD_EU_ISO",
|
|
||||||
Type = DlnaProfileType.Video,
|
|
||||||
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.Equals,
|
|
||||||
Property = ProfileConditionValue.PacketLength,
|
|
||||||
Value = "188"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
new ResponseProfile
|
|
||||||
{
|
|
||||||
Container = "ts,mpegts",
|
|
||||||
VideoCodec = "h264",
|
|
||||||
AudioCodec = "ac3,aac,mp3",
|
|
||||||
MimeType = "video/vnd.dlna.mpeg-tts",
|
|
||||||
OrgPn = "AVC_TS_HD_24_AC3,AVC_TS_HD_50_AC3,AVC_TS_HD_60_AC3,AVC_TS_HD_EU",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
|
|
||||||
new ResponseProfile
|
|
||||||
{
|
|
||||||
Container = "ts,mpegts",
|
|
||||||
VideoCodec = "mpeg2video",
|
|
||||||
MimeType = "video/vnd.dlna.mpeg-tts",
|
|
||||||
OrgPn = "MPEG_TS_SD_EU,MPEG_TS_SD_NA,MPEG_TS_SD_KO",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
|
|
||||||
new ResponseProfile
|
|
||||||
{
|
|
||||||
Container = "mpeg",
|
|
||||||
VideoCodec = "mpeg1video,mpeg2video",
|
|
||||||
MimeType = "video/mpeg",
|
|
||||||
OrgPn = "MPEG_PS_NTSC,MPEG_PS_PAL",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new ResponseProfile
|
|
||||||
{
|
|
||||||
Container = "m4v",
|
|
||||||
Type = DlnaProfileType.Video,
|
|
||||||
MimeType = "video/mp4"
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
CodecProfiles = new[]
|
|
||||||
{
|
|
||||||
new CodecProfile
|
|
||||||
{
|
|
||||||
Type = CodecType.Video,
|
|
||||||
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Width,
|
|
||||||
Value = "1920"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Height,
|
|
||||||
Value = "1080"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.VideoFramerate,
|
|
||||||
Value = "30"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
new CodecProfile
|
|
||||||
{
|
|
||||||
Type = CodecType.VideoAudio,
|
|
||||||
Codec = "mp3,mp2",
|
|
||||||
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.AudioChannels,
|
|
||||||
Value = "2"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
SubtitleProfiles = new[]
|
|
||||||
{
|
|
||||||
new SubtitleProfile
|
|
||||||
{
|
|
||||||
Format = "srt",
|
|
||||||
Method = SubtitleDeliveryMethod.Embed
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,324 +0,0 @@
|
||||||
#pragma warning disable CS1591
|
|
||||||
|
|
||||||
using MediaBrowser.Model.Dlna;
|
|
||||||
|
|
||||||
namespace Emby.Dlna.Profiles
|
|
||||||
{
|
|
||||||
[System.Xml.Serialization.XmlRoot("Profile")]
|
|
||||||
public class SonyBravia2014Profile : DefaultProfile
|
|
||||||
{
|
|
||||||
public SonyBravia2014Profile()
|
|
||||||
{
|
|
||||||
Name = "Sony Bravia (2014)";
|
|
||||||
|
|
||||||
Identification = new DeviceIdentification
|
|
||||||
{
|
|
||||||
FriendlyName = @"(KDL-[0-9]{2}W[5-9][0-9]{2}B|KDL-[0-9]{2}R480|XBR-[0-9]{2}X[89][0-9]{2}B|KD-[0-9]{2}[SX][89][0-9]{3}B).*",
|
|
||||||
Manufacturer = "Sony",
|
|
||||||
|
|
||||||
Headers = new[]
|
|
||||||
{
|
|
||||||
new HttpHeaderInfo
|
|
||||||
{
|
|
||||||
Name = "X-AV-Client-Info",
|
|
||||||
Value = @".*(KDL-[0-9]{2}W[5-9][0-9]{2}B|KDL-[0-9]{2}R480|XBR-[0-9]{2}X[89][0-9]{2}B|KD-[0-9]{2}[SX][89][0-9]{3}B).*",
|
|
||||||
Match = HeaderMatchType.Regex
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
AddXmlRootAttribute("xmlns:av", "urn:schemas-sony-com:av");
|
|
||||||
|
|
||||||
AlbumArtPn = "JPEG_TN";
|
|
||||||
|
|
||||||
ModelName = "Windows Media Player Sharing";
|
|
||||||
ModelNumber = "3.0";
|
|
||||||
ModelUrl = "http://www.microsoft.com/";
|
|
||||||
Manufacturer = "Microsoft Corporation";
|
|
||||||
ManufacturerUrl = "http://www.microsoft.com/";
|
|
||||||
SonyAggregationFlags = "10";
|
|
||||||
EnableSingleAlbumArtLimit = true;
|
|
||||||
EnableAlbumArtInDidl = true;
|
|
||||||
|
|
||||||
TranscodingProfiles = new[]
|
|
||||||
{
|
|
||||||
new TranscodingProfile
|
|
||||||
{
|
|
||||||
Container = "mp3",
|
|
||||||
Type = DlnaProfileType.Audio
|
|
||||||
},
|
|
||||||
new TranscodingProfile
|
|
||||||
{
|
|
||||||
Container = "ts",
|
|
||||||
VideoCodec = "h264",
|
|
||||||
AudioCodec = "ac3",
|
|
||||||
Type = DlnaProfileType.Video,
|
|
||||||
EnableMpegtsM2TsMode = true
|
|
||||||
},
|
|
||||||
new TranscodingProfile
|
|
||||||
{
|
|
||||||
Container = "jpeg",
|
|
||||||
Type = DlnaProfileType.Photo
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
DirectPlayProfiles = new[]
|
|
||||||
{
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "ts,mpegts",
|
|
||||||
VideoCodec = "h264",
|
|
||||||
AudioCodec = "ac3,eac3,aac,mp3",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "ts,mpegts",
|
|
||||||
VideoCodec = "mpeg2video",
|
|
||||||
AudioCodec = "mp3,mp2",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "mp4,m4v",
|
|
||||||
VideoCodec = "h264,mpeg4",
|
|
||||||
AudioCodec = "ac3,eac3,aac,mp3,mp2",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "mov",
|
|
||||||
VideoCodec = "h264,mpeg4,mjpeg",
|
|
||||||
AudioCodec = "ac3,eac3,aac,mp3,mp2",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "mkv",
|
|
||||||
VideoCodec = "h264,mpeg4,vp8",
|
|
||||||
AudioCodec = "ac3,eac3,aac,mp3,mp2,pcm,vorbis",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "avi",
|
|
||||||
VideoCodec = "mpeg4",
|
|
||||||
AudioCodec = "ac3,eac3,mp3",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "avi",
|
|
||||||
VideoCodec = "mjpeg",
|
|
||||||
AudioCodec = "pcm",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "mpeg",
|
|
||||||
VideoCodec = "mpeg2video,mpeg1video",
|
|
||||||
AudioCodec = "mp3,mp2",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "asf",
|
|
||||||
VideoCodec = "wmv2,wmv3,vc1",
|
|
||||||
AudioCodec = "wmav2,wmapro,wmavoice",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "mp3",
|
|
||||||
AudioCodec = "mp3",
|
|
||||||
Type = DlnaProfileType.Audio
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "mp4",
|
|
||||||
AudioCodec = "aac",
|
|
||||||
Type = DlnaProfileType.Audio
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "wav",
|
|
||||||
AudioCodec = "pcm",
|
|
||||||
Type = DlnaProfileType.Audio
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "asf",
|
|
||||||
AudioCodec = "wmav2,wmapro,wmavoice",
|
|
||||||
Type = DlnaProfileType.Audio
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "jpeg",
|
|
||||||
Type = DlnaProfileType.Photo
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
ContainerProfiles = new[]
|
|
||||||
{
|
|
||||||
new ContainerProfile
|
|
||||||
{
|
|
||||||
Type = DlnaProfileType.Photo,
|
|
||||||
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Width,
|
|
||||||
Value = "1920"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Height,
|
|
||||||
Value = "1080"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
ResponseProfiles = new[]
|
|
||||||
{
|
|
||||||
new ResponseProfile
|
|
||||||
{
|
|
||||||
Container = "ts,mpegts",
|
|
||||||
VideoCodec = "h264",
|
|
||||||
AudioCodec = "ac3,aac,mp3",
|
|
||||||
MimeType = "video/vnd.dlna.mpeg-tts",
|
|
||||||
OrgPn = "AVC_TS_HD_24_AC3_T,AVC_TS_HD_50_AC3_T,AVC_TS_HD_60_AC3_T,AVC_TS_HD_EU_T",
|
|
||||||
Type = DlnaProfileType.Video,
|
|
||||||
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.Equals,
|
|
||||||
Property = ProfileConditionValue.PacketLength,
|
|
||||||
Value = "192"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.Equals,
|
|
||||||
Property = ProfileConditionValue.VideoTimestamp,
|
|
||||||
Value = "Valid"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
new ResponseProfile
|
|
||||||
{
|
|
||||||
Container = "ts,mpegts",
|
|
||||||
VideoCodec = "h264",
|
|
||||||
AudioCodec = "ac3,aac,mp3",
|
|
||||||
MimeType = "video/mpeg",
|
|
||||||
OrgPn = "AVC_TS_HD_24_AC3_ISO,AVC_TS_HD_50_AC3_ISO,AVC_TS_HD_60_AC3_ISO,AVC_TS_HD_EU_ISO",
|
|
||||||
Type = DlnaProfileType.Video,
|
|
||||||
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.Equals,
|
|
||||||
Property = ProfileConditionValue.PacketLength,
|
|
||||||
Value = "188"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
new ResponseProfile
|
|
||||||
{
|
|
||||||
Container = "ts,mpegts",
|
|
||||||
VideoCodec = "h264",
|
|
||||||
AudioCodec = "ac3,aac,mp3",
|
|
||||||
MimeType = "video/vnd.dlna.mpeg-tts",
|
|
||||||
OrgPn = "AVC_TS_HD_24_AC3,AVC_TS_HD_50_AC3,AVC_TS_HD_60_AC3,AVC_TS_HD_EU",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
|
|
||||||
new ResponseProfile
|
|
||||||
{
|
|
||||||
Container = "ts,mpegts",
|
|
||||||
VideoCodec = "mpeg2video",
|
|
||||||
MimeType = "video/vnd.dlna.mpeg-tts",
|
|
||||||
OrgPn = "MPEG_TS_SD_EU,MPEG_TS_SD_NA,MPEG_TS_SD_KO",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
|
|
||||||
new ResponseProfile
|
|
||||||
{
|
|
||||||
Container = "mpeg",
|
|
||||||
VideoCodec = "mpeg1video,mpeg2video",
|
|
||||||
MimeType = "video/mpeg",
|
|
||||||
OrgPn = "MPEG_PS_NTSC,MPEG_PS_PAL",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new ResponseProfile
|
|
||||||
{
|
|
||||||
Container = "m4v",
|
|
||||||
Type = DlnaProfileType.Video,
|
|
||||||
MimeType = "video/mp4"
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
CodecProfiles = new[]
|
|
||||||
{
|
|
||||||
new CodecProfile
|
|
||||||
{
|
|
||||||
Type = CodecType.Video,
|
|
||||||
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Width,
|
|
||||||
Value = "1920"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Height,
|
|
||||||
Value = "1080"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.VideoFramerate,
|
|
||||||
Value = "30"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
new CodecProfile
|
|
||||||
{
|
|
||||||
Type = CodecType.VideoAudio,
|
|
||||||
Codec = "mp3,mp2",
|
|
||||||
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.AudioChannels,
|
|
||||||
Value = "2"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
SubtitleProfiles = new[]
|
|
||||||
{
|
|
||||||
new SubtitleProfile
|
|
||||||
{
|
|
||||||
Format = "srt",
|
|
||||||
Method = SubtitleDeliveryMethod.Embed
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,269 +0,0 @@
|
||||||
#pragma warning disable CS1591
|
|
||||||
|
|
||||||
using MediaBrowser.Model.Dlna;
|
|
||||||
|
|
||||||
namespace Emby.Dlna.Profiles
|
|
||||||
{
|
|
||||||
[System.Xml.Serialization.XmlRoot("Profile")]
|
|
||||||
public class SonyPs3Profile : DefaultProfile
|
|
||||||
{
|
|
||||||
public SonyPs3Profile()
|
|
||||||
{
|
|
||||||
Name = "Sony PlayStation 3";
|
|
||||||
|
|
||||||
Identification = new DeviceIdentification
|
|
||||||
{
|
|
||||||
FriendlyName = "PLAYSTATION 3",
|
|
||||||
|
|
||||||
Headers = new[]
|
|
||||||
{
|
|
||||||
new HttpHeaderInfo
|
|
||||||
{
|
|
||||||
Name = "User-Agent",
|
|
||||||
Value = @"PLAYSTATION 3",
|
|
||||||
Match = HeaderMatchType.Substring
|
|
||||||
},
|
|
||||||
|
|
||||||
new HttpHeaderInfo
|
|
||||||
{
|
|
||||||
Name = "X-AV-Client-Info",
|
|
||||||
Value = @"PLAYSTATION 3",
|
|
||||||
Match = HeaderMatchType.Substring
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
AlbumArtPn = "JPEG_TN";
|
|
||||||
|
|
||||||
SonyAggregationFlags = "10";
|
|
||||||
EnableSingleAlbumArtLimit = true;
|
|
||||||
|
|
||||||
DirectPlayProfiles = new[]
|
|
||||||
{
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "avi",
|
|
||||||
Type = DlnaProfileType.Video,
|
|
||||||
VideoCodec = "mpeg4",
|
|
||||||
AudioCodec = "mp2,mp3"
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "ts,mpegts",
|
|
||||||
Type = DlnaProfileType.Video,
|
|
||||||
VideoCodec = "mpeg1video,mpeg2video,h264",
|
|
||||||
AudioCodec = "aac,ac3,mp2"
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "mpeg",
|
|
||||||
Type = DlnaProfileType.Video,
|
|
||||||
VideoCodec = "mpeg1video,mpeg2video",
|
|
||||||
AudioCodec = "mp2"
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "mp4",
|
|
||||||
Type = DlnaProfileType.Video,
|
|
||||||
VideoCodec = "h264,mpeg4",
|
|
||||||
AudioCodec = "aac,ac3"
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "aac,mp3,wav",
|
|
||||||
Type = DlnaProfileType.Audio
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "jpeg,png,gif,bmp,tiff",
|
|
||||||
Type = DlnaProfileType.Photo
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
TranscodingProfiles = new[]
|
|
||||||
{
|
|
||||||
new TranscodingProfile
|
|
||||||
{
|
|
||||||
Container = "mp3",
|
|
||||||
AudioCodec = "mp3",
|
|
||||||
Type = DlnaProfileType.Audio
|
|
||||||
},
|
|
||||||
new TranscodingProfile
|
|
||||||
{
|
|
||||||
Container = "ts",
|
|
||||||
VideoCodec = "h264",
|
|
||||||
AudioCodec = "aac,ac3,mp2",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new TranscodingProfile
|
|
||||||
{
|
|
||||||
Container = "jpeg",
|
|
||||||
Type = DlnaProfileType.Photo
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
ContainerProfiles = new[]
|
|
||||||
{
|
|
||||||
new ContainerProfile
|
|
||||||
{
|
|
||||||
Type = DlnaProfileType.Photo,
|
|
||||||
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Width,
|
|
||||||
Value = "1920"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Height,
|
|
||||||
Value = "1080"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
CodecProfiles = new[]
|
|
||||||
{
|
|
||||||
new CodecProfile
|
|
||||||
{
|
|
||||||
Type = CodecType.Video,
|
|
||||||
Codec = "h264",
|
|
||||||
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Width,
|
|
||||||
Value = "1920"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Height,
|
|
||||||
Value = "1080"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.VideoFramerate,
|
|
||||||
Value = "30",
|
|
||||||
IsRequired = false
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.VideoBitrate,
|
|
||||||
Value = "15360000",
|
|
||||||
IsRequired = false
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.VideoLevel,
|
|
||||||
Value = "41",
|
|
||||||
IsRequired = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
new CodecProfile
|
|
||||||
{
|
|
||||||
Type = CodecType.VideoAudio,
|
|
||||||
Codec = "ac3",
|
|
||||||
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.AudioChannels,
|
|
||||||
Value = "6",
|
|
||||||
IsRequired = false
|
|
||||||
},
|
|
||||||
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.AudioBitrate,
|
|
||||||
Value = "640000",
|
|
||||||
IsRequired = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
new CodecProfile
|
|
||||||
{
|
|
||||||
Type = CodecType.VideoAudio,
|
|
||||||
Codec = "wmapro",
|
|
||||||
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.AudioChannels,
|
|
||||||
Value = "2"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
new CodecProfile
|
|
||||||
{
|
|
||||||
Type = CodecType.VideoAudio,
|
|
||||||
Codec = "aac",
|
|
||||||
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.NotEquals,
|
|
||||||
Property = ProfileConditionValue.AudioProfile,
|
|
||||||
Value = "he-aac",
|
|
||||||
IsRequired = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
ResponseProfiles = new[]
|
|
||||||
{
|
|
||||||
new ResponseProfile
|
|
||||||
{
|
|
||||||
Container = "mp4,mov",
|
|
||||||
AudioCodec = "aac",
|
|
||||||
MimeType = "video/mp4",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
|
|
||||||
new ResponseProfile
|
|
||||||
{
|
|
||||||
Container = "avi",
|
|
||||||
MimeType = "video/divx",
|
|
||||||
OrgPn = "AVI",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
|
|
||||||
new ResponseProfile
|
|
||||||
{
|
|
||||||
Container = "wav",
|
|
||||||
MimeType = "audio/wav",
|
|
||||||
Type = DlnaProfileType.Audio
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
SubtitleProfiles = new[]
|
|
||||||
{
|
|
||||||
new SubtitleProfile
|
|
||||||
{
|
|
||||||
Format = "srt",
|
|
||||||
Method = SubtitleDeliveryMethod.Embed
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,278 +0,0 @@
|
||||||
#pragma warning disable CS1591
|
|
||||||
|
|
||||||
using MediaBrowser.Model.Dlna;
|
|
||||||
|
|
||||||
namespace Emby.Dlna.Profiles
|
|
||||||
{
|
|
||||||
[System.Xml.Serialization.XmlRoot("Profile")]
|
|
||||||
public class SonyPs4Profile : DefaultProfile
|
|
||||||
{
|
|
||||||
public SonyPs4Profile()
|
|
||||||
{
|
|
||||||
Name = "Sony PlayStation 4";
|
|
||||||
|
|
||||||
Identification = new DeviceIdentification
|
|
||||||
{
|
|
||||||
FriendlyName = "PLAYSTATION 4",
|
|
||||||
|
|
||||||
Headers = new[]
|
|
||||||
{
|
|
||||||
new HttpHeaderInfo
|
|
||||||
{
|
|
||||||
Name = "User-Agent",
|
|
||||||
Value = @"PLAYSTATION 4",
|
|
||||||
Match = HeaderMatchType.Substring
|
|
||||||
},
|
|
||||||
|
|
||||||
new HttpHeaderInfo
|
|
||||||
{
|
|
||||||
Name = "X-AV-Client-Info",
|
|
||||||
Value = @"PLAYSTATION 4",
|
|
||||||
Match = HeaderMatchType.Substring
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
AlbumArtPn = "JPEG_TN";
|
|
||||||
|
|
||||||
SonyAggregationFlags = "10";
|
|
||||||
EnableSingleAlbumArtLimit = true;
|
|
||||||
|
|
||||||
DirectPlayProfiles = new[]
|
|
||||||
{
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "avi",
|
|
||||||
Type = DlnaProfileType.Video,
|
|
||||||
VideoCodec = "mpeg4",
|
|
||||||
AudioCodec = "mp2,mp3"
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "ts,mpegts",
|
|
||||||
Type = DlnaProfileType.Video,
|
|
||||||
VideoCodec = "mpeg1video,mpeg2video,h264",
|
|
||||||
AudioCodec = "aac,ac3,mp2"
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "mpeg",
|
|
||||||
Type = DlnaProfileType.Video,
|
|
||||||
VideoCodec = "mpeg1video,mpeg2video",
|
|
||||||
AudioCodec = "mp2"
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "mp4,mkv,m4v",
|
|
||||||
Type = DlnaProfileType.Video,
|
|
||||||
VideoCodec = "h264,mpeg4",
|
|
||||||
AudioCodec = "aac,ac3"
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "aac,mp3,wav",
|
|
||||||
Type = DlnaProfileType.Audio
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "jpeg,png,gif,bmp,tiff",
|
|
||||||
Type = DlnaProfileType.Photo
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
TranscodingProfiles = new[]
|
|
||||||
{
|
|
||||||
new TranscodingProfile
|
|
||||||
{
|
|
||||||
Container = "mp3",
|
|
||||||
AudioCodec = "mp3",
|
|
||||||
Type = DlnaProfileType.Audio,
|
|
||||||
// Transcoded audio won't be playable at all without this
|
|
||||||
TranscodeSeekInfo = TranscodeSeekInfo.Bytes
|
|
||||||
},
|
|
||||||
new TranscodingProfile
|
|
||||||
{
|
|
||||||
Container = "ts",
|
|
||||||
VideoCodec = "h264",
|
|
||||||
AudioCodec = "aac,ac3,mp2",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new TranscodingProfile
|
|
||||||
{
|
|
||||||
Container = "jpeg",
|
|
||||||
Type = DlnaProfileType.Photo
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
ContainerProfiles = new[]
|
|
||||||
{
|
|
||||||
new ContainerProfile
|
|
||||||
{
|
|
||||||
Type = DlnaProfileType.Photo,
|
|
||||||
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Width,
|
|
||||||
Value = "1920"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Height,
|
|
||||||
Value = "1080"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
CodecProfiles = new[]
|
|
||||||
{
|
|
||||||
new CodecProfile
|
|
||||||
{
|
|
||||||
Type = CodecType.Video,
|
|
||||||
Codec = "h264",
|
|
||||||
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Width,
|
|
||||||
Value = "1920"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Height,
|
|
||||||
Value = "1080"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.VideoFramerate,
|
|
||||||
Value = "30",
|
|
||||||
IsRequired = false
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.VideoBitrate,
|
|
||||||
Value = "15360000",
|
|
||||||
IsRequired = false
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.VideoLevel,
|
|
||||||
Value = "41",
|
|
||||||
IsRequired = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
new CodecProfile
|
|
||||||
{
|
|
||||||
Type = CodecType.VideoAudio,
|
|
||||||
Codec = "ac3",
|
|
||||||
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.AudioChannels,
|
|
||||||
Value = "6",
|
|
||||||
IsRequired = false
|
|
||||||
},
|
|
||||||
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.AudioBitrate,
|
|
||||||
Value = "640000",
|
|
||||||
IsRequired = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
new CodecProfile
|
|
||||||
{
|
|
||||||
Type = CodecType.VideoAudio,
|
|
||||||
Codec = "wmapro",
|
|
||||||
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.AudioChannels,
|
|
||||||
Value = "2"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
new CodecProfile
|
|
||||||
{
|
|
||||||
Type = CodecType.VideoAudio,
|
|
||||||
Codec = "aac",
|
|
||||||
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.NotEquals,
|
|
||||||
Property = ProfileConditionValue.AudioProfile,
|
|
||||||
Value = "he-aac",
|
|
||||||
IsRequired = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
ResponseProfiles = new[]
|
|
||||||
{
|
|
||||||
new ResponseProfile
|
|
||||||
{
|
|
||||||
Container = "mp4,mov",
|
|
||||||
AudioCodec = "aac",
|
|
||||||
MimeType = "video/mp4",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
|
|
||||||
new ResponseProfile
|
|
||||||
{
|
|
||||||
Container = "avi",
|
|
||||||
MimeType = "video/divx",
|
|
||||||
OrgPn = "AVI",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
|
|
||||||
new ResponseProfile
|
|
||||||
{
|
|
||||||
Container = "wav",
|
|
||||||
MimeType = "audio/wav",
|
|
||||||
Type = DlnaProfileType.Audio
|
|
||||||
},
|
|
||||||
|
|
||||||
new ResponseProfile
|
|
||||||
{
|
|
||||||
Container = "m4v",
|
|
||||||
Type = DlnaProfileType.Video,
|
|
||||||
MimeType = "video/mp4"
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
SubtitleProfiles = new[]
|
|
||||||
{
|
|
||||||
new SubtitleProfile
|
|
||||||
{
|
|
||||||
Format = "srt",
|
|
||||||
Method = SubtitleDeliveryMethod.Embed
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,266 +0,0 @@
|
||||||
#pragma warning disable CS1591
|
|
||||||
|
|
||||||
using MediaBrowser.Model.Dlna;
|
|
||||||
|
|
||||||
namespace Emby.Dlna.Profiles
|
|
||||||
{
|
|
||||||
[System.Xml.Serialization.XmlRoot("Profile")]
|
|
||||||
public class WdtvLiveProfile : DefaultProfile
|
|
||||||
{
|
|
||||||
public WdtvLiveProfile()
|
|
||||||
{
|
|
||||||
Name = "WDTV Live";
|
|
||||||
|
|
||||||
TimelineOffsetSeconds = 5;
|
|
||||||
IgnoreTranscodeByteRangeRequests = true;
|
|
||||||
|
|
||||||
Identification = new DeviceIdentification
|
|
||||||
{
|
|
||||||
ModelName = "WD TV",
|
|
||||||
|
|
||||||
Headers = new[]
|
|
||||||
{
|
|
||||||
new HttpHeaderInfo { Name = "User-Agent", Value = "alphanetworks", Match = HeaderMatchType.Substring },
|
|
||||||
new HttpHeaderInfo
|
|
||||||
{
|
|
||||||
Name = "User-Agent",
|
|
||||||
Value = "ALPHA Networks",
|
|
||||||
Match = HeaderMatchType.Substring
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
TranscodingProfiles = new[]
|
|
||||||
{
|
|
||||||
new TranscodingProfile
|
|
||||||
{
|
|
||||||
Container = "mp3",
|
|
||||||
Type = DlnaProfileType.Audio,
|
|
||||||
AudioCodec = "mp3"
|
|
||||||
},
|
|
||||||
new TranscodingProfile
|
|
||||||
{
|
|
||||||
Container = "ts",
|
|
||||||
Type = DlnaProfileType.Video,
|
|
||||||
VideoCodec = "h264",
|
|
||||||
AudioCodec = "aac"
|
|
||||||
},
|
|
||||||
new TranscodingProfile
|
|
||||||
{
|
|
||||||
Container = "jpeg",
|
|
||||||
Type = DlnaProfileType.Photo
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
DirectPlayProfiles = new[]
|
|
||||||
{
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "avi",
|
|
||||||
Type = DlnaProfileType.Video,
|
|
||||||
VideoCodec = "mpeg1video,mpeg2video,mpeg4,h264,vc1",
|
|
||||||
AudioCodec = "ac3,eac3,dca,mp2,mp3,pcm,dts"
|
|
||||||
},
|
|
||||||
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "mpeg",
|
|
||||||
Type = DlnaProfileType.Video,
|
|
||||||
VideoCodec = "mpeg1video,mpeg2video",
|
|
||||||
AudioCodec = "ac3,eac3,dca,mp2,mp3,pcm,dts"
|
|
||||||
},
|
|
||||||
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "mkv",
|
|
||||||
Type = DlnaProfileType.Video,
|
|
||||||
VideoCodec = "mpeg1video,mpeg2video,mpeg4,h264,vc1",
|
|
||||||
AudioCodec = "ac3,eac3,dca,aac,mp2,mp3,pcm,dts"
|
|
||||||
},
|
|
||||||
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "ts,m2ts,mpegts",
|
|
||||||
Type = DlnaProfileType.Video,
|
|
||||||
VideoCodec = "mpeg1video,mpeg2video,h264,vc1",
|
|
||||||
AudioCodec = "ac3,eac3,dca,mp2,mp3,aac,dts"
|
|
||||||
},
|
|
||||||
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "mp4,mov,m4v",
|
|
||||||
Type = DlnaProfileType.Video,
|
|
||||||
VideoCodec = "h264,mpeg4",
|
|
||||||
AudioCodec = "ac3,eac3,aac,mp2,mp3,dca,dts"
|
|
||||||
},
|
|
||||||
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "asf",
|
|
||||||
Type = DlnaProfileType.Video,
|
|
||||||
VideoCodec = "vc1",
|
|
||||||
AudioCodec = "wmav2,wmapro"
|
|
||||||
},
|
|
||||||
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "asf",
|
|
||||||
Type = DlnaProfileType.Video,
|
|
||||||
VideoCodec = "mpeg2video",
|
|
||||||
AudioCodec = "mp2,ac3"
|
|
||||||
},
|
|
||||||
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "mp3",
|
|
||||||
AudioCodec = "mp2,mp3",
|
|
||||||
Type = DlnaProfileType.Audio
|
|
||||||
},
|
|
||||||
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "mp4",
|
|
||||||
AudioCodec = "mp4",
|
|
||||||
Type = DlnaProfileType.Audio
|
|
||||||
},
|
|
||||||
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "flac",
|
|
||||||
Type = DlnaProfileType.Audio
|
|
||||||
},
|
|
||||||
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "asf",
|
|
||||||
AudioCodec = "wmav2,wmapro,wmavoice",
|
|
||||||
Type = DlnaProfileType.Audio
|
|
||||||
},
|
|
||||||
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "ogg",
|
|
||||||
AudioCodec = "vorbis",
|
|
||||||
Type = DlnaProfileType.Audio
|
|
||||||
},
|
|
||||||
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Type = DlnaProfileType.Photo,
|
|
||||||
|
|
||||||
Container = "jpeg,png,gif,bmp,tiff"
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
ResponseProfiles = new[]
|
|
||||||
{
|
|
||||||
new ResponseProfile
|
|
||||||
{
|
|
||||||
Container = "ts,mpegts",
|
|
||||||
OrgPn = "MPEG_TS_SD_NA",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
ContainerProfiles = new[]
|
|
||||||
{
|
|
||||||
new ContainerProfile
|
|
||||||
{
|
|
||||||
Type = DlnaProfileType.Photo,
|
|
||||||
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Width,
|
|
||||||
Value = "1920"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Height,
|
|
||||||
Value = "1080"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
CodecProfiles = new[]
|
|
||||||
{
|
|
||||||
new CodecProfile
|
|
||||||
{
|
|
||||||
Type = CodecType.Video,
|
|
||||||
Codec = "h264",
|
|
||||||
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Width,
|
|
||||||
Value = "1920"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Height,
|
|
||||||
Value = "1080"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.VideoLevel,
|
|
||||||
Value = "41"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
new CodecProfile
|
|
||||||
{
|
|
||||||
Type = CodecType.VideoAudio,
|
|
||||||
Codec = "aac",
|
|
||||||
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.AudioChannels,
|
|
||||||
Value = "2"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
SubtitleProfiles = new[]
|
|
||||||
{
|
|
||||||
new SubtitleProfile
|
|
||||||
{
|
|
||||||
Format = "srt",
|
|
||||||
Method = SubtitleDeliveryMethod.External
|
|
||||||
},
|
|
||||||
new SubtitleProfile
|
|
||||||
{
|
|
||||||
Format = "srt",
|
|
||||||
Method = SubtitleDeliveryMethod.Embed
|
|
||||||
},
|
|
||||||
new SubtitleProfile
|
|
||||||
{
|
|
||||||
Format = "sub",
|
|
||||||
Method = SubtitleDeliveryMethod.Embed
|
|
||||||
},
|
|
||||||
new SubtitleProfile
|
|
||||||
{
|
|
||||||
Format = "subrip",
|
|
||||||
Method = SubtitleDeliveryMethod.Embed
|
|
||||||
},
|
|
||||||
new SubtitleProfile
|
|
||||||
{
|
|
||||||
Format = "idx",
|
|
||||||
Method = SubtitleDeliveryMethod.Embed
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,372 +0,0 @@
|
||||||
#pragma warning disable CS1591
|
|
||||||
|
|
||||||
using MediaBrowser.Model.Dlna;
|
|
||||||
|
|
||||||
namespace Emby.Dlna.Profiles
|
|
||||||
{
|
|
||||||
[System.Xml.Serialization.XmlRoot("Profile")]
|
|
||||||
public class XboxOneProfile : DefaultProfile
|
|
||||||
{
|
|
||||||
public XboxOneProfile()
|
|
||||||
{
|
|
||||||
Name = "Xbox One";
|
|
||||||
|
|
||||||
TimelineOffsetSeconds = 40;
|
|
||||||
|
|
||||||
Identification = new DeviceIdentification
|
|
||||||
{
|
|
||||||
ModelName = "Xbox One",
|
|
||||||
|
|
||||||
Headers = new[]
|
|
||||||
{
|
|
||||||
new HttpHeaderInfo
|
|
||||||
{
|
|
||||||
Name = "FriendlyName.DLNA.ORG", Value = "XboxOne", Match = HeaderMatchType.Substring
|
|
||||||
},
|
|
||||||
new HttpHeaderInfo
|
|
||||||
{
|
|
||||||
Name = "User-Agent", Value = "NSPlayer/12", Match = HeaderMatchType.Substring
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
var videoProfile = "high|main|baseline|constrained baseline";
|
|
||||||
var videoLevel = "41";
|
|
||||||
|
|
||||||
TranscodingProfiles = new[]
|
|
||||||
{
|
|
||||||
new TranscodingProfile
|
|
||||||
{
|
|
||||||
Container = "mp3",
|
|
||||||
AudioCodec = "mp3",
|
|
||||||
Type = DlnaProfileType.Audio
|
|
||||||
},
|
|
||||||
new TranscodingProfile
|
|
||||||
{
|
|
||||||
Container = "jpeg",
|
|
||||||
VideoCodec = "jpeg",
|
|
||||||
Type = DlnaProfileType.Photo
|
|
||||||
},
|
|
||||||
new TranscodingProfile
|
|
||||||
{
|
|
||||||
Container = "ts",
|
|
||||||
VideoCodec = "h264",
|
|
||||||
AudioCodec = "aac",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
DirectPlayProfiles = new[]
|
|
||||||
{
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "ts,mpegts",
|
|
||||||
VideoCodec = "h264,mpeg2video,hevc",
|
|
||||||
AudioCodec = "ac3,aac,mp3",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "avi",
|
|
||||||
VideoCodec = "mpeg4",
|
|
||||||
AudioCodec = "ac3,mp3",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "avi",
|
|
||||||
VideoCodec = "h264",
|
|
||||||
AudioCodec = "aac",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "mp4,mov,mkv,m4v",
|
|
||||||
VideoCodec = "h264,mpeg4,mpeg2video,hevc",
|
|
||||||
AudioCodec = "aac,ac3",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "asf",
|
|
||||||
VideoCodec = "wmv2,wmv3,vc1",
|
|
||||||
AudioCodec = "wmav2,wmapro",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "asf",
|
|
||||||
AudioCodec = "wmav2,wmapro,wmavoice",
|
|
||||||
Type = DlnaProfileType.Audio
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "mp3",
|
|
||||||
AudioCodec = "mp3",
|
|
||||||
Type = DlnaProfileType.Audio
|
|
||||||
},
|
|
||||||
new DirectPlayProfile
|
|
||||||
{
|
|
||||||
Container = "jpeg",
|
|
||||||
Type = DlnaProfileType.Photo
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
ContainerProfiles = new[]
|
|
||||||
{
|
|
||||||
new ContainerProfile
|
|
||||||
{
|
|
||||||
Type = DlnaProfileType.Video,
|
|
||||||
Container = "mp4,mov",
|
|
||||||
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.Equals,
|
|
||||||
Property = ProfileConditionValue.Has64BitOffsets,
|
|
||||||
Value = "false",
|
|
||||||
IsRequired = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
CodecProfiles = new[]
|
|
||||||
{
|
|
||||||
new CodecProfile
|
|
||||||
{
|
|
||||||
Type = CodecType.Video,
|
|
||||||
Codec = "mpeg4",
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.NotEquals,
|
|
||||||
Property = ProfileConditionValue.IsAnamorphic,
|
|
||||||
Value = "true",
|
|
||||||
IsRequired = false
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.VideoBitDepth,
|
|
||||||
Value = "8",
|
|
||||||
IsRequired = false
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Width,
|
|
||||||
Value = "1920"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Height,
|
|
||||||
Value = "1080"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.VideoFramerate,
|
|
||||||
Value = "30",
|
|
||||||
IsRequired = false
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.VideoBitrate,
|
|
||||||
Value = "5120000",
|
|
||||||
IsRequired = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
new CodecProfile
|
|
||||||
{
|
|
||||||
Type = CodecType.Video,
|
|
||||||
Codec = "h264",
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.NotEquals,
|
|
||||||
Property = ProfileConditionValue.IsAnamorphic,
|
|
||||||
Value = "true",
|
|
||||||
IsRequired = false
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.VideoBitDepth,
|
|
||||||
Value = "8",
|
|
||||||
IsRequired = false
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Width,
|
|
||||||
Value = "1920"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Height,
|
|
||||||
Value = "1080"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.VideoLevel,
|
|
||||||
Value = videoLevel,
|
|
||||||
IsRequired = false
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.EqualsAny,
|
|
||||||
Property = ProfileConditionValue.VideoProfile,
|
|
||||||
Value = videoProfile,
|
|
||||||
IsRequired = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
new CodecProfile
|
|
||||||
{
|
|
||||||
Type = CodecType.Video,
|
|
||||||
Codec = "wmv2,wmv3,vc1",
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.NotEquals,
|
|
||||||
Property = ProfileConditionValue.IsAnamorphic,
|
|
||||||
Value = "true",
|
|
||||||
IsRequired = false
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.VideoBitDepth,
|
|
||||||
Value = "8",
|
|
||||||
IsRequired = false
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Width,
|
|
||||||
Value = "1920"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Height,
|
|
||||||
Value = "1080"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.VideoFramerate,
|
|
||||||
Value = "30",
|
|
||||||
IsRequired = false
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.VideoBitrate,
|
|
||||||
Value = "15360000",
|
|
||||||
IsRequired = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
new CodecProfile
|
|
||||||
{
|
|
||||||
Type = CodecType.Video,
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.NotEquals,
|
|
||||||
Property = ProfileConditionValue.IsAnamorphic,
|
|
||||||
Value = "true",
|
|
||||||
IsRequired = false
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.VideoBitDepth,
|
|
||||||
Value = "8",
|
|
||||||
IsRequired = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
new CodecProfile
|
|
||||||
{
|
|
||||||
Type = CodecType.VideoAudio,
|
|
||||||
Codec = "ac3,wmav2,wmapro",
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.AudioChannels,
|
|
||||||
Value = "6",
|
|
||||||
IsRequired = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
new CodecProfile
|
|
||||||
{
|
|
||||||
Type = CodecType.VideoAudio,
|
|
||||||
Codec = "aac",
|
|
||||||
Conditions = new[]
|
|
||||||
{
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.AudioChannels,
|
|
||||||
Value = "2",
|
|
||||||
IsRequired = false
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.Equals,
|
|
||||||
Property = ProfileConditionValue.AudioProfile,
|
|
||||||
Value = "lc",
|
|
||||||
IsRequired = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
ResponseProfiles = new[]
|
|
||||||
{
|
|
||||||
new ResponseProfile
|
|
||||||
{
|
|
||||||
Container = "avi",
|
|
||||||
MimeType = "video/avi",
|
|
||||||
Type = DlnaProfileType.Video
|
|
||||||
},
|
|
||||||
new ResponseProfile
|
|
||||||
{
|
|
||||||
Container = "m4v",
|
|
||||||
Type = DlnaProfileType.Video,
|
|
||||||
MimeType = "video/mp4"
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
SubtitleProfiles = new[]
|
|
||||||
{
|
|
||||||
new SubtitleProfile
|
|
||||||
{
|
|
||||||
Format = "srt",
|
|
||||||
Method = SubtitleDeliveryMethod.Embed
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -34,8 +34,8 @@ namespace Jellyfin.Server.Integration.Tests.Controllers
|
||||||
var client = _factory.CreateClient();
|
var client = _factory.CreateClient();
|
||||||
client.DefaultRequestHeaders.AddAuthHeader(_accessToken ??= await AuthHelper.CompleteStartupAsync(client).ConfigureAwait(false));
|
client.DefaultRequestHeaders.AddAuthHeader(_accessToken ??= await AuthHelper.CompleteStartupAsync(client).ConfigureAwait(false));
|
||||||
|
|
||||||
using var getResponse = await client.GetAsync("/Dlna/Profiles/" + NonExistentProfile).ConfigureAwait(false);
|
using var response = await client.GetAsync("/Dlna/Profiles/" + NonExistentProfile).ConfigureAwait(false);
|
||||||
Assert.Equal(HttpStatusCode.NotFound, getResponse.StatusCode);
|
Assert.Equal(HttpStatusCode.NotFound, response.StatusCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
|
@ -45,8 +45,8 @@ namespace Jellyfin.Server.Integration.Tests.Controllers
|
||||||
var client = _factory.CreateClient();
|
var client = _factory.CreateClient();
|
||||||
client.DefaultRequestHeaders.AddAuthHeader(_accessToken ??= await AuthHelper.CompleteStartupAsync(client).ConfigureAwait(false));
|
client.DefaultRequestHeaders.AddAuthHeader(_accessToken ??= await AuthHelper.CompleteStartupAsync(client).ConfigureAwait(false));
|
||||||
|
|
||||||
using var getResponse = await client.DeleteAsync("/Dlna/Profiles/" + NonExistentProfile).ConfigureAwait(false);
|
using var response = await client.DeleteAsync("/Dlna/Profiles/" + NonExistentProfile).ConfigureAwait(false);
|
||||||
Assert.Equal(HttpStatusCode.NotFound, getResponse.StatusCode);
|
Assert.Equal(HttpStatusCode.NotFound, response.StatusCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
|
@ -61,8 +61,8 @@ namespace Jellyfin.Server.Integration.Tests.Controllers
|
||||||
Name = "ThisProfileDoesNotExist"
|
Name = "ThisProfileDoesNotExist"
|
||||||
};
|
};
|
||||||
|
|
||||||
using var getResponse = await client.PostAsJsonAsync("/Dlna/Profiles/" + NonExistentProfile, deviceProfile, _jsonOptions).ConfigureAwait(false);
|
using var response = await client.PostAsJsonAsync("/Dlna/Profiles/" + NonExistentProfile, deviceProfile, _jsonOptions).ConfigureAwait(false);
|
||||||
Assert.Equal(HttpStatusCode.NotFound, getResponse.StatusCode);
|
Assert.Equal(HttpStatusCode.NotFound, response.StatusCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
|
@ -77,8 +77,8 @@ namespace Jellyfin.Server.Integration.Tests.Controllers
|
||||||
Name = "ThisProfileIsNew"
|
Name = "ThisProfileIsNew"
|
||||||
};
|
};
|
||||||
|
|
||||||
using var getResponse = await client.PostAsJsonAsync("/Dlna/Profiles", deviceProfile, _jsonOptions).ConfigureAwait(false);
|
using var response = await client.PostAsJsonAsync("/Dlna/Profiles", deviceProfile, _jsonOptions).ConfigureAwait(false);
|
||||||
Assert.Equal(HttpStatusCode.NoContent, getResponse.StatusCode);
|
Assert.Equal(HttpStatusCode.NoContent, response.StatusCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
|
@ -115,20 +115,46 @@ namespace Jellyfin.Server.Integration.Tests.Controllers
|
||||||
Id = _newDeviceProfileId
|
Id = _newDeviceProfileId
|
||||||
};
|
};
|
||||||
|
|
||||||
using var getResponse = await client.PostAsJsonAsync("/Dlna/Profiles", updatedProfile, _jsonOptions).ConfigureAwait(false);
|
using var postResponse = await client.PostAsJsonAsync("/Dlna/Profiles/" + _newDeviceProfileId, updatedProfile, _jsonOptions).ConfigureAwait(false);
|
||||||
Assert.Equal(HttpStatusCode.NoContent, getResponse.StatusCode);
|
Assert.Equal(HttpStatusCode.NoContent, postResponse.StatusCode);
|
||||||
|
|
||||||
|
// Verify that the profile got updated
|
||||||
|
using var response = await client.GetAsync("/Dlna/ProfileInfos").ConfigureAwait(false);
|
||||||
|
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
|
||||||
|
Assert.Equal(MediaTypeNames.Application.Json, response.Content.Headers.ContentType?.MediaType);
|
||||||
|
Assert.Equal(Encoding.UTF8.BodyName, response.Content.Headers.ContentType?.CharSet);
|
||||||
|
|
||||||
|
var profiles = await JsonSerializer.DeserializeAsync<DeviceProfileInfo[]>(
|
||||||
|
await response.Content.ReadAsStreamAsync().ConfigureAwait(false),
|
||||||
|
_jsonOptions).ConfigureAwait(false);
|
||||||
|
|
||||||
|
Assert.Null(profiles?.FirstOrDefault(x => string.Equals(x.Name, "ThisProfileIsNew", StringComparison.Ordinal)));
|
||||||
|
var newProfile = profiles?.FirstOrDefault(x => string.Equals(x.Name, "ThisProfileIsUpdated", StringComparison.Ordinal));
|
||||||
|
Assert.NotNull(newProfile);
|
||||||
|
_newDeviceProfileId = newProfile!.Id;
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
[Priority(4)]
|
[Priority(5)]
|
||||||
public async Task DeleteProfile_Valid_NoContent()
|
public async Task DeleteProfile_Valid_NoContent()
|
||||||
{
|
{
|
||||||
var client = _factory.CreateClient();
|
var client = _factory.CreateClient();
|
||||||
client.DefaultRequestHeaders.AddAuthHeader(_accessToken ??= await AuthHelper.CompleteStartupAsync(client).ConfigureAwait(false));
|
client.DefaultRequestHeaders.AddAuthHeader(_accessToken ??= await AuthHelper.CompleteStartupAsync(client).ConfigureAwait(false));
|
||||||
|
|
||||||
using var getResponse = await client.DeleteAsync("/Dlna/Profiles/" + _newDeviceProfileId).ConfigureAwait(false);
|
using var deleteResponse = await client.DeleteAsync("/Dlna/Profiles/" + _newDeviceProfileId).ConfigureAwait(false);
|
||||||
Console.WriteLine(await getResponse.Content.ReadAsStringAsync().ConfigureAwait(false));
|
Assert.Equal(HttpStatusCode.NoContent, deleteResponse.StatusCode);
|
||||||
Assert.Equal(HttpStatusCode.NoContent, getResponse.StatusCode);
|
|
||||||
|
// Verify that the profile got deleted
|
||||||
|
using var response = await client.GetAsync("/Dlna/ProfileInfos").ConfigureAwait(false);
|
||||||
|
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
|
||||||
|
Assert.Equal(MediaTypeNames.Application.Json, response.Content.Headers.ContentType?.MediaType);
|
||||||
|
Assert.Equal(Encoding.UTF8.BodyName, response.Content.Headers.ContentType?.CharSet);
|
||||||
|
|
||||||
|
var profiles = await JsonSerializer.DeserializeAsync<DeviceProfileInfo[]>(
|
||||||
|
await response.Content.ReadAsStreamAsync().ConfigureAwait(false),
|
||||||
|
_jsonOptions).ConfigureAwait(false);
|
||||||
|
|
||||||
|
Assert.Null(profiles?.FirstOrDefault(x => string.Equals(x.Name, "ThisProfileIsUpdated", StringComparison.Ordinal)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user