diff options
58 files changed, 1727 insertions, 122 deletions
diff --git a/MediaBrowser.Api/Playback/BaseStreamingService.cs b/MediaBrowser.Api/Playback/BaseStreamingService.cs index f65949ac7..c365fcd82 100644 --- a/MediaBrowser.Api/Playback/BaseStreamingService.cs +++ b/MediaBrowser.Api/Playback/BaseStreamingService.cs @@ -1210,85 +1210,89 @@ namespace MediaBrowser.Api.Playback if (i == 0) { - request.DeviceId = val; + request.DeviceProfileId = val; } else if (i == 1) { - request.MediaSourceId = val; + request.DeviceId = val; } else if (i == 2) { - request.Static = string.Equals("true", val, StringComparison.OrdinalIgnoreCase); + request.MediaSourceId = val; } else if (i == 3) { + request.Static = string.Equals("true", val, StringComparison.OrdinalIgnoreCase); + } + else if (i == 4) + { if (videoRequest != null) { videoRequest.VideoCodec = val; } } - else if (i == 4) + else if (i == 5) { request.AudioCodec = val; } - else if (i == 5) + else if (i == 6) { if (videoRequest != null) { videoRequest.AudioStreamIndex = int.Parse(val, UsCulture); } } - else if (i == 6) + else if (i == 7) { if (videoRequest != null) { videoRequest.SubtitleStreamIndex = int.Parse(val, UsCulture); } } - else if (i == 7) + else if (i == 8) { if (videoRequest != null) { videoRequest.VideoBitRate = int.Parse(val, UsCulture); } } - else if (i == 8) + else if (i == 9) { request.AudioBitRate = int.Parse(val, UsCulture); } - else if (i == 9) + else if (i == 10) { request.MaxAudioChannels = int.Parse(val, UsCulture); } - else if (i == 10) + else if (i == 11) { if (videoRequest != null) { videoRequest.MaxWidth = int.Parse(val, UsCulture); } } - else if (i == 11) + else if (i == 12) { if (videoRequest != null) { videoRequest.MaxHeight = int.Parse(val, UsCulture); } } - else if (i == 12) + else if (i == 13) { if (videoRequest != null) { videoRequest.Framerate = int.Parse(val, UsCulture); } } - else if (i == 13) + else if (i == 14) { if (videoRequest != null) { request.StartTimeTicks = long.Parse(val, UsCulture); } } - else if (i == 14) + else if (i == 15) { if (videoRequest != null) { diff --git a/MediaBrowser.Api/Playback/StreamRequest.cs b/MediaBrowser.Api/Playback/StreamRequest.cs index 8db5920f6..0eb2984fb 100644 --- a/MediaBrowser.Api/Playback/StreamRequest.cs +++ b/MediaBrowser.Api/Playback/StreamRequest.cs @@ -65,6 +65,9 @@ namespace MediaBrowser.Api.Playback [ApiMember(Name = "Static", Description = "Optional. If true, the original file will be streamed statically without any encoding. Use either no url extension or the original file extension. true/false", IsRequired = false, DataType = "bool", ParameterType = "query", Verb = "GET")] public bool Static { get; set; } + [ApiMember(Name = "DeviceProfileId", Description = "Optional. The dlna device profile id to utilize.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")] + public string DeviceProfileId { get; set; } + /// <summary> /// For testing purposes /// </summary> diff --git a/MediaBrowser.Controller/Dlna/CodecProfile.cs b/MediaBrowser.Controller/Dlna/CodecProfile.cs index 0f61cad98..75f80ed3b 100644 --- a/MediaBrowser.Controller/Dlna/CodecProfile.cs +++ b/MediaBrowser.Controller/Dlna/CodecProfile.cs @@ -1,13 +1,18 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Xml.Serialization; namespace MediaBrowser.Controller.Dlna { public class CodecProfile { + [XmlAttribute("type")] public CodecType Type { get; set; } + public ProfileCondition[] Conditions { get; set; } + + [XmlAttribute("codec")] public string Codec { get; set; } public CodecProfile() @@ -37,9 +42,16 @@ namespace MediaBrowser.Controller.Dlna public class ProfileCondition { + [XmlAttribute("condition")] public ProfileConditionType Condition { get; set; } + + [XmlAttribute("property")] public ProfileConditionValue Property { get; set; } + + [XmlAttribute("value")] public string Value { get; set; } + + [XmlAttribute("isRequired")] public bool IsRequired { get; set; } public ProfileCondition() diff --git a/MediaBrowser.Controller/Dlna/ContainerProfile.cs b/MediaBrowser.Controller/Dlna/ContainerProfile.cs index 3bd3c9eaf..1029ba72c 100644 --- a/MediaBrowser.Controller/Dlna/ContainerProfile.cs +++ b/MediaBrowser.Controller/Dlna/ContainerProfile.cs @@ -1,12 +1,16 @@ using System.Collections.Generic; using System.Linq; +using System.Xml.Serialization; namespace MediaBrowser.Controller.Dlna { public class ContainerProfile { + [XmlAttribute("type")] public DlnaProfileType Type { get; set; } public ProfileCondition[] Conditions { get; set; } + + [XmlAttribute("container")] public string Container { get; set; } public ContainerProfile() diff --git a/MediaBrowser.Controller/Dlna/DeviceIdentification.cs b/MediaBrowser.Controller/Dlna/DeviceIdentification.cs index 7b8e3a1e7..c9cd4bc70 100644 --- a/MediaBrowser.Controller/Dlna/DeviceIdentification.cs +++ b/MediaBrowser.Controller/Dlna/DeviceIdentification.cs @@ -1,4 +1,6 @@ +using System.Xml.Serialization; + namespace MediaBrowser.Controller.Dlna { public class DeviceIdentification @@ -62,8 +64,13 @@ namespace MediaBrowser.Controller.Dlna public class HttpHeaderInfo { + [XmlAttribute("name")] public string Name { get; set; } + + [XmlAttribute("value")] public string Value { get; set; } + + [XmlAttribute("match")] public HeaderMatchType Match { get; set; } } diff --git a/MediaBrowser.Controller/Dlna/DeviceProfile.cs b/MediaBrowser.Controller/Dlna/DeviceProfile.cs index f34c4bf64..f5aff0262 100644 --- a/MediaBrowser.Controller/Dlna/DeviceProfile.cs +++ b/MediaBrowser.Controller/Dlna/DeviceProfile.cs @@ -1,9 +1,12 @@ using MediaBrowser.Model.Entities; using System; using System.Linq; +using System.Runtime.Serialization; +using System.Xml.Serialization; namespace MediaBrowser.Controller.Dlna { + [XmlRoot("Profile")] public class DeviceProfile { /// <summary> @@ -12,19 +15,9 @@ namespace MediaBrowser.Controller.Dlna /// <value>The name.</value> public string Name { get; set; } - /// <summary> - /// Gets or sets the transcoding profiles. - /// </summary> - /// <value>The transcoding profiles.</value> - public TranscodingProfile[] TranscodingProfiles { get; set; } - - /// <summary> - /// Gets or sets the direct play profiles. - /// </summary> - /// <value>The direct play profiles.</value> - public DirectPlayProfile[] DirectPlayProfiles { get; set; } - - public ContainerProfile[] ContainerProfiles { get; set; } + [XmlIgnore] + [IgnoreDataMember] + public string Id { get; set; } /// <summary> /// Gets or sets the identification. @@ -57,14 +50,27 @@ namespace MediaBrowser.Controller.Dlna public string ProtocolInfo { get; set; } - public MediaProfile[] MediaProfiles { get; set; } - public CodecProfile[] CodecProfiles { get; set; } - public int TimelineOffsetSeconds { get; set; } - public bool RequiresPlainVideoItems { get; set; } public bool RequiresPlainFolders { get; set; } + /// <summary> + /// Gets or sets the direct play profiles. + /// </summary> + /// <value>The direct play profiles.</value> + public DirectPlayProfile[] DirectPlayProfiles { get; set; } + + /// <summary> + /// Gets or sets the transcoding profiles. + /// </summary> + /// <value>The transcoding profiles.</value> + public TranscodingProfile[] TranscodingProfiles { get; set; } + + public ContainerProfile[] ContainerProfiles { get; set; } + + public CodecProfile[] CodecProfiles { get; set; } + public MediaProfile[] MediaProfiles { get; set; } + public DeviceProfile() { DirectPlayProfiles = new DirectPlayProfile[] { }; diff --git a/MediaBrowser.Controller/Dlna/DirectPlayProfile.cs b/MediaBrowser.Controller/Dlna/DirectPlayProfile.cs index 686b31287..ad70640da 100644 --- a/MediaBrowser.Controller/Dlna/DirectPlayProfile.cs +++ b/MediaBrowser.Controller/Dlna/DirectPlayProfile.cs @@ -1,14 +1,21 @@ using System.Collections.Generic; using System.Linq; +using System.Xml.Serialization; namespace MediaBrowser.Controller.Dlna { public class DirectPlayProfile { + [XmlAttribute("container")] public string Container { get; set; } + + [XmlAttribute("audioCodec")] public string AudioCodec { get; set; } + + [XmlAttribute("videoCodec")] public string VideoCodec { get; set; } + [XmlAttribute("type")] public DlnaProfileType Type { get; set; } public List<string> GetContainers() diff --git a/MediaBrowser.Controller/Dlna/IDlnaManager.cs b/MediaBrowser.Controller/Dlna/IDlnaManager.cs index 22d13fc3a..dd9b0e8a8 100644 --- a/MediaBrowser.Controller/Dlna/IDlnaManager.cs +++ b/MediaBrowser.Controller/Dlna/IDlnaManager.cs @@ -1,20 +1,15 @@ -using System.Collections.Generic; +using MediaBrowser.Model.Dlna; +using System.Collections.Generic; namespace MediaBrowser.Controller.Dlna { public interface IDlnaManager { /// <summary> - /// Gets the dlna profiles. + /// Gets the profile infos. /// </summary> - /// <returns>IEnumerable{DlnaProfile}.</returns> - IEnumerable<DeviceProfile> GetProfiles(); - - /// <summary> - /// Gets the default profile. - /// </summary> - /// <returns>DlnaProfile.</returns> - DeviceProfile GetDefaultProfile(); + /// <returns>IEnumerable{DeviceProfileInfo}.</returns> + IEnumerable<DeviceProfileInfo> GetProfileInfos(); /// <summary> /// Gets the profile. @@ -26,6 +21,13 @@ namespace MediaBrowser.Controller.Dlna /// <summary> /// Gets the profile. /// </summary> + /// <param name="id">The identifier.</param> + /// <returns>DeviceProfile.</returns> + DeviceProfile GetProfile(string id); + + /// <summary> + /// Gets the profile. + /// </summary> /// <param name="deviceInfo">The device information.</param> /// <returns>DeviceProfile.</returns> DeviceProfile GetProfile(DeviceIdentification deviceInfo); diff --git a/MediaBrowser.Controller/Dlna/MediaProfile.cs b/MediaBrowser.Controller/Dlna/MediaProfile.cs index 9a9b56ddd..bf3057294 100644 --- a/MediaBrowser.Controller/Dlna/MediaProfile.cs +++ b/MediaBrowser.Controller/Dlna/MediaProfile.cs @@ -1,16 +1,27 @@ using System.Collections.Generic; using System.Linq; +using System.Xml.Serialization; namespace MediaBrowser.Controller.Dlna { public class MediaProfile { + [XmlAttribute("container")] public string Container { get; set; } + + [XmlAttribute("audioCodec")] public string AudioCodec { get; set; } + + [XmlAttribute("videoCodec")] public string VideoCodec { get; set; } + [XmlAttribute("type")] public DlnaProfileType Type { get; set; } + + [XmlAttribute("orgPn")] public string OrgPn { get; set; } + + [XmlAttribute("mimeType")] public string MimeType { get; set; } public ProfileCondition[] Conditions { get; set; } diff --git a/MediaBrowser.Controller/Dlna/TranscodingProfile.cs b/MediaBrowser.Controller/Dlna/TranscodingProfile.cs index d4cfae989..289333aa7 100644 --- a/MediaBrowser.Controller/Dlna/TranscodingProfile.cs +++ b/MediaBrowser.Controller/Dlna/TranscodingProfile.cs @@ -1,19 +1,30 @@ using System.Collections.Generic; using System.Linq; +using System.Xml.Serialization; namespace MediaBrowser.Controller.Dlna { public class TranscodingProfile { + [XmlAttribute("container")] public string Container { get; set; } + [XmlAttribute("type")] public DlnaProfileType Type { get; set; } + [XmlAttribute("videoCodec")] public string VideoCodec { get; set; } + + [XmlAttribute("audioCodec")] public string AudioCodec { get; set; } + [XmlAttribute("estimateContentLength")] public bool EstimateContentLength { get; set; } + + [XmlAttribute("enableMpegtsM2TsMode")] public bool EnableMpegtsM2TsMode { get; set; } + + [XmlAttribute("transcodeSeekInfo")] public TranscodeSeekInfo TranscodeSeekInfo { get; set; } public TranscodingSetting[] Settings { get; set; } @@ -32,7 +43,10 @@ namespace MediaBrowser.Controller.Dlna public class TranscodingSetting { + [XmlAttribute("name")] public TranscodingSettingType Name { get; set; } + + [XmlAttribute("value")] public string Value { get; set; } } diff --git a/MediaBrowser.Dlna/DlnaManager.cs b/MediaBrowser.Dlna/DlnaManager.cs index 78876d239..9d9df01e6 100644 --- a/MediaBrowser.Dlna/DlnaManager.cs +++ b/MediaBrowser.Dlna/DlnaManager.cs @@ -1,10 +1,14 @@ using MediaBrowser.Common.Configuration; +using MediaBrowser.Common.Extensions; using MediaBrowser.Common.IO; using MediaBrowser.Controller.Dlna; using MediaBrowser.Dlna.Profiles; +using MediaBrowser.Model.Dlna; +using MediaBrowser.Model.Logging; using MediaBrowser.Model.Serialization; using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Text.RegularExpressions; @@ -12,22 +16,37 @@ namespace MediaBrowser.Dlna { public class DlnaManager : IDlnaManager { - private IApplicationPaths _appPaths; + private readonly IApplicationPaths _appPaths; private readonly IXmlSerializer _xmlSerializer; private readonly IFileSystem _fileSystem; - private readonly IJsonSerializer _jsonSerializer; + private readonly ILogger _logger; - public DlnaManager(IXmlSerializer xmlSerializer, IFileSystem fileSystem, IJsonSerializer jsonSerializer) + public DlnaManager(IXmlSerializer xmlSerializer, IFileSystem fileSystem, IApplicationPaths appPaths, ILogger logger) { _xmlSerializer = xmlSerializer; _fileSystem = fileSystem; - _jsonSerializer = jsonSerializer; + _appPaths = appPaths; + _logger = logger; - GetProfiles(); + //DumpProfiles(); } public IEnumerable<DeviceProfile> GetProfiles() { + ExtractProfilesIfNeeded(); + + var list = GetProfiles(UserProfilesPath) + .OrderBy(i => i.Name) + .ToList(); + + list.AddRange(GetProfiles(SystemProfilesPath) + .OrderBy(i => i.Name)); + + return list; + } + + private void DumpProfiles() + { var list = new List<DeviceProfile> { new SamsungSmartTvProfile(), @@ -45,16 +64,40 @@ namespace MediaBrowser.Dlna new DenonAvrProfile(), new LinksysDMA2100Profile(), new LgTvProfile(), - new Foobar2000Profile() + new Foobar2000Profile(), + new DefaultProfile() }; foreach (var item in list) { - //_xmlSerializer.SerializeToFile(item, "d:\\" + _fileSystem.GetValidFilename(item.Name) + ".xml"); - //_jsonSerializer.SerializeToFile(item, "d:\\" + _fileSystem.GetValidFilename(item.Name) + ".json"); + _xmlSerializer.SerializeToFile(item, "d:\\" + _fileSystem.GetValidFilename(item.Name) + ".xml"); } + } - return list; + private bool _extracted; + private readonly object _syncLock = new object(); + private void ExtractProfilesIfNeeded() + { + if (!_extracted) + { + lock (_syncLock) + { + if (!_extracted) + { + try + { + ExtractSystemProfiles(); + } + catch (Exception ex) + { + _logger.ErrorException("Error extracting DLNA profiles.", ex); + } + + _extracted = true; + } + + } + } } public DeviceProfile GetDefaultProfile() @@ -64,8 +107,12 @@ namespace MediaBrowser.Dlna public DeviceProfile GetProfile(DeviceIdentification deviceInfo) { - return GetProfiles().FirstOrDefault(i => IsMatch(deviceInfo, i.Identification)) ?? + var profile = GetProfiles().FirstOrDefault(i => IsMatch(deviceInfo, i.Identification)) ?? GetDefaultProfile(); + + _logger.Debug("Found matching device profile: {0}", profile.Name); + + return profile; } private bool IsMatch(DeviceIdentification deviceInfo, DeviceIdentification profileInfo) @@ -159,5 +206,145 @@ namespace MediaBrowser.Dlna return false; } + + private string UserProfilesPath + { + get + { + return Path.Combine(_appPaths.ConfigurationDirectoryPath, "dlna", "user"); + } + } + + private string SystemProfilesPath + { + get + { + return Path.Combine(_appPaths.ConfigurationDirectoryPath, "dlna", "system"); + } + } + + private IEnumerable<DeviceProfile> GetProfiles(string path) + { + try + { + return new DirectoryInfo(path) + .EnumerateFiles("*", SearchOption.TopDirectoryOnly) + .Where(i => string.Equals(i.Extension, ".xml", StringComparison.OrdinalIgnoreCase)) + .Select(i => ParseProfileXmlFile(i.FullName)) + .Where(i => i != null) + .ToList(); + } + catch (DirectoryNotFoundException) + { + return new List<DeviceProfile>(); + } + } + + private DeviceProfile ParseProfileXmlFile(string path) + { + try + { + var profile = (DeviceProfile)_xmlSerializer.DeserializeFromFile(typeof(DeviceProfile), path); + + profile.Id = path.ToLower().GetMD5().ToString("N"); + + return profile; + } + catch (Exception ex) + { + _logger.ErrorException("Error parsing profile xml: {0}", ex, path); + + return null; + } + } + + public DeviceProfile GetProfile(string id) + { + var info = GetProfileInfosInternal().First(i => string.Equals(i.Info.Id, id)); + + return ParseProfileXmlFile(info.Path); + } + + private IEnumerable<InternalProfileInfo> GetProfileInfosInternal() + { + ExtractProfilesIfNeeded(); + + return GetProfileInfos(UserProfilesPath, DeviceProfileType.User) + .Concat(GetProfileInfos(SystemProfilesPath, DeviceProfileType.System)) + .OrderBy(i => i.Info.Type == DeviceProfileType.User ? 0 : 1) + .ThenBy(i => i.Info.Name); + } + + public IEnumerable<DeviceProfileInfo> GetProfileInfos() + { + return GetProfileInfosInternal().Select(i => i.Info); + } + + private IEnumerable<InternalProfileInfo> GetProfileInfos(string path, DeviceProfileType type) + { + try + { + return new DirectoryInfo(path) + .EnumerateFiles("*", SearchOption.TopDirectoryOnly) + .Where(i => string.Equals(i.Extension, ".xml", StringComparison.OrdinalIgnoreCase)) + .Select(i => new InternalProfileInfo + { + Path = i.FullName, + + Info = new DeviceProfileInfo + { + Id = i.FullName.ToLower().GetMD5().ToString("N"), + Name = Path.GetFileNameWithoutExtension(i.FullName), + Type = type + } + }) + .ToList(); + } + catch (DirectoryNotFoundException) + { + return new List<InternalProfileInfo>(); + } + } + + private void ExtractSystemProfiles() + { + var assembly = GetType().Assembly; + var namespaceName = GetType().Namespace + ".Profiles.Xml."; + + var systemProfilesPath = SystemProfilesPath; + + foreach (var name in assembly.GetManifestResourceNames() + .Where(i => i.StartsWith(namespaceName)) + .ToList()) + { + var filename = Path.GetFileName(name).Substring(namespaceName.Length); + + var path = Path.Combine(systemProfilesPath, filename); + + using (var stream = assembly.GetManifestResourceStream(name)) + { + var fileInfo = new FileInfo(path); + + if (!fileInfo.Exists || fileInfo.Length != stream.Length) + { + Directory.CreateDirectory(systemProfilesPath); + + using (var fileStream = _fileSystem.GetFileStream(path, FileMode.Create, FileAccess.Write, FileShare.Read)) + { + stream.CopyTo(fileStream); + } + } + } + } + + // Not necessary, but just to make it easy to find + Directory.CreateDirectory(UserProfilesPath); + } + + class InternalProfileInfo + { + internal DeviceProfileInfo Info { get; set; } + internal string Path { get; set; } + } } }
\ No newline at end of file diff --git a/MediaBrowser.Dlna/MediaBrowser.Dlna.csproj b/MediaBrowser.Dlna/MediaBrowser.Dlna.csproj index bdfcae39b..df1fed12f 100644 --- a/MediaBrowser.Dlna/MediaBrowser.Dlna.csproj +++ b/MediaBrowser.Dlna/MediaBrowser.Dlna.csproj @@ -117,7 +117,27 @@ <Name>MediaBrowser.Model</Name> </ProjectReference> </ItemGroup> - <ItemGroup /> + <ItemGroup> + <EmbeddedResource Include="Profiles\Xml\Denon AVR.xml" /> + <EmbeddedResource Include="Profiles\Xml\foobar2000.xml" /> + <EmbeddedResource Include="Profiles\Xml\LG Smart TV.xml" /> + <EmbeddedResource Include="Profiles\Xml\Linksys DMA2100.xml" /> + <EmbeddedResource Include="Profiles\Xml\Panasonic Viera.xml" /> + <EmbeddedResource Include="Profiles\Xml\Samsung Smart TV.xml" /> + <EmbeddedResource Include="Profiles\Xml\Sony Blu-ray Player 2013.xml" /> + <EmbeddedResource Include="Profiles\Xml\Sony Blu-ray Player.xml" /> + <EmbeddedResource Include="Profiles\Xml\Sony Bravia %282010%29.xml" /> + <EmbeddedResource Include="Profiles\Xml\Sony Bravia %282011%29.xml" /> + <EmbeddedResource Include="Profiles\Xml\Sony Bravia %282012%29.xml" /> + <EmbeddedResource Include="Profiles\Xml\Sony Bravia %282013%29.xml" /> + <EmbeddedResource Include="Profiles\Xml\Sony PlayStation 3.xml" /> + <EmbeddedResource Include="Profiles\Xml\WDTV Live.xml" /> + <EmbeddedResource Include="Profiles\Xml\Xbox 360.xml" /> + <EmbeddedResource Include="Profiles\Xml\Xbox One.xml" /> + </ItemGroup> + <ItemGroup> + <EmbeddedResource Include="Profiles\Xml\Default.xml" /> + </ItemGroup> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <!-- To modify your build process, add your task inside one of the targets below and uncomment it. Other similar extension points exist, see Microsoft.Common.targets. diff --git a/MediaBrowser.Dlna/PlayTo/CurrentIdEventArgs.cs b/MediaBrowser.Dlna/PlayTo/CurrentIdEventArgs.cs index 24158b890..c34293e52 100644 --- a/MediaBrowser.Dlna/PlayTo/CurrentIdEventArgs.cs +++ b/MediaBrowser.Dlna/PlayTo/CurrentIdEventArgs.cs @@ -4,18 +4,6 @@ namespace MediaBrowser.Dlna.PlayTo { public class CurrentIdEventArgs : EventArgs { - public Guid Id { get; set; } - - public CurrentIdEventArgs(string id) - { - if (string.IsNullOrWhiteSpace(id) || id == "0") - { - Id = Guid.Empty; - } - else - { - Id = new Guid(id); - } - } + public string Id { get; set; } } } diff --git a/MediaBrowser.Dlna/PlayTo/Device.cs b/MediaBrowser.Dlna/PlayTo/Device.cs index a677cf5dd..fa0bfbca8 100644 --- a/MediaBrowser.Dlna/PlayTo/Device.cs +++ b/MediaBrowser.Dlna/PlayTo/Device.cs @@ -42,6 +42,7 @@ namespace MediaBrowser.Dlna.PlayTo if (_currentId == value) return; _currentId = value; + NotifyCurrentIdChanged(value); } } @@ -250,7 +251,7 @@ namespace MediaBrowser.Dlna.PlayTo StopTimer(); await SetStop().ConfigureAwait(false); - CurrentId = "0"; + CurrentId = null; var command = AvCommands.ServiceActions.FirstOrDefault(c => c.Name == "SetAVTransportURI"); if (command == null) @@ -514,7 +515,7 @@ namespace MediaBrowser.Dlna.PlayTo if (String.IsNullOrEmpty(track)) { - CurrentId = "0"; + CurrentId = null; return; } @@ -775,7 +776,7 @@ namespace MediaBrowser.Dlna.PlayTo private void NotifyCurrentIdChanged(string value) { if (CurrentIdChanged != null) - CurrentIdChanged.Invoke(this, new CurrentIdEventArgs(value)); + CurrentIdChanged.Invoke(this, new CurrentIdEventArgs { Id = value }); } #endregion diff --git a/MediaBrowser.Dlna/PlayTo/DlnaController.cs b/MediaBrowser.Dlna/PlayTo/DlnaController.cs index 0b0c03fcd..f0303bd49 100644 --- a/MediaBrowser.Dlna/PlayTo/DlnaController.cs +++ b/MediaBrowser.Dlna/PlayTo/DlnaController.cs @@ -20,7 +20,7 @@ namespace MediaBrowser.Dlna.PlayTo public class PlayToController : ISessionController, IDisposable { private Device _device; - private BaseItem _currentItem = null; + private BaseItem _currentItem; private readonly SessionInfo _session; private readonly ISessionManager _sessionManager; private readonly IItemRepository _itemRepository; @@ -30,7 +30,7 @@ namespace MediaBrowser.Dlna.PlayTo private readonly IDlnaManager _dlnaManager; private readonly IUserManager _userManager; private readonly IServerApplicationHost _appHost; - private bool _playbackStarted = false; + private bool _playbackStarted; private const int UpdateTimerIntervalMs = 1000; @@ -103,22 +103,27 @@ namespace MediaBrowser.Dlna.PlayTo async void Device_CurrentIdChanged(object sender, CurrentIdEventArgs e) { - if (e.Id != Guid.Empty) + if (!string.IsNullOrWhiteSpace(e.Id)) { - if (_currentItem != null && _currentItem.Id == e.Id) + Guid guid; + + if (Guid.TryParse(e.Id, out guid)) { - return; - } + if (_currentItem != null && _currentItem.Id == guid) + { + return; + } - var item = _libraryManager.GetItemById(e.Id); + var item = _libraryManager.GetItemById(guid); - if (item != null) - { - _logger.Debug("{0} - CurrentId {1}", _session.DeviceName, item.Id); - _currentItem = item; - _playbackStarted = false; + if (item != null) + { + _logger.Debug("{0} - CurrentId {1}", _session.DeviceName, item.Id); + _currentItem = item; + _playbackStarted = false; - await ReportProgress().ConfigureAwait(false); + await ReportProgress().ConfigureAwait(false); + } } } } @@ -418,6 +423,7 @@ namespace MediaBrowser.Dlna.PlayTo var playlistItem = GetPlaylistItem(item, streams, profile); playlistItem.StartPositionTicks = startPostionTicks; + playlistItem.DeviceProfileId = profile.Id; if (playlistItem.MediaType == DlnaProfileType.Audio) { diff --git a/MediaBrowser.Dlna/PlayTo/PlaylistItem.cs b/MediaBrowser.Dlna/PlayTo/PlaylistItem.cs index e1eea0824..50605c61f 100644 --- a/MediaBrowser.Dlna/PlayTo/PlaylistItem.cs +++ b/MediaBrowser.Dlna/PlayTo/PlaylistItem.cs @@ -46,6 +46,8 @@ namespace MediaBrowser.Dlna.PlayTo public int? MaxFramerate { get; set; } + public string DeviceProfileId { get; set; } + public PlaylistItem() { TranscodingSettings = new List<TranscodingSetting>(); diff --git a/MediaBrowser.Dlna/PlayTo/StreamHelper.cs b/MediaBrowser.Dlna/PlayTo/StreamHelper.cs index 30d787cf8..b65e94fd1 100644 --- a/MediaBrowser.Dlna/PlayTo/StreamHelper.cs +++ b/MediaBrowser.Dlna/PlayTo/StreamHelper.cs @@ -45,6 +45,7 @@ namespace MediaBrowser.Dlna.PlayTo var list = new List<string> { + item.DeviceProfileId ?? string.Empty, deviceProperties.UUID ?? string.Empty, item.MediaSourceId ?? string.Empty, (!item.Transcode).ToString().ToLower(), diff --git a/MediaBrowser.Dlna/Profiles/DefaultProfile.cs b/MediaBrowser.Dlna/Profiles/DefaultProfile.cs index 5eb364080..254a4d944 100644 --- a/MediaBrowser.Dlna/Profiles/DefaultProfile.cs +++ b/MediaBrowser.Dlna/Profiles/DefaultProfile.cs @@ -1,7 +1,9 @@ using MediaBrowser.Controller.Dlna; +using System.Xml.Serialization; namespace MediaBrowser.Dlna.Profiles { + [XmlRoot("Profile")] public class DefaultProfile : DeviceProfile { public DefaultProfile() diff --git a/MediaBrowser.Dlna/Profiles/DenonAvrProfile.cs b/MediaBrowser.Dlna/Profiles/DenonAvrProfile.cs index cca6ab6bb..3c5064ad6 100644 --- a/MediaBrowser.Dlna/Profiles/DenonAvrProfile.cs +++ b/MediaBrowser.Dlna/Profiles/DenonAvrProfile.cs @@ -1,7 +1,9 @@ -using MediaBrowser.Controller.Dlna; +using System.Xml.Serialization; +using MediaBrowser.Controller.Dlna; namespace MediaBrowser.Dlna.Profiles { + [XmlRoot("Profile")] public class DenonAvrProfile : DefaultProfile { public DenonAvrProfile() diff --git a/MediaBrowser.Dlna/Profiles/Foobar2000Profile.cs b/MediaBrowser.Dlna/Profiles/Foobar2000Profile.cs index 877f1a666..18a0e2172 100644 --- a/MediaBrowser.Dlna/Profiles/Foobar2000Profile.cs +++ b/MediaBrowser.Dlna/Profiles/Foobar2000Profile.cs @@ -1,7 +1,9 @@ -using MediaBrowser.Controller.Dlna; +using System.Xml.Serialization; +using MediaBrowser.Controller.Dlna; namespace MediaBrowser.Dlna.Profiles { + [XmlRoot("Profile")] public class Foobar2000Profile : DefaultProfile { public Foobar2000Profile() diff --git a/MediaBrowser.Dlna/Profiles/LgTvProfile.cs b/MediaBrowser.Dlna/Profiles/LgTvProfile.cs index ec20c9df8..7ca8069da 100644 --- a/MediaBrowser.Dlna/Profiles/LgTvProfile.cs +++ b/MediaBrowser.Dlna/Profiles/LgTvProfile.cs @@ -1,7 +1,9 @@ -using MediaBrowser.Controller.Dlna; +using System.Xml.Serialization; +using MediaBrowser.Controller.Dlna; namespace MediaBrowser.Dlna.Profiles { + [XmlRoot("Profile")] public class LgTvProfile : DefaultProfile { public LgTvProfile() diff --git a/MediaBrowser.Dlna/Profiles/LinksysDMA2100Profile.cs b/MediaBrowser.Dlna/Profiles/LinksysDMA2100Profile.cs index e7086c205..a64cd24f3 100644 --- a/MediaBrowser.Dlna/Profiles/LinksysDMA2100Profile.cs +++ b/MediaBrowser.Dlna/Profiles/LinksysDMA2100Profile.cs @@ -1,7 +1,9 @@ -using MediaBrowser.Controller.Dlna; +using System.Xml.Serialization; +using MediaBrowser.Controller.Dlna; namespace MediaBrowser.Dlna.Profiles { + [XmlRoot("Profile")] public class LinksysDMA2100Profile : DefaultProfile { public LinksysDMA2100Profile() diff --git a/MediaBrowser.Dlna/Profiles/PanasonicVieraProfile.cs b/MediaBrowser.Dlna/Profiles/PanasonicVieraProfile.cs index 6755c0680..64747776c 100644 --- a/MediaBrowser.Dlna/Profiles/PanasonicVieraProfile.cs +++ b/MediaBrowser.Dlna/Profiles/PanasonicVieraProfile.cs @@ -1,19 +1,21 @@ -using MediaBrowser.Controller.Dlna; +using System.Xml.Serialization; +using MediaBrowser.Controller.Dlna; namespace MediaBrowser.Dlna.Profiles { - public class PanasonicVieraProfile : DefaultProfile + [XmlRoot("Profile")] + public class PanasonicVieraProfile : DefaultProfile { - public PanasonicVieraProfile() - { - Name = "Panasonic Viera"; + public PanasonicVieraProfile() + { + Name = "Panasonic Viera"; - Identification = new DeviceIdentification - { - FriendlyName = @"VIERA", - Manufacturer = "Panasonic", + Identification = new DeviceIdentification + { + FriendlyName = @"VIERA", + Manufacturer = "Panasonic", - Headers = new[] + Headers = new[] { new HttpHeaderInfo { @@ -22,11 +24,11 @@ namespace MediaBrowser.Dlna.Profiles Match = HeaderMatchType.Substring } } - }; + }; - TimelineOffsetSeconds = 10; + TimelineOffsetSeconds = 10; - TranscodingProfiles = new[] + TranscodingProfiles = new[] { new TranscodingProfile { @@ -48,7 +50,7 @@ namespace MediaBrowser.Dlna.Profiles } }; - DirectPlayProfiles = new[] + DirectPlayProfiles = new[] { new DirectPlayProfile { @@ -127,7 +129,7 @@ namespace MediaBrowser.Dlna.Profiles } }; - ContainerProfiles = new[] + ContainerProfiles = new[] { new ContainerProfile { @@ -151,7 +153,7 @@ namespace MediaBrowser.Dlna.Profiles } }; - CodecProfiles = new[] + CodecProfiles = new[] { new CodecProfile { @@ -181,6 +183,6 @@ namespace MediaBrowser.Dlna.Profiles } } }; - } + } } } diff --git a/MediaBrowser.Dlna/Profiles/SamsungSmartTvProfile.cs b/MediaBrowser.Dlna/Profiles/SamsungSmartTvProfile.cs index fbbb7a594..1e0cc41a2 100644 --- a/MediaBrowser.Dlna/Profiles/SamsungSmartTvProfile.cs +++ b/MediaBrowser.Dlna/Profiles/SamsungSmartTvProfile.cs @@ -1,7 +1,9 @@ -using MediaBrowser.Controller.Dlna; +using System.Xml.Serialization; +using MediaBrowser.Controller.Dlna; namespace MediaBrowser.Dlna.Profiles { + [XmlRoot("Profile")] public class SamsungSmartTvProfile : DefaultProfile { public SamsungSmartTvProfile() diff --git a/MediaBrowser.Dlna/Profiles/SonyBlurayPlayer2013Profile.cs b/MediaBrowser.Dlna/Profiles/SonyBlurayPlayer2013Profile.cs index cec29b418..04309d55f 100644 --- a/MediaBrowser.Dlna/Profiles/SonyBlurayPlayer2013Profile.cs +++ b/MediaBrowser.Dlna/Profiles/SonyBlurayPlayer2013Profile.cs @@ -1,7 +1,9 @@ -using MediaBrowser.Controller.Dlna; +using System.Xml.Serialization; +using MediaBrowser.Controller.Dlna; namespace MediaBrowser.Dlna.Profiles { + [XmlRoot("Profile")] public class SonyBlurayPlayer2013Profile : DefaultProfile { public SonyBlurayPlayer2013Profile() diff --git a/MediaBrowser.Dlna/Profiles/SonyBlurayPlayerProfile.cs b/MediaBrowser.Dlna/Profiles/SonyBlurayPlayerProfile.cs index 2c678b11f..d9dfc1caf 100644 --- a/MediaBrowser.Dlna/Profiles/SonyBlurayPlayerProfile.cs +++ b/MediaBrowser.Dlna/Profiles/SonyBlurayPlayerProfile.cs @@ -1,7 +1,9 @@ -using MediaBrowser.Controller.Dlna; +using System.Xml.Serialization; +using MediaBrowser.Controller.Dlna; namespace MediaBrowser.Dlna.Profiles { + [XmlRoot("Profile")] public class SonyBlurayPlayerProfile : DefaultProfile { public SonyBlurayPlayerProfile() diff --git a/MediaBrowser.Dlna/Profiles/SonyBravia2010Profile.cs b/MediaBrowser.Dlna/Profiles/SonyBravia2010Profile.cs index 4cf108172..cb91de4a0 100644 --- a/MediaBrowser.Dlna/Profiles/SonyBravia2010Profile.cs +++ b/MediaBrowser.Dlna/Profiles/SonyBravia2010Profile.cs @@ -1,7 +1,9 @@ -using MediaBrowser.Controller.Dlna; +using System.Xml.Serialization; +using MediaBrowser.Controller.Dlna; namespace MediaBrowser.Dlna.Profiles { + [XmlRoot("Profile")] public class SonyBravia2010Profile : DefaultProfile { public SonyBravia2010Profile() diff --git a/MediaBrowser.Dlna/Profiles/SonyBravia2011Profile.cs b/MediaBrowser.Dlna/Profiles/SonyBravia2011Profile.cs index ec10f71aa..626a91a73 100644 --- a/MediaBrowser.Dlna/Profiles/SonyBravia2011Profile.cs +++ b/MediaBrowser.Dlna/Profiles/SonyBravia2011Profile.cs @@ -1,7 +1,9 @@ -using MediaBrowser.Controller.Dlna; +using System.Xml.Serialization; +using MediaBrowser.Controller.Dlna; namespace MediaBrowser.Dlna.Profiles { + [XmlRoot("Profile")] public class SonyBravia2011Profile : DefaultProfile { public SonyBravia2011Profile() diff --git a/MediaBrowser.Dlna/Profiles/SonyBravia2012Profile.cs b/MediaBrowser.Dlna/Profiles/SonyBravia2012Profile.cs index 21efc3b45..82b6b6d5f 100644 --- a/MediaBrowser.Dlna/Profiles/SonyBravia2012Profile.cs +++ b/MediaBrowser.Dlna/Profiles/SonyBravia2012Profile.cs @@ -1,7 +1,9 @@ -using MediaBrowser.Controller.Dlna; +using System.Xml.Serialization; +using MediaBrowser.Controller.Dlna; namespace MediaBrowser.Dlna.Profiles { + [XmlRoot("Profile")] public class SonyBravia2012Profile : DefaultProfile { public SonyBravia2012Profile() diff --git a/MediaBrowser.Dlna/Profiles/SonyBravia2013Profile.cs b/MediaBrowser.Dlna/Profiles/SonyBravia2013Profile.cs index b247c39ac..aec65e98e 100644 --- a/MediaBrowser.Dlna/Profiles/SonyBravia2013Profile.cs +++ b/MediaBrowser.Dlna/Profiles/SonyBravia2013Profile.cs @@ -1,7 +1,9 @@ -using MediaBrowser.Controller.Dlna; +using System.Xml.Serialization; +using MediaBrowser.Controller.Dlna; namespace MediaBrowser.Dlna.Profiles { + [XmlRoot("Profile")] public class SonyBravia2013Profile : DefaultProfile { public SonyBravia2013Profile() diff --git a/MediaBrowser.Dlna/Profiles/SonyPs3Profile.cs b/MediaBrowser.Dlna/Profiles/SonyPs3Profile.cs index 39490f806..7502201ea 100644 --- a/MediaBrowser.Dlna/Profiles/SonyPs3Profile.cs +++ b/MediaBrowser.Dlna/Profiles/SonyPs3Profile.cs @@ -1,7 +1,9 @@ -using MediaBrowser.Controller.Dlna; +using System.Xml.Serialization; +using MediaBrowser.Controller.Dlna; namespace MediaBrowser.Dlna.Profiles { + [XmlRoot("Profile")] public class SonyPs3Profile : DefaultProfile { public SonyPs3Profile() diff --git a/MediaBrowser.Dlna/Profiles/WdtvLiveProfile.cs b/MediaBrowser.Dlna/Profiles/WdtvLiveProfile.cs index 47c7b21cc..b0d65469d 100644 --- a/MediaBrowser.Dlna/Profiles/WdtvLiveProfile.cs +++ b/MediaBrowser.Dlna/Profiles/WdtvLiveProfile.cs @@ -1,7 +1,9 @@ -using MediaBrowser.Controller.Dlna; +using System.Xml.Serialization; +using MediaBrowser.Controller.Dlna; namespace MediaBrowser.Dlna.Profiles { + [XmlRoot("Profile")] public class WdtvLiveProfile : DefaultProfile { public WdtvLiveProfile() diff --git a/MediaBrowser.Dlna/Profiles/Xbox360Profile.cs b/MediaBrowser.Dlna/Profiles/Xbox360Profile.cs index 660d821d3..640317fbc 100644 --- a/MediaBrowser.Dlna/Profiles/Xbox360Profile.cs +++ b/MediaBrowser.Dlna/Profiles/Xbox360Profile.cs @@ -1,7 +1,9 @@ -using MediaBrowser.Controller.Dlna; +using System.Xml.Serialization; +using MediaBrowser.Controller.Dlna; namespace MediaBrowser.Dlna.Profiles { + [XmlRoot("Profile")] public class Xbox360Profile : DefaultProfile { public Xbox360Profile() diff --git a/MediaBrowser.Dlna/Profiles/XboxOneProfile.cs b/MediaBrowser.Dlna/Profiles/XboxOneProfile.cs index 0daa5d7a2..058c69e1f 100644 --- a/MediaBrowser.Dlna/Profiles/XboxOneProfile.cs +++ b/MediaBrowser.Dlna/Profiles/XboxOneProfile.cs @@ -1,7 +1,9 @@ -using MediaBrowser.Controller.Dlna; +using System.Xml.Serialization; +using MediaBrowser.Controller.Dlna; namespace MediaBrowser.Dlna.Profiles { + [XmlRoot("Profile")] public class XboxOneProfile : DefaultProfile { public XboxOneProfile() diff --git a/MediaBrowser.Dlna/Profiles/Xml/Default.xml b/MediaBrowser.Dlna/Profiles/Xml/Default.xml new file mode 100644 index 000000000..883f0295c --- /dev/null +++ b/MediaBrowser.Dlna/Profiles/Xml/Default.xml @@ -0,0 +1,39 @@ +<?xml version="1.0"?> +<Profile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <Name>Media Browser</Name> + <Manufacturer>Media Browser</Manufacturer> + <ManufacturerUrl>http://mediabrowser3.com/</ManufacturerUrl> + <ModelName>Media Browser</ModelName> + <ModelDescription>Media Browser</ModelDescription> + <ModelNumber>Media Browser</ModelNumber> + <ModelUrl>http://mediabrowser3.com/</ModelUrl> + <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> + <SupportsAlbumArtInDidl>false</SupportsAlbumArtInDidl> + <ProtocolInfo>DLNA</ProtocolInfo> + <TimelineOffsetSeconds>0</TimelineOffsetSeconds> + <RequiresPlainVideoItems>false</RequiresPlainVideoItems> + <RequiresPlainFolders>false</RequiresPlainFolders> + <DirectPlayProfiles> + <DirectPlayProfile container="mp3,wma" type="Audio" /> + <DirectPlayProfile container="avi,mp4" type="Video" /> + </DirectPlayProfiles> + <TranscodingProfiles> + <TranscodingProfile container="mp3" type="Audio" audioCodec="mp3" estimateContentLength="false" enableMpegtsM2TsMode="false" transcodeSeekInfo="Auto"> + <Settings /> + </TranscodingProfile> + <TranscodingProfile container="ts" type="Video" videoCodec="h264" audioCodec="aac" estimateContentLength="false" enableMpegtsM2TsMode="false" transcodeSeekInfo="Auto"> + <Settings> + <TranscodingSetting name="VideoProfile" value="baseline" /> + </Settings> + </TranscodingProfile> + </TranscodingProfiles> + <ContainerProfiles /> + <CodecProfiles> + <CodecProfile type="VideoCodec"> + <Conditions> + <ProfileCondition condition="LessThanEqual" property="VideoLevel" value="3" isRequired="false" /> + </Conditions> + </CodecProfile> + </CodecProfiles> + <MediaProfiles /> +</Profile>
\ No newline at end of file diff --git a/MediaBrowser.Dlna/Profiles/Xml/Denon AVR.xml b/MediaBrowser.Dlna/Profiles/Xml/Denon AVR.xml new file mode 100644 index 000000000..1939b85d8 --- /dev/null +++ b/MediaBrowser.Dlna/Profiles/Xml/Denon AVR.xml @@ -0,0 +1,43 @@ +<?xml version="1.0"?> +<Profile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <Name>Denon AVR</Name> + <Identification> + <FriendlyName>Denon:\[AVR:.*</FriendlyName> + <Manufacturer>Denon</Manufacturer> + <Headers /> + </Identification> + <Manufacturer>Media Browser</Manufacturer> + <ManufacturerUrl>http://mediabrowser3.com/</ManufacturerUrl> + <ModelName>Media Browser</ModelName> + <ModelDescription>Media Browser</ModelDescription> + <ModelNumber>Media Browser</ModelNumber> + <ModelUrl>http://mediabrowser3.com/</ModelUrl> + <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> + <SupportsAlbumArtInDidl>false</SupportsAlbumArtInDidl> + <ProtocolInfo>DLNA</ProtocolInfo> + <TimelineOffsetSeconds>0</TimelineOffsetSeconds> + <RequiresPlainVideoItems>false</RequiresPlainVideoItems> + <RequiresPlainFolders>false</RequiresPlainFolders> + <DirectPlayProfiles> + <DirectPlayProfile container="mp3,flac,m4a,wma" type="Audio" /> + </DirectPlayProfiles> + <TranscodingProfiles> + <TranscodingProfile container="mp3" type="Audio" audioCodec="mp3" estimateContentLength="false" enableMpegtsM2TsMode="false" transcodeSeekInfo="Auto"> + <Settings /> + </TranscodingProfile> + <TranscodingProfile container="ts" type="Video" videoCodec="h264" audioCodec="aac" estimateContentLength="false" enableMpegtsM2TsMode="false" transcodeSeekInfo="Auto"> + <Settings> + <TranscodingSetting name="VideoProfile" value="baseline" /> + </Settings> + </TranscodingProfile> + </TranscodingProfiles> + <ContainerProfiles /> + <CodecProfiles> + <CodecProfile type="VideoCodec"> + <Conditions> + <ProfileCondition condition="LessThanEqual" property="VideoLevel" value="3" isRequired="false" /> + </Conditions> + </CodecProfile> + </CodecProfiles> + <MediaProfiles /> +</Profile>
\ No newline at end of file diff --git a/MediaBrowser.Dlna/Profiles/Xml/LG Smart TV.xml b/MediaBrowser.Dlna/Profiles/Xml/LG Smart TV.xml new file mode 100644 index 000000000..f414f6ae5 --- /dev/null +++ b/MediaBrowser.Dlna/Profiles/Xml/LG Smart TV.xml @@ -0,0 +1,71 @@ +<?xml version="1.0"?> +<Profile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <Name>LG Smart TV</Name> + <Identification> + <FriendlyName>LG.*</FriendlyName> + <Headers> + <HttpHeaderInfo name="User-Agent" value="LG" match="Substring" /> + </Headers> + </Identification> + <Manufacturer>Media Browser</Manufacturer> + <ManufacturerUrl>http://mediabrowser3.com/</ManufacturerUrl> + <ModelName>Media Browser</ModelName> + <ModelDescription>Media Browser</ModelDescription> + <ModelNumber>Media Browser</ModelNumber> + <ModelUrl>http://mediabrowser3.com/</ModelUrl> + <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> + <SupportsAlbumArtInDidl>false</SupportsAlbumArtInDidl> + <ProtocolInfo>DLNA</ProtocolInfo> + <TimelineOffsetSeconds>10</TimelineOffsetSeconds> + <RequiresPlainVideoItems>false</RequiresPlainVideoItems> + <RequiresPlainFolders>false</RequiresPlainFolders> + <DirectPlayProfiles> + <DirectPlayProfile container="ts" audioCodec="aac,ac3,mp3" videoCodec="h264" type="Video" /> + <DirectPlayProfile container="mkv" audioCodec="aac,ac3,mp3" videoCodec="h264" type="Video" /> + <DirectPlayProfile container="mp4" audioCodec="aac,ac3,mp3" videoCodec="h264,mpeg4" type="Video" /> + <DirectPlayProfile container="mp3" audioCodec="mp3" type="Audio" /> + <DirectPlayProfile container="jpeg" type="Photo" /> + </DirectPlayProfiles> + <TranscodingProfiles> + <TranscodingProfile container="mp3" type="Audio" audioCodec="mp3" estimateContentLength="false" enableMpegtsM2TsMode="false" transcodeSeekInfo="Auto"> + <Settings /> + </TranscodingProfile> + <TranscodingProfile container="ts" type="Video" videoCodec="h264" audioCodec="ac3" estimateContentLength="false" enableMpegtsM2TsMode="false" transcodeSeekInfo="Auto"> + <Settings /> + </TranscodingProfile> + <TranscodingProfile container="jpeg" type="Photo" estimateContentLength="false" enableMpegtsM2TsMode="false" transcodeSeekInfo="Auto"> + <Settings /> + </TranscodingProfile> + </TranscodingProfiles> + <ContainerProfiles> + <ContainerProfile type="Photo"> + <Conditions> + <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" /> + <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" /> + </Conditions> + </ContainerProfile> + </ContainerProfiles> + <CodecProfiles> + <CodecProfile type="VideoCodec" codec="mpeg4"> + <Conditions> + <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" /> + <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" /> + <ProfileCondition condition="LessThanEqual" property="VideoFramerate" value="30" isRequired="true" /> + </Conditions> + </CodecProfile> + <CodecProfile type="VideoCodec" codec="h264"> + <Conditions> + <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" /> + <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" /> + <ProfileCondition condition="LessThanEqual" property="VideoFramerate" value="30" isRequired="true" /> + <ProfileCondition condition="LessThanEqual" property="VideoLevel" value="41" isRequired="true" /> + </Conditions> + </CodecProfile> + <CodecProfile type="VideoAudioCodec" codec="ac3,aac,mp3"> + <Conditions> + <ProfileCondition condition="LessThanEqual" property="AudioChannels" value="6" isRequired="true" /> + </Conditions> + </CodecProfile> + </CodecProfiles> + <MediaProfiles /> +</Profile>
\ No newline at end of file diff --git a/MediaBrowser.Dlna/Profiles/Xml/Linksys DMA2100.xml b/MediaBrowser.Dlna/Profiles/Xml/Linksys DMA2100.xml new file mode 100644 index 000000000..76dcc4cfd --- /dev/null +++ b/MediaBrowser.Dlna/Profiles/Xml/Linksys DMA2100.xml @@ -0,0 +1,43 @@ +<?xml version="1.0"?> +<Profile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <Name>Linksys DMA2100</Name> + <Identification> + <ModelName>DMA2100us</ModelName> + <Headers /> + </Identification> + <Manufacturer>Media Browser</Manufacturer> + <ManufacturerUrl>http://mediabrowser3.com/</ManufacturerUrl> + <ModelName>Media Browser</ModelName> + <ModelDescription>Media Browser</ModelDescription> + <ModelNumber>Media Browser</ModelNumber> + <ModelUrl>http://mediabrowser3.com/</ModelUrl> + <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> + <SupportsAlbumArtInDidl>false</SupportsAlbumArtInDidl> + <ProtocolInfo>DLNA</ProtocolInfo> + <TimelineOffsetSeconds>0</TimelineOffsetSeconds> + <RequiresPlainVideoItems>false</RequiresPlainVideoItems> + <RequiresPlainFolders>false</RequiresPlainFolders> + <DirectPlayProfiles> + <DirectPlayProfile container="mp3,flac,m4a,wma" type="Audio" /> + <DirectPlayProfile container="avi,mp4,mkv,ts" type="Video" /> + </DirectPlayProfiles> + <TranscodingProfiles> + <TranscodingProfile container="mp3" type="Audio" audioCodec="mp3" estimateContentLength="false" enableMpegtsM2TsMode="false" transcodeSeekInfo="Auto"> + <Settings /> + </TranscodingProfile> + <TranscodingProfile container="ts" type="Video" videoCodec="h264" audioCodec="aac" estimateContentLength="false" enableMpegtsM2TsMode="false" transcodeSeekInfo="Auto"> + <Settings> + <TranscodingSetting name="VideoProfile" value="baseline" /> + </Settings> + </TranscodingProfile> + </TranscodingProfiles> + <ContainerProfiles /> + <CodecProfiles> + <CodecProfile type="VideoCodec"> + <Conditions> + <ProfileCondition condition="LessThanEqual" property="VideoLevel" value="3" isRequired="false" /> + </Conditions> + </CodecProfile> + </CodecProfiles> + <MediaProfiles /> +</Profile>
\ No newline at end of file diff --git a/MediaBrowser.Dlna/Profiles/Xml/Panasonic Viera.xml b/MediaBrowser.Dlna/Profiles/Xml/Panasonic Viera.xml new file mode 100644 index 000000000..7c437b4e5 --- /dev/null +++ b/MediaBrowser.Dlna/Profiles/Xml/Panasonic Viera.xml @@ -0,0 +1,64 @@ +<?xml version="1.0"?> +<Profile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <Name>Panasonic Viera</Name> + <Identification> + <FriendlyName>VIERA</FriendlyName> + <Manufacturer>Panasonic</Manufacturer> + <Headers> + <HttpHeaderInfo name="User-Agent" value="Panasonic MIL DLNA" match="Substring" /> + </Headers> + </Identification> + <Manufacturer>Media Browser</Manufacturer> + <ManufacturerUrl>http://mediabrowser3.com/</ManufacturerUrl> + <ModelName>Media Browser</ModelName> + <ModelDescription>Media Browser</ModelDescription> + <ModelNumber>Media Browser</ModelNumber> + <ModelUrl>http://mediabrowser3.com/</ModelUrl> + <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> + <SupportsAlbumArtInDidl>false</SupportsAlbumArtInDidl> + <ProtocolInfo>DLNA</ProtocolInfo> + <TimelineOffsetSeconds>10</TimelineOffsetSeconds> + <RequiresPlainVideoItems>false</RequiresPlainVideoItems> + <RequiresPlainFolders>false</RequiresPlainFolders> + <DirectPlayProfiles> + <DirectPlayProfile container="mpeg" audioCodec="ac3,mp3" videoCodec="mpeg2video,mpeg4" type="Video" /> + <DirectPlayProfile container="mkv" audioCodec="aac,ac3,mp3,pcm" videoCodec="h264" type="Video" /> + <DirectPlayProfile container="ts" audioCodec="aac,mp3" videoCodec="h264" type="Video" /> + <DirectPlayProfile container="mp4" audioCodec="aac,ac3,mp3,pcm" videoCodec="h264" type="Video" /> + <DirectPlayProfile container="mov" audioCodec="aac,pcm" videoCodec="h264" type="Video" /> + <DirectPlayProfile container="avi" audioCodec="pcm" videoCodec="mpeg4" type="Video" /> + <DirectPlayProfile container="flv" audioCodec="aac" videoCodec="h264" type="Video" /> + <DirectPlayProfile container="mp3" audioCodec="mp3" type="Audio" /> + <DirectPlayProfile container="mp4" audioCodec="aac" type="Audio" /> + <DirectPlayProfile container="jpeg" type="Photo" /> + </DirectPlayProfiles> + <TranscodingProfiles> + <TranscodingProfile container="mp3" type="Audio" audioCodec="mp3" estimateContentLength="false" enableMpegtsM2TsMode="false" transcodeSeekInfo="Auto"> + <Settings /> + </TranscodingProfile> + <TranscodingProfile container="ts" type="Video" videoCodec="h264" audioCodec="ac3" estimateContentLength="false" enableMpegtsM2TsMode="false" transcodeSeekInfo="Auto"> + <Settings /> + </TranscodingProfile> + <TranscodingProfile container="jpeg" type="Photo" estimateContentLength="false" enableMpegtsM2TsMode="false" transcodeSeekInfo="Auto"> + <Settings /> + </TranscodingProfile> + </TranscodingProfiles> + <ContainerProfiles> + <ContainerProfile type="Photo"> + <Conditions> + <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" /> + <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" /> + </Conditions> + </ContainerProfile> + </ContainerProfiles> + <CodecProfiles> + <CodecProfile type="VideoCodec"> + <Conditions> + <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" /> + <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" /> + <ProfileCondition condition="LessThanEqual" property="VideoBitDepth" value="8" isRequired="false" /> + </Conditions> + </CodecProfile> + </CodecProfiles> + <MediaProfiles /> +</Profile>
\ No newline at end of file diff --git a/MediaBrowser.Dlna/Profiles/Xml/Samsung Smart TV.xml b/MediaBrowser.Dlna/Profiles/Xml/Samsung Smart TV.xml new file mode 100644 index 000000000..c480a255a --- /dev/null +++ b/MediaBrowser.Dlna/Profiles/Xml/Samsung Smart TV.xml @@ -0,0 +1,100 @@ +<?xml version="1.0"?> +<Profile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <Name>Samsung Smart TV</Name> + <Identification> + <ModelUrl>samsung.com</ModelUrl> + <Headers /> + </Identification> + <Manufacturer>Media Browser</Manufacturer> + <ManufacturerUrl>http://mediabrowser3.com/</ManufacturerUrl> + <ModelName>Media Browser</ModelName> + <ModelDescription>Media Browser</ModelDescription> + <ModelNumber>Media Browser</ModelNumber> + <ModelUrl>http://mediabrowser3.com/</ModelUrl> + <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> + <SupportsAlbumArtInDidl>true</SupportsAlbumArtInDidl> + <ProtocolInfo>DLNA</ProtocolInfo> + <TimelineOffsetSeconds>0</TimelineOffsetSeconds> + <RequiresPlainVideoItems>false</RequiresPlainVideoItems> + <RequiresPlainFolders>false</RequiresPlainFolders> + <DirectPlayProfiles> + <DirectPlayProfile container="asf" audioCodec="mp3,ac3,wmav2,wmapro,wmavoice" videoCodec="h264,mpeg4,mjpeg" type="Video" /> + <DirectPlayProfile container="avi" audioCodec="mp3,ac3,dca" videoCodec="h264,mpeg4,mjpeg" type="Video" /> + <DirectPlayProfile container="mkv" audioCodec="mp3,ac3,dca,aac" videoCodec="h264,mpeg4,mjpeg4" type="Video" /> + <DirectPlayProfile container="mp4" audioCodec="mp3,aac" videoCodec="h264,mpeg4" type="Video" /> + <DirectPlayProfile container="3gpp" audioCodec="aac,he-aac" videoCodec="h264,mpeg4" type="Video" /> + <DirectPlayProfile container="mpg,mpeg" audioCodec="ac3,mp2,mp3,aac" videoCodec="mpeg1video,mpeg2video,h264" type="Video" /> + <DirectPlayProfile container="vro,vob" audioCodec="ac3,mp2,mp3" videoCodec="mpeg1video,mpeg2video" type="Video" /> + <DirectPlayProfile container="ts" audioCodec="ac3,aac,mp3,eac3" videoCodec="mpeg2video,h264,vc1" type="Video" /> + <DirectPlayProfile container="asf" audioCodec="wmav2,wmavoice" videoCodec="wmv2,wmv3" type="Video" /> + <DirectPlayProfile container="mp3" audioCodec="mp3" type="Audio" /> + <DirectPlayProfile container="jpeg" type="Photo" /> + </DirectPlayProfiles> + <TranscodingProfiles> + <TranscodingProfile container="mp3" type="Audio" audioCodec="mp3" estimateContentLength="false" enableMpegtsM2TsMode="false" transcodeSeekInfo="Auto"> + <Settings /> + </TranscodingProfile> + <TranscodingProfile container="ts" type="Video" videoCodec="h264" audioCodec="ac3" estimateContentLength="false" enableMpegtsM2TsMode="false" transcodeSeekInfo="Auto"> + <Settings /> + </TranscodingProfile> + <TranscodingProfile container="jpeg" type="Photo" estimateContentLength="false" enableMpegtsM2TsMode="false" transcodeSeekInfo="Auto"> + <Settings /> + </TranscodingProfile> + </TranscodingProfiles> + <ContainerProfiles> + <ContainerProfile type="Photo"> + <Conditions> + <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" /> + <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" /> + </Conditions> + </ContainerProfile> + </ContainerProfiles> + <CodecProfiles> + <CodecProfile type="VideoCodec" codec="mpeg2video"> + <Conditions> + <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" /> + <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" /> + <ProfileCondition condition="LessThanEqual" property="VideoFramerate" value="30" isRequired="true" /> + <ProfileCondition condition="LessThanEqual" property="VideoBitrate" value="30720000" isRequired="true" /> + </Conditions> + </CodecProfile> + <CodecProfile type="VideoCodec" codec="mpeg4"> + <Conditions> + <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" /> + <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" /> + <ProfileCondition condition="LessThanEqual" property="VideoFramerate" value="30" isRequired="true" /> + <ProfileCondition condition="LessThanEqual" property="VideoBitrate" value="8192000" isRequired="true" /> + </Conditions> + </CodecProfile> + <CodecProfile type="VideoCodec" codec="h264"> + <Conditions> + <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" /> + <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" /> + <ProfileCondition condition="LessThanEqual" property="VideoFramerate" value="30" isRequired="true" /> + <ProfileCondition condition="LessThanEqual" property="VideoBitrate" value="37500000" isRequired="true" /> + <ProfileCondition condition="LessThanEqual" property="VideoLevel" value="41" isRequired="true" /> + </Conditions> + </CodecProfile> + <CodecProfile type="VideoCodec" codec="wmv2,wmv3,vc1"> + <Conditions> + <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" /> + <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" /> + <ProfileCondition condition="LessThanEqual" property="VideoFramerate" value="30" isRequired="true" /> + <ProfileCondition condition="LessThanEqual" property="VideoBitrate" value="25600000" isRequired="true" /> + </Conditions> + </CodecProfile> + <CodecProfile type="VideoAudioCodec" codec="ac3,wmav2,dca,aac,mp3"> + <Conditions> + <ProfileCondition condition="LessThanEqual" property="AudioChannels" value="6" isRequired="true" /> + </Conditions> + </CodecProfile> + </CodecProfiles> + <MediaProfiles> + <MediaProfile container="avi" type="Video" mimeType="video/x-msvideo"> + <Conditions /> + </MediaProfile> + <MediaProfile container="mkv" type="Video" mimeType="video/x-mkv"> + <Conditions /> + </MediaProfile> + </MediaProfiles> +</Profile>
\ No newline at end of file diff --git a/MediaBrowser.Dlna/Profiles/Xml/Sony Blu-ray Player 2013.xml b/MediaBrowser.Dlna/Profiles/Xml/Sony Blu-ray Player 2013.xml new file mode 100644 index 000000000..f1840c31e --- /dev/null +++ b/MediaBrowser.Dlna/Profiles/Xml/Sony Blu-ray Player 2013.xml @@ -0,0 +1,67 @@ +<?xml version="1.0"?> +<Profile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <Name>Sony Blu-ray Player 2013</Name> + <Identification> + <FriendlyName>Blu-ray Disc Player</FriendlyName> + <ModelNumber>BDP-2013</ModelNumber> + <Manufacturer>Sony</Manufacturer> + <Headers /> + </Identification> + <Manufacturer>Microsoft Corporation</Manufacturer> + <ManufacturerUrl>http://mediabrowser3.com/</ManufacturerUrl> + <ModelName>Windows Media Player Sharing</ModelName> + <ModelDescription>Media Browser</ModelDescription> + <ModelNumber>3.0</ModelNumber> + <ModelUrl>http://mediabrowser3.com/</ModelUrl> + <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> + <SupportsAlbumArtInDidl>false</SupportsAlbumArtInDidl> + <ProtocolInfo>http-get:*:video/divx:DLNA.ORG_PN=MATROSKA;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/mpeg:DLNA.ORG_PN=MPEG_PS_PAL;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/mpeg:DLNA.ORG_PN=MPEG_PS_NTSC;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=MPEG_TS_SD_EU;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=MPEG_TS_SD_NA;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=MPEG_TS_SD_KO;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:audio/x-ms-wma:DLNA.ORG_PN=WMABASE;DLNA.ORG_OP=01;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:audio/x-ms-wma:DLNA.ORG_PN=WMAFULL;DLNA.ORG_OP=01;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/mp4:DLNA.ORG_PN=AVC_MP4_MP_SD_AAC_MULT5;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:audio/mpeg:DLNA.ORG_PN=MP3;DLNA.ORG_OP=01;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:audio/L16;rate=44100;channels=1:DLNA.ORG_PN=LPCM;DLNA.ORG_OP=01;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:audio/L16;rate=44100;channels=2:DLNA.ORG_PN=LPCM;DLNA.ORG_OP=01;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:audio/L16;rate=48000;channels=1:DLNA.ORG_PN=LPCM;DLNA.ORG_OP=01;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:audio/L16;rate=48000;channels=2:DLNA.ORG_PN=LPCM;DLNA.ORG_OP=01;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:audio/mp4:DLNA.ORG_PN=AAC_ISO;DLNA.ORG_OP=01;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:audio/mp4:DLNA.ORG_PN=AAC_ISO_320;DLNA.ORG_OP=01;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:audio/vnd.dlna.adts:DLNA.ORG_PN=AAC_ADTS;DLNA.ORG_OP=01;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:audio/vnd.dlna.adts:DLNA.ORG_PN=AAC_ADTS_320;DLNA.ORG_OP=01;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:audio/flac:DLNA.ORG_PN=FLAC;DLNA.ORG_OP=01;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:audio/ogg:DLNA.ORG_PN=OGG;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:*:image/jpeg:DLNA.ORG_PN=JPEG_MED;DLNA.ORG_OP=00;DLNA.ORG_FLAGS=00D00000000000000000000000000000,http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_LRG;DLNA.ORG_OP=00;DLNA.ORG_FLAGS=00D00000000000000000000000000000,http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_TN;DLNA.ORG_OP=00;DLNA.ORG_FLAGS=00D00000000000000000000000000000,http-get:*:image/png:DLNA.ORG_PN=PNG_LRG;DLNA.ORG_OP=00;DLNA.ORG_FLAGS=00D00000000000000000000000000000,http-get:*:image/png:DLNA.ORG_PN=PNG_TN;DLNA.ORG_OP=00;DLNA.ORG_FLAGS=00D00000000000000000000000000000,http-get:*:image/gif:DLNA.ORG_PN=GIF_LRG;DLNA.ORG_OP=00;DLNA.ORG_FLAGS=00D00000000000000000000000000000,http-get:*:video/mpeg:DLNA.ORG_PN=MPEG1;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=MPEG_TS_SD_EU_T;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/mpeg:DLNA.ORG_PN=MPEG_TS_SD_EU_ISO;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=MPEG_TS_SD_NA_T;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/mpeg:DLNA.ORG_PN=MPEG_TS_SD_NA_ISO;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=MPEG_TS_SD_KO_T;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/mpeg:DLNA.ORG_PN=MPEG_TS_SD_KO_ISO;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=MPEG_TS_JP_T;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/x-msvideo:DLNA.ORG_PN=AVI;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/x-flv:DLNA.ORG_PN=FLV;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/x-ms-dvr:DLNA.ORG_PN=DVR_MS;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/wtv:DLNA.ORG_PN=WTV;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/ogg:DLNA.ORG_PN=OGV;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/vnd.rn-realvideo:DLNA.ORG_PN=REAL_VIDEO;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/x-ms-wmv:DLNA.ORG_PN=WMVMED_BASE;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/x-ms-wmv:DLNA.ORG_PN=WMVMED_FULL;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/x-ms-wmv:DLNA.ORG_PN=WMVHIGH_FULL;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/x-ms-wmv:DLNA.ORG_PN=WMVMED_PRO;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/x-ms-wmv:DLNA.ORG_PN=WMVHIGH_PRO;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/x-ms-asf:DLNA.ORG_PN=VC1_ASF_AP_L1_WMA;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/x-ms-asf:DLNA.ORG_PN=VC1_ASF_AP_L2_WMA;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/x-ms-asf:DLNA.ORG_PN=VC1_ASF_AP_L3_WMA;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/3gpp:DLNA.ORG_PN=MPEG4_P2_3GPP_SP_L0B_AAC;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/3gpp:DLNA.ORG_PN=MPEG4_P2_3GPP_SP_L0B_AMR;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/3gpp:DLNA.ORG_PN=MPEG4_H263_3GPP_P0_L10_AMR;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/3gpp:DLNA.ORG_PN=MPEG4_H263_MP4_P0_L10_AAC;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000</ProtocolInfo> + <TimelineOffsetSeconds>0</TimelineOffsetSeconds> + <RequiresPlainVideoItems>false</RequiresPlainVideoItems> + <RequiresPlainFolders>false</RequiresPlainFolders> + <DirectPlayProfiles> + <DirectPlayProfile container="ts" audioCodec="ac3,aac,mp3,pcm" videoCodec="mpeg1video,mpeg2video,h264" type="Video" /> + <DirectPlayProfile container="mpeg" audioCodec="ac3,mp3,mp2,pcm" videoCodec="mpeg1video,mpeg2video" type="Video" /> + <DirectPlayProfile container="mp4" audioCodec="ac3,aac,pcm,mp3" videoCodec="mpeg4,h264" type="Video" /> + <DirectPlayProfile container="avi" audioCodec="ac3,aac,mp3,pcm" videoCodec="mpeg4,h264" type="Video" /> + <DirectPlayProfile container="mkv" audioCodec="ac3,dca,aac,mp3,pcm" videoCodec="mpeg4,h264" type="Video" /> + <DirectPlayProfile container="mp3" audioCodec="mp3" type="Audio" /> + <DirectPlayProfile container="mp4" audioCodec="aac" type="Audio" /> + <DirectPlayProfile container="asf" audioCodec="wmav2,wmapro,wmavoice" type="Audio" /> + <DirectPlayProfile container="jpeg" type="Photo" /> + </DirectPlayProfiles> + <TranscodingProfiles> + <TranscodingProfile container="mp3" type="Audio" audioCodec="mp3" estimateContentLength="false" enableMpegtsM2TsMode="false" transcodeSeekInfo="Auto"> + <Settings /> + </TranscodingProfile> + <TranscodingProfile container="ts" type="Video" videoCodec="h264" audioCodec="ac3" estimateContentLength="false" enableMpegtsM2TsMode="false" transcodeSeekInfo="Auto"> + <Settings /> + </TranscodingProfile> + <TranscodingProfile container="jpeg" type="Photo" estimateContentLength="false" enableMpegtsM2TsMode="false" transcodeSeekInfo="Auto"> + <Settings /> + </TranscodingProfile> + </TranscodingProfiles> + <ContainerProfiles> + <ContainerProfile type="Photo"> + <Conditions> + <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" /> + <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" /> + </Conditions> + </ContainerProfile> + </ContainerProfiles> + <CodecProfiles> + <CodecProfile type="VideoCodec" codec="h264"> + <Conditions> + <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" /> + <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" /> + <ProfileCondition condition="LessThanEqual" property="VideoFramerate" value="30" isRequired="false" /> + </Conditions> + </CodecProfile> + <CodecProfile type="VideoAudioCodec" codec="ac3"> + <Conditions> + <ProfileCondition condition="LessThanEqual" property="AudioChannels" value="6" isRequired="false" /> + </Conditions> + </CodecProfile> + </CodecProfiles> + <MediaProfiles /> +</Profile>
\ No newline at end of file diff --git a/MediaBrowser.Dlna/Profiles/Xml/Sony Blu-ray Player.xml b/MediaBrowser.Dlna/Profiles/Xml/Sony Blu-ray Player.xml new file mode 100644 index 000000000..ecc5ac2fc --- /dev/null +++ b/MediaBrowser.Dlna/Profiles/Xml/Sony Blu-ray Player.xml @@ -0,0 +1,95 @@ +<?xml version="1.0"?> +<Profile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <Name>Sony Blu-ray Player</Name> + <Identification> + <FriendlyName>Blu-ray Disc Player</FriendlyName> + <Manufacturer>Sony</Manufacturer> + <Headers> + <HttpHeaderInfo name="X-AV-Client-Info" value="(Blu-ray Disc Player|Home Theater System|Home Theatre System|Media Player)" match="Regex" /> + <HttpHeaderInfo name="X-AV-Physical-Unit-Info" value="(Blu-ray Disc Player|Home Theater System|Home Theatre System|Media Player)" match="Regex" /> + </Headers> + </Identification> + <Manufacturer>Microsoft Corporation</Manufacturer> + <ManufacturerUrl>http://mediabrowser3.com/</ManufacturerUrl> + <ModelName>Windows Media Player Sharing</ModelName> + <ModelDescription>Media Browser</ModelDescription> + <ModelNumber>3.0</ModelNumber> + <ModelUrl>http://mediabrowser3.com/</ModelUrl> + <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> + <SupportsAlbumArtInDidl>false</SupportsAlbumArtInDidl> + <ProtocolInfo>http-get:*:video/divx:DLNA.ORG_PN=MATROSKA;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/mpeg:DLNA.ORG_PN=MPEG_PS_PAL;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/mpeg:DLNA.ORG_PN=MPEG_PS_NTSC;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=MPEG_TS_SD_EU;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=MPEG_TS_SD_NA;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=MPEG_TS_SD_KO;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:audio/x-ms-wma:DLNA.ORG_PN=WMABASE;DLNA.ORG_OP=01;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:audio/x-ms-wma:DLNA.ORG_PN=WMAFULL;DLNA.ORG_OP=01;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/mp4:DLNA.ORG_PN=AVC_MP4_MP_SD_AAC_MULT5;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:audio/mpeg:DLNA.ORG_PN=MP3;DLNA.ORG_OP=01;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:audio/L16;rate=44100;channels=1:DLNA.ORG_PN=LPCM;DLNA.ORG_OP=01;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:audio/L16;rate=44100;channels=2:DLNA.ORG_PN=LPCM;DLNA.ORG_OP=01;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:audio/L16;rate=48000;channels=1:DLNA.ORG_PN=LPCM;DLNA.ORG_OP=01;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:audio/L16;rate=48000;channels=2:DLNA.ORG_PN=LPCM;DLNA.ORG_OP=01;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:audio/mp4:DLNA.ORG_PN=AAC_ISO;DLNA.ORG_OP=01;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:audio/mp4:DLNA.ORG_PN=AAC_ISO_320;DLNA.ORG_OP=01;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:audio/vnd.dlna.adts:DLNA.ORG_PN=AAC_ADTS;DLNA.ORG_OP=01;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:audio/vnd.dlna.adts:DLNA.ORG_PN=AAC_ADTS_320;DLNA.ORG_OP=01;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:audio/flac:DLNA.ORG_PN=FLAC;DLNA.ORG_OP=01;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:audio/ogg:DLNA.ORG_PN=OGG;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:*:image/jpeg:DLNA.ORG_PN=JPEG_MED;DLNA.ORG_OP=00;DLNA.ORG_FLAGS=00D00000000000000000000000000000,http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_LRG;DLNA.ORG_OP=00;DLNA.ORG_FLAGS=00D00000000000000000000000000000,http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_TN;DLNA.ORG_OP=00;DLNA.ORG_FLAGS=00D00000000000000000000000000000,http-get:*:image/png:DLNA.ORG_PN=PNG_LRG;DLNA.ORG_OP=00;DLNA.ORG_FLAGS=00D00000000000000000000000000000,http-get:*:image/png:DLNA.ORG_PN=PNG_TN;DLNA.ORG_OP=00;DLNA.ORG_FLAGS=00D00000000000000000000000000000,http-get:*:image/gif:DLNA.ORG_PN=GIF_LRG;DLNA.ORG_OP=00;DLNA.ORG_FLAGS=00D00000000000000000000000000000,http-get:*:video/mpeg:DLNA.ORG_PN=MPEG1;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=MPEG_TS_SD_EU_T;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/mpeg:DLNA.ORG_PN=MPEG_TS_SD_EU_ISO;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=MPEG_TS_SD_NA_T;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/mpeg:DLNA.ORG_PN=MPEG_TS_SD_NA_ISO;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=MPEG_TS_SD_KO_T;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/mpeg:DLNA.ORG_PN=MPEG_TS_SD_KO_ISO;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=MPEG_TS_JP_T;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/x-msvideo:DLNA.ORG_PN=AVI;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/x-flv:DLNA.ORG_PN=FLV;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/x-ms-dvr:DLNA.ORG_PN=DVR_MS;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/wtv:DLNA.ORG_PN=WTV;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/ogg:DLNA.ORG_PN=OGV;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/vnd.rn-realvideo:DLNA.ORG_PN=REAL_VIDEO;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/x-ms-wmv:DLNA.ORG_PN=WMVMED_BASE;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/x-ms-wmv:DLNA.ORG_PN=WMVMED_FULL;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/x-ms-wmv:DLNA.ORG_PN=WMVHIGH_FULL;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/x-ms-wmv:DLNA.ORG_PN=WMVMED_PRO;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/x-ms-wmv:DLNA.ORG_PN=WMVHIGH_PRO;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/x-ms-asf:DLNA.ORG_PN=VC1_ASF_AP_L1_WMA;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/x-ms-asf:DLNA.ORG_PN=VC1_ASF_AP_L2_WMA;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/x-ms-asf:DLNA.ORG_PN=VC1_ASF_AP_L3_WMA;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/3gpp:DLNA.ORG_PN=MPEG4_P2_3GPP_SP_L0B_AAC;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/3gpp:DLNA.ORG_PN=MPEG4_P2_3GPP_SP_L0B_AMR;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/3gpp:DLNA.ORG_PN=MPEG4_H263_3GPP_P0_L10_AMR;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:video/3gpp:DLNA.ORG_PN=MPEG4_H263_MP4_P0_L10_AAC;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000</ProtocolInfo> + <TimelineOffsetSeconds>0</TimelineOffsetSeconds> + <RequiresPlainVideoItems>false</RequiresPlainVideoItems> + <RequiresPlainFolders>false</RequiresPlainFolders> + <DirectPlayProfiles> + <DirectPlayProfile container="ts" audioCodec="ac3,aac,mp3,pcm" videoCodec="mpeg1video,mpeg2video,h264" type="Video" /> + <DirectPlayProfile container="mpeg" audioCodec="ac3,mp3,pcm" videoCodec="mpeg1video,mpeg2video" type="Video" /> + <DirectPlayProfile container="avi,mp4" audioCodec="ac3,aac,mp3,pcm" videoCodec="mpeg4,h264" type="Video" /> + <DirectPlayProfile container="mp3" audioCodec="mp3" type="Audio" /> + <DirectPlayProfile container="asf" audioCodec="wmav2,wmapro,wmavoice" type="Audio" /> + <DirectPlayProfile container="jpeg" type="Photo" /> + </DirectPlayProfiles> + <TranscodingProfiles> + <TranscodingProfile container="mp3" type="Audio" audioCodec="mp3" estimateContentLength="false" enableMpegtsM2TsMode="false" transcodeSeekInfo="Auto"> + <Settings /> + </TranscodingProfile> + <TranscodingProfile container="ts" type="Video" videoCodec="mpeg2video" audioCodec="ac3" estimateContentLength="false" enableMpegtsM2TsMode="false" transcodeSeekInfo="Auto"> + <Settings /> + </TranscodingProfile> + <TranscodingProfile container="jpeg" type="Photo" estimateContentLength="false" enableMpegtsM2TsMode="false" transcodeSeekInfo="Auto"> + <Settings /> + </TranscodingProfile> + </TranscodingProfiles> + <ContainerProfiles> + <ContainerProfile type="Photo"> + <Conditions> + <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" /> + <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" /> + </Conditions> + </ContainerProfile> + </ContainerProfiles> + <CodecProfiles> + <CodecProfile type="VideoCodec" codec="h264"> + <Conditions> + <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" /> + <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" /> + <ProfileCondition condition="LessThanEqual" property="VideoFramerate" value="30" isRequired="false" /> + <ProfileCondition condition="LessThanEqual" property="VideoLevel" value="41" isRequired="false" /> + <ProfileCondition condition="LessThanEqual" property="VideoBitrate" value="15360000" isRequired="false" /> + </Conditions> + </CodecProfile> + <CodecProfile type="VideoAudioCodec" codec="ac3"> + <Conditions> + <ProfileCondition condition="LessThanEqual" property="AudioChannels" value="6" isRequired="false" /> + </Conditions> + </CodecProfile> + <CodecProfile type="VideoAudioCodec" codec="aac"> + <Conditions> + <ProfileCondition condition="LessThanEqual" property="AudioChannels" value="2" isRequired="false" /> + </Conditions> + </CodecProfile> + </CodecProfiles> + <MediaProfiles> + <MediaProfile container="ts" audioCodec="ac3,aac,mp3" videoCodec="h264,mpeg4,vc1" type="Video" orgPn="MPEG_TS_SD_EU,MPEG_TS_SD_NA,MPEG_TS_SD_KO" mimeType="video/vnd.dlna.mpeg-tts"> + <Conditions /> + </MediaProfile> + <MediaProfile container="avi" type="Video" mimeType="video/mpeg"> + <Conditions /> + </MediaProfile> + <MediaProfile container="mkv" type="Video" mimeType="video/vnd.dlna.mpeg-tts"> + <Conditions /> + </MediaProfile> + <MediaProfile container="ts" type="Video" mimeType="video/vnd.dlna.mpeg-tts"> + <Conditions /> + </MediaProfile> + <MediaProfile container="mp4" type="Video" mimeType="video/mpeg"> + <Conditions /> + </MediaProfile> + <MediaProfile container="mpeg" type="Video" mimeType="video/mpeg"> + <Conditions /> + </MediaProfile> + <MediaProfile container="mp3" type="Audio" mimeType="audio/mpeg"> + <Conditions /> + </MediaProfile> + </MediaProfiles> +</Profile>
\ No newline at end of file diff --git a/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2010).xml b/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2010).xml new file mode 100644 index 000000000..c1d822582 --- /dev/null +++ b/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2010).xml @@ -0,0 +1,98 @@ +<?xml version="1.0"?> +<Profile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <Name>Sony Bravia (2010)</Name> + <Identification> + <FriendlyName>KDL-\d{2}[EHLNPB]X\d[01]\d.*</FriendlyName> + <Manufacturer>Sony</Manufacturer> + <Headers> + <HttpHeaderInfo name="X-AV-Client-Info" value=".*KDL-\d{2}[EHLNPB]X\d[01]\d.*" match="Regex" /> + </Headers> + </Identification> + <Manufacturer>Microsoft Corporation</Manufacturer> + <ManufacturerUrl>http://www.microsoft.com/</ManufacturerUrl> + <ModelName>Windows Media Player Sharing</ModelName> + <ModelDescription>Media Browser</ModelDescription> + <ModelNumber>3.0</ModelNumber> + <ModelUrl>http://www.microsoft.com/</ModelUrl> + <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> + <SupportsAlbumArtInDidl>false</SupportsAlbumArtInDidl> + <SonyAggregationFlags>10</SonyAggregationFlags> + <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</ProtocolInfo> + <TimelineOffsetSeconds>0</TimelineOffsetSeconds> + <RequiresPlainVideoItems>false</RequiresPlainVideoItems> + <RequiresPlainFolders>false</RequiresPlainFolders> + <DirectPlayProfiles> + <DirectPlayProfile container="ts" audioCodec="ac3,aac,mp3" videoCodec="h264" type="Video" /> + <DirectPlayProfile container="ts" audioCodec="mp3,mp2" videoCodec="mpeg1video,mpeg2video" type="Video" /> + <DirectPlayProfile container="mpeg" audioCodec="mp3,mp2" videoCodec="mpeg2video,mpeg1video" type="Video" /> + <DirectPlayProfile container="mp3" audioCodec="mp3" type="Audio" /> + </DirectPlayProfiles> + <TranscodingProfiles> + <TranscodingProfile container="mp3" type="Audio" audioCodec="mp3" estimateContentLength="false" enableMpegtsM2TsMode="false" transcodeSeekInfo="Auto"> + <Settings /> + </TranscodingProfile> + <TranscodingProfile container="ts" type="Video" videoCodec="h264" audioCodec="ac3,aac" estimateContentLength="false" enableMpegtsM2TsMode="true" transcodeSeekInfo="Auto"> + <Settings /> + </TranscodingProfile> + <TranscodingProfile container="jpeg" type="Photo" estimateContentLength="false" enableMpegtsM2TsMode="false" transcodeSeekInfo="Auto"> + <Settings /> + </TranscodingProfile> + </TranscodingProfiles> + <ContainerProfiles> + <ContainerProfile type="Photo"> + <Conditions> + <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" /> + <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" /> + </Conditions> + </ContainerProfile> + </ContainerProfiles> + <CodecProfiles> + <CodecProfile type="VideoCodec"> + <Conditions> + <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" /> + <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" /> + </Conditions> + </CodecProfile> + <CodecProfile type="VideoCodec" codec="h264"> + <Conditions> + <ProfileCondition condition="LessThanEqual" property="VideoFramerate" value="30" isRequired="true" /> + <ProfileCondition condition="LessThanEqual" property="VideoBitrate" value="20000000" isRequired="true" /> + <ProfileCondition condition="LessThanEqual" property="VideoLevel" value="41" isRequired="true" /> + </Conditions> + </CodecProfile> + <CodecProfile type="VideoCodec" codec="mpeg2video"> + <Conditions> + <ProfileCondition condition="LessThanEqual" property="VideoFramerate" value="30" isRequired="true" /> + <ProfileCondition condition="LessThanEqual" property="VideoBitrate" value="20000000" isRequired="true" /> + </Conditions> + </CodecProfile> + <CodecProfile type="VideoAudioCodec" codec="ac3"> + <Conditions> + <ProfileCondition condition="LessThanEqual" property="AudioChannels" value="6" isRequired="true" /> + </Conditions> + </CodecProfile> + <CodecProfile type="VideoAudioCodec" codec="aac"> + <Conditions> + <ProfileCondition condition="LessThanEqual" property="AudioChannels" value="2" isRequired="true" /> + <ProfileCondition condition="NotEquals" property="AudioProfile" value="he-aac" isRequired="true" /> + </Conditions> + </CodecProfile> + </CodecProfiles> + <MediaProfiles> + <MediaProfile container="ts" audioCodec="ac3,aac,mp3" videoCodec="h264" type="Video" orgPn="AVC_TS_HD_24_AC3_T,AVC_TS_HD_50_AC3_T,AVC_TS_HD_60_AC3_T,AVC_TS_HD_EU_T" mimeType="video/vnd.dlna.mpeg-tts"> + <Conditions /> + </MediaProfile> + <MediaProfile container="ts" audioCodec="ac3,aac,mp3" videoCodec="h264" type="Video" orgPn="AVC_TS_HD_24_AC3_ISO,AVC_TS_HD_50_AC3_ISO,AVC_TS_HD_60_AC3_ISO,AVC_TS_HD_EU_ISO" mimeType="video/mpeg"> + <Conditions /> + </MediaProfile> + <MediaProfile container="ts" audioCodec="ac3,aac,mp3" videoCodec="h264" type="Video" orgPn="AVC_TS_HD_24_AC3,AVC_TS_HD_50_AC3,AVC_TS_HD_60_AC3,AVC_TS_HD_EU" mimeType="video/vnd.dlna.mpeg-tts"> + <Conditions /> + </MediaProfile> + <MediaProfile container="ts" videoCodec="mpeg2video" type="Video" orgPn="MPEG_TS_SD_EU,MPEG_TS_SD_NA,MPEG_TS_SD_KO" mimeType="video/vnd.dlna.mpeg-tts"> + <Conditions /> + </MediaProfile> + <MediaProfile container="mpeg" videoCodec="mpeg1video,mpeg2video" type="Video" orgPn="MPEG_PS_NTSC,MPEG_PS_PAL" mimeType="video/mpeg"> + <Conditions /> + </MediaProfile> + </MediaProfiles> +</Profile>
\ No newline at end of file diff --git a/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2011).xml b/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2011).xml new file mode 100644 index 000000000..e3138f05b --- /dev/null +++ b/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2011).xml @@ -0,0 +1,101 @@ +<?xml version="1.0"?> +<Profile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <Name>Sony Bravia (2011)</Name> + <Identification> + <FriendlyName>KDL-\d{2}([A-Z]X\d2\d|CX400).*</FriendlyName> + <Manufacturer>Sony</Manufacturer> + <Headers> + <HttpHeaderInfo name="X-AV-Client-Info" value=".*KDL-\d{2}([A-Z]X\d2\d|CX400).*" match="Regex" /> + </Headers> + </Identification> + <Manufacturer>Microsoft Corporation</Manufacturer> + <ManufacturerUrl>http://www.microsoft.com/</ManufacturerUrl> + <ModelName>Windows Media Player Sharing</ModelName> + <ModelDescription>Media Browser</ModelDescription> + <ModelNumber>3.0</ModelNumber> + <ModelUrl>http://www.microsoft.com/</ModelUrl> + <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> + <SupportsAlbumArtInDidl>false</SupportsAlbumArtInDidl> + <SonyAggregationFlags>10</SonyAggregationFlags> + <ProtocolInfo>DLNA</ProtocolInfo> + <TimelineOffsetSeconds>0</TimelineOffsetSeconds> + <RequiresPlainVideoItems>false</RequiresPlainVideoItems> + <RequiresPlainFolders>false</RequiresPlainFolders> + <DirectPlayProfiles> + <DirectPlayProfile container="ts" audioCodec="ac3,aac,mp3" videoCodec="h264" type="Video" /> + <DirectPlayProfile container="ts" audioCodec="mp3,mp2" videoCodec="mpeg2video" type="Video" /> + <DirectPlayProfile container="mp4" audioCodec="ac3,aac,mp3,mp2" videoCodec="h264,mpeg4" type="Video" /> + <DirectPlayProfile container="mpeg" audioCodec="mp3,mp2" videoCodec="mpeg2video,mpeg1video" type="Video" /> + <DirectPlayProfile container="asf" audioCodec="wmav2,wmapro,wmavoice" videoCodec="wmv2,wmv3,vc1" type="Video" /> + <DirectPlayProfile container="mp3" audioCodec="mp3" type="Audio" /> + <DirectPlayProfile container="asf" audioCodec="wmav2,wmapro,wmavoice" type="Audio" /> + </DirectPlayProfiles> + <TranscodingProfiles> + <TranscodingProfile container="mp3" type="Audio" audioCodec="mp3" estimateContentLength="false" enableMpegtsM2TsMode="false" transcodeSeekInfo="Auto"> + <Settings /> + </TranscodingProfile> + <TranscodingProfile container="ts" type="Video" videoCodec="h264" audioCodec="ac3,aac" estimateContentLength="false" enableMpegtsM2TsMode="true" transcodeSeekInfo="Auto"> + <Settings /> + </TranscodingProfile> + <TranscodingProfile container="jpeg" type="Photo" estimateContentLength="false" enableMpegtsM2TsMode="false" transcodeSeekInfo="Auto"> + <Settings /> + </TranscodingProfile> + </TranscodingProfiles> + <ContainerProfiles> + <ContainerProfile type="Photo"> + <Conditions> + <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" /> + <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" /> + </Conditions> + </ContainerProfile> + </ContainerProfiles> + <CodecProfiles> + <CodecProfile type="VideoCodec"> + <Conditions> + <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" /> + <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" /> + </Conditions> + </CodecProfile> + <CodecProfile type="VideoCodec" codec="h264"> + <Conditions> + <ProfileCondition condition="LessThanEqual" property="VideoFramerate" value="30" isRequired="true" /> + <ProfileCondition condition="LessThanEqual" property="VideoBitrate" value="20000000" isRequired="true" /> + <ProfileCondition condition="LessThanEqual" property="VideoLevel" value="41" isRequired="true" /> + </Conditions> + </CodecProfile> + <CodecProfile type="VideoCodec" codec="mpeg2video"> + <Conditions> + <ProfileCondition condition="LessThanEqual" property="VideoFramerate" value="30" isRequired="true" /> + <ProfileCondition condition="LessThanEqual" property="VideoBitrate" value="20000000" isRequired="true" /> + </Conditions> + </CodecProfile> + <CodecProfile type="VideoAudioCodec" codec="ac3"> + <Conditions> + <ProfileCondition condition="LessThanEqual" property="AudioChannels" value="6" isRequired="true" /> + </Conditions> + </CodecProfile> + <CodecProfile type="VideoAudioCodec" codec="aac"> + <Conditions> + <ProfileCondition condition="LessThanEqual" property="AudioChannels" value="2" isRequired="true" /> + <ProfileCondition condition="NotEquals" property="AudioProfile" value="he-aac" isRequired="true" /> + </Conditions> + </CodecProfile> + </CodecProfiles> + <MediaProfiles> + <MediaProfile container="ts" audioCodec="ac3,aac,mp3" videoCodec="h264" type="Video" orgPn="AVC_TS_HD_24_AC3_T,AVC_TS_HD_50_AC3_T,AVC_TS_HD_60_AC3_T,AVC_TS_HD_EU_T" mimeType="video/vnd.dlna.mpeg-tts"> + <Conditions /> + </MediaProfile> + <MediaProfile container="ts" audioCodec="ac3,aac,mp3" videoCodec="h264" type="Video" orgPn="AVC_TS_HD_24_AC3_ISO,AVC_TS_HD_50_AC3_ISO,AVC_TS_HD_60_AC3_ISO,AVC_TS_HD_EU_ISO" mimeType="video/mpeg"> + <Conditions /> + </MediaProfile> + <MediaProfile container="ts" audioCodec="ac3,aac,mp3" videoCodec="h264" type="Video" orgPn="AVC_TS_HD_24_AC3,AVC_TS_HD_50_AC3,AVC_TS_HD_60_AC3,AVC_TS_HD_EU" mimeType="video/vnd.dlna.mpeg-tts"> + <Conditions /> + </MediaProfile> + <MediaProfile container="ts" videoCodec="mpeg2video" type="Video" orgPn="MPEG_TS_SD_EU,MPEG_TS_SD_NA,MPEG_TS_SD_KO" mimeType="video/vnd.dlna.mpeg-tts"> + <Conditions /> + </MediaProfile> + <MediaProfile container="mpeg" videoCodec="mpeg1video,mpeg2video" type="Video" orgPn="MPEG_PS_NTSC,MPEG_PS_PAL" mimeType="video/mpeg"> + <Conditions /> + </MediaProfile> + </MediaProfiles> +</Profile>
\ No newline at end of file diff --git a/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2012).xml b/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2012).xml new file mode 100644 index 000000000..c842df506 --- /dev/null +++ b/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2012).xml @@ -0,0 +1,84 @@ +<?xml version="1.0"?> +<Profile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <Name>Sony Bravia (2012)</Name> + <Identification> + <FriendlyName>KDL-\d{2}[A-Z]X\d5(\d|G).*</FriendlyName> + <Manufacturer>Sony</Manufacturer> + <Headers> + <HttpHeaderInfo name="X-AV-Client-Info" value=".*KDL-\d{2}[A-Z]X\d5(\d|G).*" match="Regex" /> + </Headers> + </Identification> + <Manufacturer>Microsoft Corporation</Manufacturer> + <ManufacturerUrl>http://www.microsoft.com/</ManufacturerUrl> + <ModelName>Windows Media Player Sharing</ModelName> + <ModelDescription>Media Browser</ModelDescription> + <ModelNumber>3.0</ModelNumber> + <ModelUrl>http://www.microsoft.com/</ModelUrl> + <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> + <SupportsAlbumArtInDidl>false</SupportsAlbumArtInDidl> + <SonyAggregationFlags>10</SonyAggregationFlags> + <ProtocolInfo>DLNA</ProtocolInfo> + <TimelineOffsetSeconds>0</TimelineOffsetSeconds> + <RequiresPlainVideoItems>false</RequiresPlainVideoItems> + <RequiresPlainFolders>false</RequiresPlainFolders> + <DirectPlayProfiles> + <DirectPlayProfile container="ts" audioCodec="ac3,aac,mp3" videoCodec="h264" type="Video" /> + <DirectPlayProfile container="ts" audioCodec="mp3,mp2" videoCodec="mpeg2video" type="Video" /> + <DirectPlayProfile container="mp4" audioCodec="ac3,aac,mp3,mp2" videoCodec="h264,mpeg4" type="Video" /> + <DirectPlayProfile container="avi" audioCodec="ac3,mp3" videoCodec="mpeg4" type="Video" /> + <DirectPlayProfile container="mpeg" audioCodec="mp3,mp2" videoCodec="mpeg2video,mpeg1video" type="Video" /> + <DirectPlayProfile container="asf" audioCodec="wmav2,wmapro,wmavoice" videoCodec="wmv2,wmv3,vc1" type="Video" /> + <DirectPlayProfile container="mp3" audioCodec="mp3" type="Audio" /> + <DirectPlayProfile container="asf" audioCodec="wmav2,wmapro,wmavoice" type="Audio" /> + <DirectPlayProfile container="jpeg" type="Photo" /> + </DirectPlayProfiles> + <TranscodingProfiles> + <TranscodingProfile container="mp3" type="Audio" audioCodec="mp3" estimateContentLength="false" enableMpegtsM2TsMode="false" transcodeSeekInfo="Auto"> + <Settings /> + </TranscodingProfile> + <TranscodingProfile container="ts" type="Video" videoCodec="h264" audioCodec="ac3,aac" estimateContentLength="false" enableMpegtsM2TsMode="true" transcodeSeekInfo="Auto"> + <Settings /> + </TranscodingProfile> + <TranscodingProfile container="jpeg" type="Photo" estimateContentLength="false" enableMpegtsM2TsMode="false" transcodeSeekInfo="Auto"> + <Settings /> + </TranscodingProfile> + </TranscodingProfiles> + <ContainerProfiles> + <ContainerProfile type="Photo"> + <Conditions> + <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" /> + <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" /> + </Conditions> + </ContainerProfile> + </ContainerProfiles> + <CodecProfiles> + <CodecProfile type="VideoCodec"> + <Conditions> + <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" /> + <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" /> + </Conditions> + </CodecProfile> + <CodecProfile type="VideoAudioCodec" codec="ac3"> + <Conditions> + <ProfileCondition condition="LessThanEqual" property="AudioChannels" value="6" isRequired="true" /> + </Conditions> + </CodecProfile> + </CodecProfiles> + <MediaProfiles> + <MediaProfile container="ts" audioCodec="ac3,aac,mp3" videoCodec="h264" type="Video" orgPn="AVC_TS_HD_24_AC3_T,AVC_TS_HD_50_AC3_T,AVC_TS_HD_60_AC3_T,AVC_TS_HD_EU_T" mimeType="video/vnd.dlna.mpeg-tts"> + <Conditions /> + </MediaProfile> + <MediaProfile container="ts" audioCodec="ac3,aac,mp3" videoCodec="h264" type="Video" orgPn="AVC_TS_HD_24_AC3_ISO,AVC_TS_HD_50_AC3_ISO,AVC_TS_HD_60_AC3_ISO,AVC_TS_HD_EU_ISO" mimeType="video/mpeg"> + <Conditions /> + </MediaProfile> + <MediaProfile container="ts" audioCodec="ac3,aac,mp3" videoCodec="h264" type="Video" orgPn="AVC_TS_HD_24_AC3,AVC_TS_HD_50_AC3,AVC_TS_HD_60_AC3,AVC_TS_HD_EU" mimeType="video/vnd.dlna.mpeg-tts"> + <Conditions /> + </MediaProfile> + <MediaProfile container="ts" videoCodec="mpeg2video" type="Video" orgPn="MPEG_TS_SD_EU,MPEG_TS_SD_NA,MPEG_TS_SD_KO" mimeType="video/vnd.dlna.mpeg-tts"> + <Conditions /> + </MediaProfile> + <MediaProfile container="mpeg" videoCodec="mpeg1video,mpeg2video" type="Video" orgPn="MPEG_PS_NTSC,MPEG_PS_PAL" mimeType="video/mpeg"> + <Conditions /> + </MediaProfile> + </MediaProfiles> +</Profile>
\ No newline at end of file diff --git a/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2013).xml b/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2013).xml new file mode 100644 index 000000000..7dbef92f0 --- /dev/null +++ b/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2013).xml @@ -0,0 +1,84 @@ +<?xml version="1.0"?> +<Profile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <Name>Sony Bravia (2013)</Name> + <Identification> + <FriendlyName>KDL-\d{2}[WR][5689]\d{2}A.*</FriendlyName> + <Manufacturer>Sony</Manufacturer> + <Headers> + <HttpHeaderInfo name="X-AV-Client-Info" value=".*KDL-\d{2}[WR][5689]\d{2}A.*" match="Regex" /> + </Headers> + </Identification> + <Manufacturer>Microsoft Corporation</Manufacturer> + <ManufacturerUrl>http://www.microsoft.com/</ManufacturerUrl> + <ModelName>Windows Media Player Sharing</ModelName> + <ModelDescription>Media Browser</ModelDescription> + <ModelNumber>3.0</ModelNumber> + <ModelUrl>http://www.microsoft.com/</ModelUrl> + <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> + <SupportsAlbumArtInDidl>false</SupportsAlbumArtInDidl> + <SonyAggregationFlags>10</SonyAggregationFlags> + <ProtocolInfo>DLNA</ProtocolInfo> + <TimelineOffsetSeconds>0</TimelineOffsetSeconds> + <RequiresPlainVideoItems>false</RequiresPlainVideoItems> + <RequiresPlainFolders>false</RequiresPlainFolders> + <DirectPlayProfiles> + <DirectPlayProfile container="ts" audioCodec="ac3,eac3,aac,mp3" videoCodec="h264" type="Video" /> + <DirectPlayProfile container="ts" audioCodec="mp3,mp2" videoCodec="mpeg2video" type="Video" /> + <DirectPlayProfile container="mp4" audioCodec="ac3,eac3,aac,mp3,mp2" videoCodec="h264,mpeg4" type="Video" /> + <DirectPlayProfile container="mov" audioCodec="ac3,eac3,aac,mp3,mp2" videoCodec="h264,mpeg4,mjpeg" type="Video" /> + <DirectPlayProfile container="mkv" audioCodec="ac3,eac3,aac,mp3,mp2,pcm,vorbis" videoCodec="h264,mpeg4,vp8" type="Video" /> + <DirectPlayProfile container="avi" audioCodec="ac3,eac3,mp3" videoCodec="mpeg4" type="Video" /> + <DirectPlayProfile container="avi" audioCodec="pcm" videoCodec="mjpeg" type="Video" /> + <DirectPlayProfile container="mpeg" audioCodec="mp3,mp2" videoCodec="mpeg2video,mpeg1video" type="Video" /> + <DirectPlayProfile container="asf" audioCodec="wmav2,wmapro,wmavoice" videoCodec="wmv2,wmv3,vc1" type="Video" /> + <DirectPlayProfile container="mp3" audioCodec="mp3" type="Audio" /> + <DirectPlayProfile container="mp4" audioCodec="aac" type="Audio" /> + <DirectPlayProfile container="wav" audioCodec="pcm" type="Audio" /> + <DirectPlayProfile container="asf" audioCodec="wmav2,wmapro,wmavoice" type="Audio" /> + <DirectPlayProfile container="jpeg" type="Photo" /> + </DirectPlayProfiles> + <TranscodingProfiles> + <TranscodingProfile container="mp3" type="Audio" estimateContentLength="false" enableMpegtsM2TsMode="false" transcodeSeekInfo="Auto"> + <Settings /> + </TranscodingProfile> + <TranscodingProfile container="ts" type="Video" videoCodec="h264" audioCodec="ac3,aac" estimateContentLength="false" enableMpegtsM2TsMode="true" transcodeSeekInfo="Auto"> + <Settings /> + </TranscodingProfile> + <TranscodingProfile container="jpeg" type="Photo" estimateContentLength="false" enableMpegtsM2TsMode="false" transcodeSeekInfo="Auto"> + <Settings /> + </TranscodingProfile> + </TranscodingProfiles> + <ContainerProfiles> + <ContainerProfile type="Photo"> + <Conditions> + <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" /> + <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" /> + </Conditions> + </ContainerProfile> + </ContainerProfiles> + <CodecProfiles> + <CodecProfile type="VideoCodec"> + <Conditions> + <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" /> + <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" /> + </Conditions> + </CodecProfile> + </CodecProfiles> + <MediaProfiles> + <MediaProfile container="ts" audioCodec="ac3,aac,mp3" videoCodec="h264" type="Video" orgPn="AVC_TS_HD_24_AC3_T,AVC_TS_HD_50_AC3_T,AVC_TS_HD_60_AC3_T,AVC_TS_HD_EU_T" mimeType="video/vnd.dlna.mpeg-tts"> + <Conditions /> + </MediaProfile> + <MediaProfile container="ts" audioCodec="ac3,aac,mp3" videoCodec="h264" type="Video" orgPn="AVC_TS_HD_24_AC3_ISO,AVC_TS_HD_50_AC3_ISO,AVC_TS_HD_60_AC3_ISO,AVC_TS_HD_EU_ISO" mimeType="video/mpeg"> + <Conditions /> + </MediaProfile> + <MediaProfile container="ts" audioCodec="ac3,aac,mp3" videoCodec="h264" type="Video" orgPn="AVC_TS_HD_24_AC3,AVC_TS_HD_50_AC3,AVC_TS_HD_60_AC3,AVC_TS_HD_EU" mimeType="video/vnd.dlna.mpeg-tts"> + <Conditions /> + </MediaProfile> + <MediaProfile container="ts" videoCodec="mpeg2video" type="Video" orgPn="MPEG_TS_SD_EU,MPEG_TS_SD_NA,MPEG_TS_SD_KO" mimeType="video/vnd.dlna.mpeg-tts"> + <Conditions /> + </MediaProfile> + <MediaProfile container="mpeg" videoCodec="mpeg1video,mpeg2video" type="Video" orgPn="MPEG_PS_NTSC,MPEG_PS_PAL" mimeType="video/mpeg"> + <Conditions /> + </MediaProfile> + </MediaProfiles> +</Profile>
\ No newline at end of file diff --git a/MediaBrowser.Dlna/Profiles/Xml/Sony PlayStation 3.xml b/MediaBrowser.Dlna/Profiles/Xml/Sony PlayStation 3.xml new file mode 100644 index 000000000..c6d24e35c --- /dev/null +++ b/MediaBrowser.Dlna/Profiles/Xml/Sony PlayStation 3.xml @@ -0,0 +1,92 @@ +<?xml version="1.0"?> +<Profile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <Name>Sony PlayStation 3</Name> + <Identification> + <FriendlyName>PLAYSTATION 3</FriendlyName> + <Headers> + <HttpHeaderInfo name="User-Agent" value="PLAYSTATION 3" match="Substring" /> + <HttpHeaderInfo name="X-AV-Client-Info" value="PLAYSTATION 3" match="Substring" /> + </Headers> + </Identification> + <Manufacturer>Media Browser</Manufacturer> + <ManufacturerUrl>http://mediabrowser3.com/</ManufacturerUrl> + <ModelName>Media Browser</ModelName> + <ModelDescription>Media Browser</ModelDescription> + <ModelNumber>Media Browser</ModelNumber> + <ModelUrl>http://mediabrowser3.com/</ModelUrl> + <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> + <SupportsAlbumArtInDidl>false</SupportsAlbumArtInDidl> + <XDlnaDoc>DMS-1.50</XDlnaDoc> + <SonyAggregationFlags>10</SonyAggregationFlags> + <ProtocolInfo>DLNA</ProtocolInfo> + <TimelineOffsetSeconds>0</TimelineOffsetSeconds> + <RequiresPlainVideoItems>false</RequiresPlainVideoItems> + <RequiresPlainFolders>false</RequiresPlainFolders> + <DirectPlayProfiles> + <DirectPlayProfile container="mp3,wma" type="Audio" /> + <DirectPlayProfile container="avi,mp4" type="Video" /> + </DirectPlayProfiles> + <TranscodingProfiles> + <TranscodingProfile container="mp3" type="Audio" audioCodec="mp3" estimateContentLength="false" enableMpegtsM2TsMode="false" transcodeSeekInfo="Auto"> + <Settings /> + </TranscodingProfile> + <TranscodingProfile container="ts" type="Video" videoCodec="h264" audioCodec="mp3" estimateContentLength="false" enableMpegtsM2TsMode="false" transcodeSeekInfo="Auto"> + <Settings /> + </TranscodingProfile> + <TranscodingProfile container="jpeg" type="Photo" estimateContentLength="false" enableMpegtsM2TsMode="false" transcodeSeekInfo="Auto"> + <Settings /> + </TranscodingProfile> + </TranscodingProfiles> + <ContainerProfiles> + <ContainerProfile type="Photo"> + <Conditions> + <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" /> + <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" /> + </Conditions> + </ContainerProfile> + </ContainerProfiles> + <CodecProfiles> + <CodecProfile type="VideoCodec" codec="h264"> + <Conditions> + <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" /> + <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" /> + <ProfileCondition condition="LessThanEqual" property="VideoFramerate" value="30" isRequired="false" /> + <ProfileCondition condition="LessThanEqual" property="VideoBitrate" value="15360000" isRequired="false" /> + <ProfileCondition condition="LessThanEqual" property="VideoLevel" value="41" isRequired="false" /> + </Conditions> + </CodecProfile> + <CodecProfile type="VideoAudioCodec" codec="ac3"> + <Conditions> + <ProfileCondition condition="LessThanEqual" property="AudioChannels" value="6" isRequired="false" /> + <ProfileCondition condition="LessThanEqual" property="AudioBitrate" value="640000" isRequired="false" /> + </Conditions> + </CodecProfile> + <CodecProfile type="VideoAudioCodec" codec="wmapro"> + <Conditions> + <ProfileCondition condition="LessThanEqual" property="AudioChannels" value="2" isRequired="true" /> + </Conditions> + </CodecProfile> + <CodecProfile type="VideoAudioCodec" codec="aac"> + <Conditions> + <ProfileCondition condition="NotEquals" property="AudioProfile" value="he-aac" isRequired="false" /> + </Conditions> + </CodecProfile> + <CodecProfile type="VideoAudioCodec" codec="aac"> + <Conditions> + <ProfileCondition condition="LessThanEqual" property="AudioChannels" value="2" isRequired="true" /> + <ProfileCondition condition="NotEquals" property="AudioProfile" value="he-aac" isRequired="true" /> + </Conditions> + </CodecProfile> + </CodecProfiles> + <MediaProfiles> + <MediaProfile container="mp4,mov" audioCodec="aac" type="Video" mimeType="video/mp4"> + <Conditions /> + </MediaProfile> + <MediaProfile container="avi" type="Video" orgPn="AVI" mimeType="video/divx"> + <Conditions /> + </MediaProfile> + <MediaProfile container="wav" type="Audio" mimeType="audio/wav"> + <Conditions /> + </MediaProfile> + </MediaProfiles> +</Profile>
\ No newline at end of file diff --git a/MediaBrowser.Dlna/Profiles/Xml/WDTV Live.xml b/MediaBrowser.Dlna/Profiles/Xml/WDTV Live.xml new file mode 100644 index 000000000..7a61bf00a --- /dev/null +++ b/MediaBrowser.Dlna/Profiles/Xml/WDTV Live.xml @@ -0,0 +1,78 @@ +<?xml version="1.0"?> +<Profile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <Name>WDTV Live</Name> + <Identification> + <ModelName>WD TV HD Live</ModelName> + <Headers> + <HttpHeaderInfo name="User-Agent" value="alphanetworks" match="Substring" /> + <HttpHeaderInfo name="User-Agent" value="ALPHA Networks" match="Substring" /> + </Headers> + </Identification> + <Manufacturer>Media Browser</Manufacturer> + <ManufacturerUrl>http://mediabrowser3.com/</ManufacturerUrl> + <ModelName>Media Browser</ModelName> + <ModelDescription>Media Browser</ModelDescription> + <ModelNumber>Media Browser</ModelNumber> + <ModelUrl>http://mediabrowser3.com/</ModelUrl> + <IgnoreTranscodeByteRangeRequests>true</IgnoreTranscodeByteRangeRequests> + <SupportsAlbumArtInDidl>false</SupportsAlbumArtInDidl> + <ProtocolInfo>DLNA</ProtocolInfo> + <TimelineOffsetSeconds>5</TimelineOffsetSeconds> + <RequiresPlainVideoItems>false</RequiresPlainVideoItems> + <RequiresPlainFolders>false</RequiresPlainFolders> + <DirectPlayProfiles> + <DirectPlayProfile container="avi" audioCodec="ac3,dca,mp2,mp3,pcm" videoCodec="mpeg1video,mpeg2video,mpeg4,h264,vc1" type="Video" /> + <DirectPlayProfile container="mpeg" audioCodec="ac3,dca,mp2,mp3,pcm" videoCodec="mpeg1video,mpeg2video" type="Video" /> + <DirectPlayProfile container="mkv" audioCodec="ac3,dca,aac,mp2,mp3,pcm" videoCodec="mpeg1video,mpeg2video,mpeg4,h264,vc1" type="Video" /> + <DirectPlayProfile container="ts" audioCodec="ac3,dca,mp2,mp3" videoCodec="mpeg1video,mpeg2video,h264,vc1" type="Video" /> + <DirectPlayProfile container="mp4,mov" audioCodec="ac3,aac,mp2,mp3" videoCodec="h264,mpeg4" type="Video" /> + <DirectPlayProfile container="asf" audioCodec="wmav2,wmapro" videoCodec="vc1" type="Video" /> + <DirectPlayProfile container="asf" audioCodec="mp2,ac3" videoCodec="mpeg2video" type="Video" /> + <DirectPlayProfile container="mp3" audioCodec="mp2,mp3" type="Audio" /> + <DirectPlayProfile container="mp4" audioCodec="mp4" type="Audio" /> + <DirectPlayProfile container="flac" audioCodec="flac" type="Audio" /> + <DirectPlayProfile container="asf" audioCodec="wmav2,wmapro,wmavoice" type="Audio" /> + <DirectPlayProfile container="ogg" audioCodec="vorbis" type="Audio" /> + <DirectPlayProfile container="jpeg,png,gif,bmp,tiff" type="Photo" /> + </DirectPlayProfiles> + <TranscodingProfiles> + <TranscodingProfile container="mp3" type="Audio" audioCodec="mp3" estimateContentLength="false" enableMpegtsM2TsMode="false" transcodeSeekInfo="Auto"> + <Settings /> + </TranscodingProfile> + <TranscodingProfile container="ts" type="Video" videoCodec="h264" audioCodec="aac" estimateContentLength="false" enableMpegtsM2TsMode="false" transcodeSeekInfo="Auto"> + <Settings> + <TranscodingSetting name="VideoProfile" value="baseline" /> + </Settings> + </TranscodingProfile> + <TranscodingProfile container="jpeg" type="Photo" estimateContentLength="false" enableMpegtsM2TsMode="false" transcodeSeekInfo="Auto"> + <Settings /> + </TranscodingProfile> + </TranscodingProfiles> + <ContainerProfiles> + <ContainerProfile type="Photo"> + <Conditions> + <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" /> + <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" /> + </Conditions> + </ContainerProfile> + </ContainerProfiles> + <CodecProfiles> + <CodecProfile type="VideoCodec" codec="h264"> + <Conditions> + <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" /> + <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" /> + <ProfileCondition condition="LessThanEqual" property="VideoLevel" value="41" isRequired="true" /> + </Conditions> + </CodecProfile> + <CodecProfile type="VideoAudioCodec" codec="aac"> + <Conditions> + <ProfileCondition condition="LessThanEqual" property="AudioChannels" value="2" isRequired="true" /> + </Conditions> + </CodecProfile> + </CodecProfiles> + <MediaProfiles> + <MediaProfile container="ts" type="Video" orgPn="MPEG_TS_SD_NA"> + <Conditions /> + </MediaProfile> + </MediaProfiles> +</Profile>
\ No newline at end of file diff --git a/MediaBrowser.Dlna/Profiles/Xml/Xbox 360.xml b/MediaBrowser.Dlna/Profiles/Xml/Xbox 360.xml new file mode 100644 index 000000000..0839cd86e --- /dev/null +++ b/MediaBrowser.Dlna/Profiles/Xml/Xbox 360.xml @@ -0,0 +1,103 @@ +<?xml version="1.0"?> +<Profile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <Name>Xbox 360</Name> + <Identification> + <ModelName>Xbox 360</ModelName> + <Headers> + <HttpHeaderInfo name="User-Agent" value="Xbox" match="Substring" /> + <HttpHeaderInfo name="User-Agent" value="Xenon" match="Substring" /> + </Headers> + </Identification> + <Manufacturer>Microsoft Corporation</Manufacturer> + <ManufacturerUrl>http://www.microsoft.com/</ManufacturerUrl> + <ModelName>Windows Media Player Sharing</ModelName> + <ModelDescription>Media Browser</ModelDescription> + <ModelNumber>12.0</ModelNumber> + <ModelUrl>http://www.microsoft.com/</ModelUrl> + <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> + <SupportsAlbumArtInDidl>false</SupportsAlbumArtInDidl> + <XDlnaDoc>DMS-1.50</XDlnaDoc> + <ProtocolInfo>DLNA</ProtocolInfo> + <TimelineOffsetSeconds>40</TimelineOffsetSeconds> + <RequiresPlainVideoItems>true</RequiresPlainVideoItems> + <RequiresPlainFolders>true</RequiresPlainFolders> + <DirectPlayProfiles> + <DirectPlayProfile container="avi" audioCodec="ac3,mp3" videoCodec="mpeg4" type="Video" /> + <DirectPlayProfile container="avi" audioCodec="aac" videoCodec="h264" type="Video" /> + <DirectPlayProfile container="mp4,mov" audioCodec="aac,ac3" videoCodec="h264,mpeg4" type="Video" /> + <DirectPlayProfile container="asf" audioCodec="wmav2,wmapro" videoCodec="wmv2,wmv3,vc1" type="Video" /> + <DirectPlayProfile container="asf" audioCodec="wmav2,wmapro,wmavoice" type="Audio" /> + <DirectPlayProfile container="mp3" audioCodec="mp3" type="Audio" /> + <DirectPlayProfile container="jpeg" type="Photo" /> + </DirectPlayProfiles> + <TranscodingProfiles> + <TranscodingProfile container="mp3" type="Audio" audioCodec="mp3" estimateContentLength="false" enableMpegtsM2TsMode="false" transcodeSeekInfo="Auto"> + <Settings /> + </TranscodingProfile> + <TranscodingProfile container="asf" type="Video" videoCodec="wmv2" audioCodec="wmav2" estimateContentLength="true" enableMpegtsM2TsMode="false" transcodeSeekInfo="Bytes"> + <Settings> + <TranscodingSetting name="VideoProfile" value="baseline" /> + </Settings> + </TranscodingProfile> + <TranscodingProfile container="jpeg" type="Photo" estimateContentLength="false" enableMpegtsM2TsMode="false" transcodeSeekInfo="Auto"> + <Settings /> + </TranscodingProfile> + </TranscodingProfiles> + <ContainerProfiles> + <ContainerProfile type="Video" container="mp4,mov"> + <Conditions> + <ProfileCondition condition="LessThanEqual" property="Has64BitOffsets" value="false" isRequired="false" /> + </Conditions> + </ContainerProfile> + <ContainerProfile type="Photo"> + <Conditions> + <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" /> + <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" /> + </Conditions> + </ContainerProfile> + </ContainerProfiles> + <CodecProfiles> + <CodecProfile type="VideoCodec" codec="mpeg4"> + <Conditions> + <ProfileCondition condition="LessThanEqual" property="Width" value="1280" isRequired="true" /> + <ProfileCondition condition="LessThanEqual" property="Height" value="720" isRequired="true" /> + <ProfileCondition condition="LessThanEqual" property="VideoFramerate" value="30" isRequired="false" /> + <ProfileCondition condition="LessThanEqual" property="VideoBitrate" value="5120000" isRequired="false" /> + </Conditions> + </CodecProfile> + <CodecProfile type="VideoCodec" codec="h264"> + <Conditions> + <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" /> + <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" /> + <ProfileCondition condition="LessThanEqual" property="VideoLevel" value="41" isRequired="false" /> + <ProfileCondition condition="LessThanEqual" property="VideoBitrate" value="10240000" isRequired="false" /> + <ProfileCondition condition="LessThanEqual" property="VideoLevel" value="3" isRequired="false" /> + </Conditions> + </CodecProfile> + <CodecProfile type="VideoCodec" codec="wmv2,wmv3,vc1"> + <Conditions> + <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" /> + <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" /> + <ProfileCondition condition="LessThanEqual" property="VideoFramerate" value="30" isRequired="false" /> + <ProfileCondition condition="LessThanEqual" property="VideoBitrate" value="15360000" isRequired="false" /> + <ProfileCondition condition="LessThanEqual" property="VideoLevel" value="3" isRequired="false" /> + </Conditions> + </CodecProfile> + <CodecProfile type="VideoAudioCodec" codec="ac3,wmav2,wmapro"> + <Conditions> + <ProfileCondition condition="LessThanEqual" property="AudioChannels" value="6" isRequired="false" /> + </Conditions> + </CodecProfile> + <CodecProfile type="VideoAudioCodec" codec="aac"> + <Conditions> + <ProfileCondition condition="LessThanEqual" property="AudioChannels" value="2" isRequired="false" /> + <ProfileCondition condition="Equals" property="AudioProfile" value="lc" isRequired="false" /> + </Conditions> + </CodecProfile> + </CodecProfiles> + <MediaProfiles> + <MediaProfile container="avi" type="Video" mimeType="video/avi"> + <Conditions /> + </MediaProfile> + </MediaProfiles> +</Profile>
\ No newline at end of file diff --git a/MediaBrowser.Dlna/Profiles/Xml/Xbox One.xml b/MediaBrowser.Dlna/Profiles/Xml/Xbox One.xml new file mode 100644 index 000000000..5a86b6af2 --- /dev/null +++ b/MediaBrowser.Dlna/Profiles/Xml/Xbox One.xml @@ -0,0 +1,45 @@ +<?xml version="1.0"?> +<Profile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <Name>Xbox One</Name> + <Identification> + <FriendlyName>Xbox-SystemOS</FriendlyName> + <ModelName>Xbox One</ModelName> + <Headers /> + </Identification> + <Manufacturer>Media Browser</Manufacturer> + <ManufacturerUrl>http://mediabrowser3.com/</ManufacturerUrl> + <ModelName>Media Browser</ModelName> + <ModelDescription>Media Browser</ModelDescription> + <ModelNumber>Media Browser</ModelNumber> + <ModelUrl>http://mediabrowser3.com/</ModelUrl> + <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> + <SupportsAlbumArtInDidl>false</SupportsAlbumArtInDidl> + <ProtocolInfo>DLNA</ProtocolInfo> + <TimelineOffsetSeconds>0</TimelineOffsetSeconds> + <RequiresPlainVideoItems>false</RequiresPlainVideoItems> + <RequiresPlainFolders>false</RequiresPlainFolders> + <DirectPlayProfiles> + <DirectPlayProfile container="mp3,wma" type="Audio" /> + </DirectPlayProfiles> + <TranscodingProfiles> + <TranscodingProfile container="mp3" type="Audio" audioCodec="mp3" estimateContentLength="false" enableMpegtsM2TsMode="false" transcodeSeekInfo="Auto"> + <Settings /> + </TranscodingProfile> + <TranscodingProfile container="ts" type="Video" videoCodec="h264" audioCodec="aac" estimateContentLength="false" enableMpegtsM2TsMode="false" transcodeSeekInfo="Auto"> + <Settings /> + </TranscodingProfile> + </TranscodingProfiles> + <ContainerProfiles /> + <CodecProfiles> + <CodecProfile type="VideoCodec"> + <Conditions> + <ProfileCondition condition="LessThanEqual" property="VideoLevel" value="3" isRequired="false" /> + </Conditions> + </CodecProfile> + </CodecProfiles> + <MediaProfiles> + <MediaProfile container="avi" type="Video" mimeType="video/x-msvideo"> + <Conditions /> + </MediaProfile> + </MediaProfiles> +</Profile>
\ No newline at end of file diff --git a/MediaBrowser.Dlna/Profiles/Xml/foobar2000.xml b/MediaBrowser.Dlna/Profiles/Xml/foobar2000.xml new file mode 100644 index 000000000..e65439b02 --- /dev/null +++ b/MediaBrowser.Dlna/Profiles/Xml/foobar2000.xml @@ -0,0 +1,45 @@ +<?xml version="1.0"?> +<Profile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <Name>foobar2000</Name> + <Identification> + <FriendlyName>foobar</FriendlyName> + <Headers> + <HttpHeaderInfo name="User-Agent" value="foobar" match="Substring" /> + </Headers> + </Identification> + <Manufacturer>Media Browser</Manufacturer> + <ManufacturerUrl>http://mediabrowser3.com/</ManufacturerUrl> + <ModelName>Media Browser</ModelName> + <ModelDescription>Media Browser</ModelDescription> + <ModelNumber>Media Browser</ModelNumber> + <ModelUrl>http://mediabrowser3.com/</ModelUrl> + <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> + <SupportsAlbumArtInDidl>false</SupportsAlbumArtInDidl> + <ProtocolInfo>DLNA</ProtocolInfo> + <TimelineOffsetSeconds>0</TimelineOffsetSeconds> + <RequiresPlainVideoItems>false</RequiresPlainVideoItems> + <RequiresPlainFolders>false</RequiresPlainFolders> + <DirectPlayProfiles> + <DirectPlayProfile container="mp3,wma" type="Audio" /> + <DirectPlayProfile container="avi,mp4" type="Video" /> + </DirectPlayProfiles> + <TranscodingProfiles> + <TranscodingProfile container="mp3" type="Audio" audioCodec="mp3" estimateContentLength="false" enableMpegtsM2TsMode="false" transcodeSeekInfo="Auto"> + <Settings /> + </TranscodingProfile> + <TranscodingProfile container="ts" type="Video" videoCodec="h264" audioCodec="aac" estimateContentLength="false" enableMpegtsM2TsMode="false" transcodeSeekInfo="Auto"> + <Settings> + <TranscodingSetting name="VideoProfile" value="baseline" /> + </Settings> + </TranscodingProfile> + </TranscodingProfiles> + <ContainerProfiles /> + <CodecProfiles> + <CodecProfile type="VideoCodec"> + <Conditions> + <ProfileCondition condition="LessThanEqual" property="VideoLevel" value="3" isRequired="false" /> + </Conditions> + </CodecProfile> + </CodecProfiles> + <MediaProfiles /> +</Profile>
\ No newline at end of file diff --git a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj index 960b0f635..9aefb4f1c 100644 --- a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj +++ b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj @@ -101,6 +101,9 @@ <Compile Include="..\MediaBrowser.Model\Configuration\UserConfiguration.cs"> <Link>Configuration\UserConfiguration.cs</Link> </Compile> + <Compile Include="..\MediaBrowser.Model\Dlna\DeviceProfileInfo.cs"> + <Link>Dlna\DeviceProfileInfo.cs</Link> + </Compile> <Compile Include="..\MediaBrowser.Model\Drawing\DrawingUtils.cs"> <Link>Drawing\DrawingUtils.cs</Link> </Compile> diff --git a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj index b010ad9c9..ce2a7600f 100644 --- a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj +++ b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj @@ -88,6 +88,9 @@ <Compile Include="..\MediaBrowser.Model\Configuration\UserConfiguration.cs"> <Link>Configuration\UserConfiguration.cs</Link> </Compile> + <Compile Include="..\MediaBrowser.Model\Dlna\DeviceProfileInfo.cs"> + <Link>Dlna\DeviceProfileInfo.cs</Link> + </Compile> <Compile Include="..\MediaBrowser.Model\Drawing\DrawingUtils.cs"> <Link>Drawing\DrawingUtils.cs</Link> </Compile> diff --git a/MediaBrowser.Model/Dlna/DeviceProfileInfo.cs b/MediaBrowser.Model/Dlna/DeviceProfileInfo.cs new file mode 100644 index 000000000..ceb27386c --- /dev/null +++ b/MediaBrowser.Model/Dlna/DeviceProfileInfo.cs @@ -0,0 +1,30 @@ + +namespace MediaBrowser.Model.Dlna +{ + public class DeviceProfileInfo + { + /// <summary> + /// Gets or sets the identifier. + /// </summary> + /// <value>The identifier.</value> + public string Id { get; set; } + + /// <summary> + /// Gets or sets the name. + /// </summary> + /// <value>The name.</value> + public string Name { get; set; } + + /// <summary> + /// Gets or sets the type. + /// </summary> + /// <value>The type.</value> + public DeviceProfileType Type { get; set; } + } + + public enum DeviceProfileType + { + System = 0, + User = 1 + } +} diff --git a/MediaBrowser.Model/MediaBrowser.Model.csproj b/MediaBrowser.Model/MediaBrowser.Model.csproj index 5e9b97939..bf29b4bff 100644 --- a/MediaBrowser.Model/MediaBrowser.Model.csproj +++ b/MediaBrowser.Model/MediaBrowser.Model.csproj @@ -66,6 +66,7 @@ <Compile Include="Configuration\MetadataPlugin.cs" /> <Compile Include="Configuration\MetadataOptions.cs" /> <Compile Include="Configuration\ServerConfiguration.cs" /> + <Compile Include="Dlna\DeviceProfileInfo.cs" /> <Compile Include="Drawing\ImageOutputFormat.cs" /> <Compile Include="Dto\BaseItemPerson.cs" /> <Compile Include="Dto\ChapterInfoDto.cs" /> diff --git a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs index 6a4c3930a..db8786d62 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs +++ b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs @@ -1498,8 +1498,11 @@ namespace MediaBrowser.Server.Implementations.LiveTv { var programs = _programs.ToList(); - var startDate = programs.Select(i => i.Value.StartDate).Min(); - var endDate = programs.Select(i => i.Value.StartDate).Max(); + var startDate = _programs.Count == 0 ? DateTime.MinValue : + programs.Select(i => i.Value.StartDate).Min(); + + var endDate = programs.Count == 0 ? DateTime.MinValue : + programs.Select(i => i.Value.StartDate).Max(); return new GuideInfo { diff --git a/MediaBrowser.ServerApplication/ApplicationHost.cs b/MediaBrowser.ServerApplication/ApplicationHost.cs index 351cbcfc8..fe7b17d1d 100644 --- a/MediaBrowser.ServerApplication/ApplicationHost.cs +++ b/MediaBrowser.ServerApplication/ApplicationHost.cs @@ -441,7 +441,7 @@ namespace MediaBrowser.ServerApplication FileOrganizationRepository = await GetFileOrganizationRepository().ConfigureAwait(false); RegisterSingleInstance(FileOrganizationRepository); - UserManager = new UserManager(Logger, ServerConfigurationManager, UserRepository); + UserManager = new UserManager(LogManager.GetLogger("UserManager"), ServerConfigurationManager, UserRepository); RegisterSingleInstance(UserManager); LibraryManager = new LibraryManager(Logger, TaskManager, UserManager, ServerConfigurationManager, UserDataManager, () => LibraryMonitor, FileSystemManager, () => ProviderManager); @@ -462,13 +462,13 @@ namespace MediaBrowser.ServerApplication RegisterSingleInstance(HttpServer, false); progress.Report(10); - ServerManager = new ServerManager(this, JsonSerializer, Logger, ServerConfigurationManager); + ServerManager = new ServerManager(this, JsonSerializer, LogManager.GetLogger("ServerManager"), ServerConfigurationManager); RegisterSingleInstance(ServerManager); LocalizationManager = new LocalizationManager(ServerConfigurationManager, FileSystemManager); RegisterSingleInstance(LocalizationManager); - ImageProcessor = new ImageProcessor(Logger, ServerConfigurationManager.ApplicationPaths, FileSystemManager, JsonSerializer); + ImageProcessor = new ImageProcessor(LogManager.GetLogger("ImageProcessor"), ServerConfigurationManager.ApplicationPaths, FileSystemManager, JsonSerializer); RegisterSingleInstance(ImageProcessor); DtoService = new DtoService(Logger, LibraryManager, UserManager, UserDataManager, ItemRepository, ImageProcessor, ServerConfigurationManager, FileSystemManager, ProviderManager); @@ -477,7 +477,7 @@ namespace MediaBrowser.ServerApplication var newsService = new Server.Implementations.News.NewsService(ApplicationPaths, JsonSerializer); RegisterSingleInstance<INewsService>(newsService); - var fileOrganizationService = new FileOrganizationService(TaskManager, FileOrganizationRepository, Logger, LibraryMonitor, LibraryManager, ServerConfigurationManager, FileSystemManager, ProviderManager); + var fileOrganizationService = new FileOrganizationService(TaskManager, FileOrganizationRepository, LogManager.GetLogger("FileOrganizationService"), LibraryMonitor, LibraryManager, ServerConfigurationManager, FileSystemManager, ProviderManager); RegisterSingleInstance<IFileOrganizationService>(fileOrganizationService); progress.Report(15); @@ -498,7 +498,7 @@ namespace MediaBrowser.ServerApplication var appThemeManager = new AppThemeManager(ApplicationPaths, FileSystemManager, JsonSerializer, Logger); RegisterSingleInstance<IAppThemeManager>(appThemeManager); - var dlnaManager = new DlnaManager(XmlSerializer, FileSystemManager, JsonSerializer); + var dlnaManager = new DlnaManager(XmlSerializer, FileSystemManager, ApplicationPaths, LogManager.GetLogger("DLNA")); RegisterSingleInstance<IDlnaManager>(dlnaManager); var collectionManager = new CollectionManager(LibraryManager, FileSystemManager, LibraryMonitor); diff --git a/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj b/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj index 8351afbae..a9cbadffe 100644 --- a/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj +++ b/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj @@ -203,8 +203,12 @@ <Content Include="dashboard-ui\css\images\items\list\remotesearch.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
- <Content Include="dashboard-ui\css\images\media\pause.png" />
- <Content Include="dashboard-ui\css\images\media\play.png" />
+ <Content Include="dashboard-ui\css\images\media\pause.png">
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+ </Content>
+ <Content Include="dashboard-ui\css\images\media\play.png">
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+ </Content>
<Content Include="dashboard-ui\css\images\media\tvflyout.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
|
