Create profile xml structure

pull/702/head
Luke Pulverenti 11 years ago
parent 31e8288393
commit 4e2764e516

@ -1210,85 +1210,89 @@ namespace MediaBrowser.Api.Playback
if (i == 0) if (i == 0)
{ {
request.DeviceId = val; request.DeviceProfileId = val;
} }
else if (i == 1) else if (i == 1)
{ {
request.MediaSourceId = val; request.DeviceId = val;
} }
else if (i == 2) else if (i == 2)
{ {
request.Static = string.Equals("true", val, StringComparison.OrdinalIgnoreCase); request.MediaSourceId = val;
} }
else if (i == 3) else if (i == 3)
{
request.Static = string.Equals("true", val, StringComparison.OrdinalIgnoreCase);
}
else if (i == 4)
{ {
if (videoRequest != null) if (videoRequest != null)
{ {
videoRequest.VideoCodec = val; videoRequest.VideoCodec = val;
} }
} }
else if (i == 4) else if (i == 5)
{ {
request.AudioCodec = val; request.AudioCodec = val;
} }
else if (i == 5) else if (i == 6)
{ {
if (videoRequest != null) if (videoRequest != null)
{ {
videoRequest.AudioStreamIndex = int.Parse(val, UsCulture); videoRequest.AudioStreamIndex = int.Parse(val, UsCulture);
} }
} }
else if (i == 6) else if (i == 7)
{ {
if (videoRequest != null) if (videoRequest != null)
{ {
videoRequest.SubtitleStreamIndex = int.Parse(val, UsCulture); videoRequest.SubtitleStreamIndex = int.Parse(val, UsCulture);
} }
} }
else if (i == 7) else if (i == 8)
{ {
if (videoRequest != null) if (videoRequest != null)
{ {
videoRequest.VideoBitRate = int.Parse(val, UsCulture); videoRequest.VideoBitRate = int.Parse(val, UsCulture);
} }
} }
else if (i == 8) else if (i == 9)
{ {
request.AudioBitRate = int.Parse(val, UsCulture); request.AudioBitRate = int.Parse(val, UsCulture);
} }
else if (i == 9) else if (i == 10)
{ {
request.MaxAudioChannels = int.Parse(val, UsCulture); request.MaxAudioChannels = int.Parse(val, UsCulture);
} }
else if (i == 10) else if (i == 11)
{ {
if (videoRequest != null) if (videoRequest != null)
{ {
videoRequest.MaxWidth = int.Parse(val, UsCulture); videoRequest.MaxWidth = int.Parse(val, UsCulture);
} }
} }
else if (i == 11) else if (i == 12)
{ {
if (videoRequest != null) if (videoRequest != null)
{ {
videoRequest.MaxHeight = int.Parse(val, UsCulture); videoRequest.MaxHeight = int.Parse(val, UsCulture);
} }
} }
else if (i == 12) else if (i == 13)
{ {
if (videoRequest != null) if (videoRequest != null)
{ {
videoRequest.Framerate = int.Parse(val, UsCulture); videoRequest.Framerate = int.Parse(val, UsCulture);
} }
} }
else if (i == 13) else if (i == 14)
{ {
if (videoRequest != null) if (videoRequest != null)
{ {
request.StartTimeTicks = long.Parse(val, UsCulture); request.StartTimeTicks = long.Parse(val, UsCulture);
} }
} }
else if (i == 14) else if (i == 15)
{ {
if (videoRequest != null) if (videoRequest != null)
{ {

@ -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")] [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; } 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> /// <summary>
/// For testing purposes /// For testing purposes
/// </summary> /// </summary>

@ -1,13 +1,18 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Xml.Serialization;
namespace MediaBrowser.Controller.Dlna namespace MediaBrowser.Controller.Dlna
{ {
public class CodecProfile public class CodecProfile
{ {
[XmlAttribute("type")]
public CodecType Type { get; set; } public CodecType Type { get; set; }
public ProfileCondition[] Conditions { get; set; } public ProfileCondition[] Conditions { get; set; }
[XmlAttribute("codec")]
public string Codec { get; set; } public string Codec { get; set; }
public CodecProfile() public CodecProfile()
@ -37,9 +42,16 @@ namespace MediaBrowser.Controller.Dlna
public class ProfileCondition public class ProfileCondition
{ {
[XmlAttribute("condition")]
public ProfileConditionType Condition { get; set; } public ProfileConditionType Condition { get; set; }
[XmlAttribute("property")]
public ProfileConditionValue Property { get; set; } public ProfileConditionValue Property { get; set; }
[XmlAttribute("value")]
public string Value { get; set; } public string Value { get; set; }
[XmlAttribute("isRequired")]
public bool IsRequired { get; set; } public bool IsRequired { get; set; }
public ProfileCondition() public ProfileCondition()

@ -1,12 +1,16 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Xml.Serialization;
namespace MediaBrowser.Controller.Dlna namespace MediaBrowser.Controller.Dlna
{ {
public class ContainerProfile public class ContainerProfile
{ {
[XmlAttribute("type")]
public DlnaProfileType Type { get; set; } public DlnaProfileType Type { get; set; }
public ProfileCondition[] Conditions { get; set; } public ProfileCondition[] Conditions { get; set; }
[XmlAttribute("container")]
public string Container { get; set; } public string Container { get; set; }
public ContainerProfile() public ContainerProfile()

@ -1,4 +1,6 @@
 
using System.Xml.Serialization;
namespace MediaBrowser.Controller.Dlna namespace MediaBrowser.Controller.Dlna
{ {
public class DeviceIdentification public class DeviceIdentification
@ -62,8 +64,13 @@ namespace MediaBrowser.Controller.Dlna
public class HttpHeaderInfo public class HttpHeaderInfo
{ {
[XmlAttribute("name")]
public string Name { get; set; } public string Name { get; set; }
[XmlAttribute("value")]
public string Value { get; set; } public string Value { get; set; }
[XmlAttribute("match")]
public HeaderMatchType Match { get; set; } public HeaderMatchType Match { get; set; }
} }

@ -1,9 +1,12 @@
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
using System; using System;
using System.Linq; using System.Linq;
using System.Runtime.Serialization;
using System.Xml.Serialization;
namespace MediaBrowser.Controller.Dlna namespace MediaBrowser.Controller.Dlna
{ {
[XmlRoot("Profile")]
public class DeviceProfile public class DeviceProfile
{ {
/// <summary> /// <summary>
@ -12,19 +15,9 @@ namespace MediaBrowser.Controller.Dlna
/// <value>The name.</value> /// <value>The name.</value>
public string Name { get; set; } public string Name { get; set; }
/// <summary> [XmlIgnore]
/// Gets or sets the transcoding profiles. [IgnoreDataMember]
/// </summary> public string Id { get; set; }
/// <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; }
/// <summary> /// <summary>
/// Gets or sets the identification. /// Gets or sets the identification.
@ -57,14 +50,27 @@ namespace MediaBrowser.Controller.Dlna
public string ProtocolInfo { get; set; } public string ProtocolInfo { get; set; }
public MediaProfile[] MediaProfiles { get; set; }
public CodecProfile[] CodecProfiles { get; set; }
public int TimelineOffsetSeconds { get; set; } public int TimelineOffsetSeconds { get; set; }
public bool RequiresPlainVideoItems { get; set; } public bool RequiresPlainVideoItems { get; set; }
public bool RequiresPlainFolders { 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() public DeviceProfile()
{ {
DirectPlayProfiles = new DirectPlayProfile[] { }; DirectPlayProfiles = new DirectPlayProfile[] { };

@ -1,14 +1,21 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Xml.Serialization;
namespace MediaBrowser.Controller.Dlna namespace MediaBrowser.Controller.Dlna
{ {
public class DirectPlayProfile public class DirectPlayProfile
{ {
[XmlAttribute("container")]
public string Container { get; set; } public string Container { get; set; }
[XmlAttribute("audioCodec")]
public string AudioCodec { get; set; } public string AudioCodec { get; set; }
[XmlAttribute("videoCodec")]
public string VideoCodec { get; set; } public string VideoCodec { get; set; }
[XmlAttribute("type")]
public DlnaProfileType Type { get; set; } public DlnaProfileType Type { get; set; }
public List<string> GetContainers() public List<string> GetContainers()

@ -1,20 +1,15 @@
using System.Collections.Generic; using MediaBrowser.Model.Dlna;
using System.Collections.Generic;
namespace MediaBrowser.Controller.Dlna namespace MediaBrowser.Controller.Dlna
{ {
public interface IDlnaManager public interface IDlnaManager
{ {
/// <summary> /// <summary>
/// Gets the dlna profiles. /// Gets the profile infos.
/// </summary> /// </summary>
/// <returns>IEnumerable{DlnaProfile}.</returns> /// <returns>IEnumerable{DeviceProfileInfo}.</returns>
IEnumerable<DeviceProfile> GetProfiles(); IEnumerable<DeviceProfileInfo> GetProfileInfos();
/// <summary>
/// Gets the default profile.
/// </summary>
/// <returns>DlnaProfile.</returns>
DeviceProfile GetDefaultProfile();
/// <summary> /// <summary>
/// Gets the profile. /// Gets the profile.
@ -23,6 +18,13 @@ namespace MediaBrowser.Controller.Dlna
/// <returns>DeviceProfile.</returns> /// <returns>DeviceProfile.</returns>
DeviceProfile GetProfile(IDictionary<string,string> headers); DeviceProfile GetProfile(IDictionary<string,string> headers);
/// <summary>
/// Gets the profile.
/// </summary>
/// <param name="id">The identifier.</param>
/// <returns>DeviceProfile.</returns>
DeviceProfile GetProfile(string id);
/// <summary> /// <summary>
/// Gets the profile. /// Gets the profile.
/// </summary> /// </summary>

@ -1,16 +1,27 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Xml.Serialization;
namespace MediaBrowser.Controller.Dlna namespace MediaBrowser.Controller.Dlna
{ {
public class MediaProfile public class MediaProfile
{ {
[XmlAttribute("container")]
public string Container { get; set; } public string Container { get; set; }
[XmlAttribute("audioCodec")]
public string AudioCodec { get; set; } public string AudioCodec { get; set; }
[XmlAttribute("videoCodec")]
public string VideoCodec { get; set; } public string VideoCodec { get; set; }
[XmlAttribute("type")]
public DlnaProfileType Type { get; set; } public DlnaProfileType Type { get; set; }
[XmlAttribute("orgPn")]
public string OrgPn { get; set; } public string OrgPn { get; set; }
[XmlAttribute("mimeType")]
public string MimeType { get; set; } public string MimeType { get; set; }
public ProfileCondition[] Conditions { get; set; } public ProfileCondition[] Conditions { get; set; }

@ -1,19 +1,30 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Xml.Serialization;
namespace MediaBrowser.Controller.Dlna namespace MediaBrowser.Controller.Dlna
{ {
public class TranscodingProfile public class TranscodingProfile
{ {
[XmlAttribute("container")]
public string Container { get; set; } public string Container { get; set; }
[XmlAttribute("type")]
public DlnaProfileType Type { get; set; } public DlnaProfileType Type { get; set; }
[XmlAttribute("videoCodec")]
public string VideoCodec { get; set; } public string VideoCodec { get; set; }
[XmlAttribute("audioCodec")]
public string AudioCodec { get; set; } public string AudioCodec { get; set; }
[XmlAttribute("estimateContentLength")]
public bool EstimateContentLength { get; set; } public bool EstimateContentLength { get; set; }
[XmlAttribute("enableMpegtsM2TsMode")]
public bool EnableMpegtsM2TsMode { get; set; } public bool EnableMpegtsM2TsMode { get; set; }
[XmlAttribute("transcodeSeekInfo")]
public TranscodeSeekInfo TranscodeSeekInfo { get; set; } public TranscodeSeekInfo TranscodeSeekInfo { get; set; }
public TranscodingSetting[] Settings { get; set; } public TranscodingSetting[] Settings { get; set; }
@ -32,7 +43,10 @@ namespace MediaBrowser.Controller.Dlna
public class TranscodingSetting public class TranscodingSetting
{ {
[XmlAttribute("name")]
public TranscodingSettingType Name { get; set; } public TranscodingSettingType Name { get; set; }
[XmlAttribute("value")]
public string Value { get; set; } public string Value { get; set; }
} }

@ -1,10 +1,14 @@
using MediaBrowser.Common.Configuration; using MediaBrowser.Common.Configuration;
using MediaBrowser.Common.Extensions;
using MediaBrowser.Common.IO; using MediaBrowser.Common.IO;
using MediaBrowser.Controller.Dlna; using MediaBrowser.Controller.Dlna;
using MediaBrowser.Dlna.Profiles; using MediaBrowser.Dlna.Profiles;
using MediaBrowser.Model.Dlna;
using MediaBrowser.Model.Logging;
using MediaBrowser.Model.Serialization; using MediaBrowser.Model.Serialization;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO;
using System.Linq; using System.Linq;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
@ -12,21 +16,36 @@ namespace MediaBrowser.Dlna
{ {
public class DlnaManager : IDlnaManager public class DlnaManager : IDlnaManager
{ {
private IApplicationPaths _appPaths; private readonly IApplicationPaths _appPaths;
private readonly IXmlSerializer _xmlSerializer; private readonly IXmlSerializer _xmlSerializer;
private readonly IFileSystem _fileSystem; 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; _xmlSerializer = xmlSerializer;
_fileSystem = fileSystem; _fileSystem = fileSystem;
_jsonSerializer = jsonSerializer; _appPaths = appPaths;
_logger = logger;
GetProfiles(); //DumpProfiles();
} }
public IEnumerable<DeviceProfile> GetProfiles() 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> var list = new List<DeviceProfile>
{ {
@ -45,16 +64,40 @@ namespace MediaBrowser.Dlna
new DenonAvrProfile(), new DenonAvrProfile(),
new LinksysDMA2100Profile(), new LinksysDMA2100Profile(),
new LgTvProfile(), new LgTvProfile(),
new Foobar2000Profile() new Foobar2000Profile(),
new DefaultProfile()
}; };
foreach (var item in list) foreach (var item in list)
{ {
//_xmlSerializer.SerializeToFile(item, "d:\\" + _fileSystem.GetValidFilename(item.Name) + ".xml"); _xmlSerializer.SerializeToFile(item, "d:\\" + _fileSystem.GetValidFilename(item.Name) + ".xml");
//_jsonSerializer.SerializeToFile(item, "d:\\" + _fileSystem.GetValidFilename(item.Name) + ".json");
} }
}
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() public DeviceProfile GetDefaultProfile()
@ -64,8 +107,12 @@ namespace MediaBrowser.Dlna
public DeviceProfile GetProfile(DeviceIdentification deviceInfo) public DeviceProfile GetProfile(DeviceIdentification deviceInfo)
{ {
return GetProfiles().FirstOrDefault(i => IsMatch(deviceInfo, i.Identification)) ?? var profile = GetProfiles().FirstOrDefault(i => IsMatch(deviceInfo, i.Identification)) ??
GetDefaultProfile(); GetDefaultProfile();
_logger.Debug("Found matching device profile: {0}", profile.Name);
return profile;
} }
private bool IsMatch(DeviceIdentification deviceInfo, DeviceIdentification profileInfo) private bool IsMatch(DeviceIdentification deviceInfo, DeviceIdentification profileInfo)
@ -159,5 +206,145 @@ namespace MediaBrowser.Dlna
return false; 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; }
}
} }
} }

@ -117,7 +117,27 @@
<Name>MediaBrowser.Model</Name> <Name>MediaBrowser.Model</Name>
</ProjectReference> </ProjectReference>
</ItemGroup> </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" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. <!-- 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. Other similar extension points exist, see Microsoft.Common.targets.

@ -4,18 +4,6 @@ namespace MediaBrowser.Dlna.PlayTo
{ {
public class CurrentIdEventArgs : EventArgs public class CurrentIdEventArgs : EventArgs
{ {
public Guid Id { get; set; } public string Id { get; set; }
public CurrentIdEventArgs(string id)
{
if (string.IsNullOrWhiteSpace(id) || id == "0")
{
Id = Guid.Empty;
}
else
{
Id = new Guid(id);
}
}
} }
} }

@ -42,6 +42,7 @@ namespace MediaBrowser.Dlna.PlayTo
if (_currentId == value) if (_currentId == value)
return; return;
_currentId = value; _currentId = value;
NotifyCurrentIdChanged(value); NotifyCurrentIdChanged(value);
} }
} }
@ -250,7 +251,7 @@ namespace MediaBrowser.Dlna.PlayTo
StopTimer(); StopTimer();
await SetStop().ConfigureAwait(false); await SetStop().ConfigureAwait(false);
CurrentId = "0"; CurrentId = null;
var command = AvCommands.ServiceActions.FirstOrDefault(c => c.Name == "SetAVTransportURI"); var command = AvCommands.ServiceActions.FirstOrDefault(c => c.Name == "SetAVTransportURI");
if (command == null) if (command == null)
@ -514,7 +515,7 @@ namespace MediaBrowser.Dlna.PlayTo
if (String.IsNullOrEmpty(track)) if (String.IsNullOrEmpty(track))
{ {
CurrentId = "0"; CurrentId = null;
return; return;
} }
@ -775,7 +776,7 @@ namespace MediaBrowser.Dlna.PlayTo
private void NotifyCurrentIdChanged(string value) private void NotifyCurrentIdChanged(string value)
{ {
if (CurrentIdChanged != null) if (CurrentIdChanged != null)
CurrentIdChanged.Invoke(this, new CurrentIdEventArgs(value)); CurrentIdChanged.Invoke(this, new CurrentIdEventArgs { Id = value });
} }
#endregion #endregion

@ -20,7 +20,7 @@ namespace MediaBrowser.Dlna.PlayTo
public class PlayToController : ISessionController, IDisposable public class PlayToController : ISessionController, IDisposable
{ {
private Device _device; private Device _device;
private BaseItem _currentItem = null; private BaseItem _currentItem;
private readonly SessionInfo _session; private readonly SessionInfo _session;
private readonly ISessionManager _sessionManager; private readonly ISessionManager _sessionManager;
private readonly IItemRepository _itemRepository; private readonly IItemRepository _itemRepository;
@ -30,7 +30,7 @@ namespace MediaBrowser.Dlna.PlayTo
private readonly IDlnaManager _dlnaManager; private readonly IDlnaManager _dlnaManager;
private readonly IUserManager _userManager; private readonly IUserManager _userManager;
private readonly IServerApplicationHost _appHost; private readonly IServerApplicationHost _appHost;
private bool _playbackStarted = false; private bool _playbackStarted;
private const int UpdateTimerIntervalMs = 1000; private const int UpdateTimerIntervalMs = 1000;
@ -103,22 +103,27 @@ namespace MediaBrowser.Dlna.PlayTo
async void Device_CurrentIdChanged(object sender, CurrentIdEventArgs e) 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) if (item != null)
{ {
_logger.Debug("{0} - CurrentId {1}", _session.DeviceName, item.Id); _logger.Debug("{0} - CurrentId {1}", _session.DeviceName, item.Id);
_currentItem = item; _currentItem = item;
_playbackStarted = false; _playbackStarted = false;
await ReportProgress().ConfigureAwait(false); await ReportProgress().ConfigureAwait(false);
}
} }
} }
} }
@ -418,6 +423,7 @@ namespace MediaBrowser.Dlna.PlayTo
var playlistItem = GetPlaylistItem(item, streams, profile); var playlistItem = GetPlaylistItem(item, streams, profile);
playlistItem.StartPositionTicks = startPostionTicks; playlistItem.StartPositionTicks = startPostionTicks;
playlistItem.DeviceProfileId = profile.Id;
if (playlistItem.MediaType == DlnaProfileType.Audio) if (playlistItem.MediaType == DlnaProfileType.Audio)
{ {

@ -46,6 +46,8 @@ namespace MediaBrowser.Dlna.PlayTo
public int? MaxFramerate { get; set; } public int? MaxFramerate { get; set; }
public string DeviceProfileId { get; set; }
public PlaylistItem() public PlaylistItem()
{ {
TranscodingSettings = new List<TranscodingSetting>(); TranscodingSettings = new List<TranscodingSetting>();

@ -45,6 +45,7 @@ namespace MediaBrowser.Dlna.PlayTo
var list = new List<string> var list = new List<string>
{ {
item.DeviceProfileId ?? string.Empty,
deviceProperties.UUID ?? string.Empty, deviceProperties.UUID ?? string.Empty,
item.MediaSourceId ?? string.Empty, item.MediaSourceId ?? string.Empty,
(!item.Transcode).ToString().ToLower(), (!item.Transcode).ToString().ToLower(),

@ -1,7 +1,9 @@
using MediaBrowser.Controller.Dlna; using MediaBrowser.Controller.Dlna;
using System.Xml.Serialization;
namespace MediaBrowser.Dlna.Profiles namespace MediaBrowser.Dlna.Profiles
{ {
[XmlRoot("Profile")]
public class DefaultProfile : DeviceProfile public class DefaultProfile : DeviceProfile
{ {
public DefaultProfile() public DefaultProfile()

@ -1,7 +1,9 @@
using MediaBrowser.Controller.Dlna; using System.Xml.Serialization;
using MediaBrowser.Controller.Dlna;
namespace MediaBrowser.Dlna.Profiles namespace MediaBrowser.Dlna.Profiles
{ {
[XmlRoot("Profile")]
public class DenonAvrProfile : DefaultProfile public class DenonAvrProfile : DefaultProfile
{ {
public DenonAvrProfile() public DenonAvrProfile()

@ -1,7 +1,9 @@
using MediaBrowser.Controller.Dlna; using System.Xml.Serialization;
using MediaBrowser.Controller.Dlna;
namespace MediaBrowser.Dlna.Profiles namespace MediaBrowser.Dlna.Profiles
{ {
[XmlRoot("Profile")]
public class Foobar2000Profile : DefaultProfile public class Foobar2000Profile : DefaultProfile
{ {
public Foobar2000Profile() public Foobar2000Profile()

@ -1,7 +1,9 @@
using MediaBrowser.Controller.Dlna; using System.Xml.Serialization;
using MediaBrowser.Controller.Dlna;
namespace MediaBrowser.Dlna.Profiles namespace MediaBrowser.Dlna.Profiles
{ {
[XmlRoot("Profile")]
public class LgTvProfile : DefaultProfile public class LgTvProfile : DefaultProfile
{ {
public LgTvProfile() public LgTvProfile()

@ -1,7 +1,9 @@
using MediaBrowser.Controller.Dlna; using System.Xml.Serialization;
using MediaBrowser.Controller.Dlna;
namespace MediaBrowser.Dlna.Profiles namespace MediaBrowser.Dlna.Profiles
{ {
[XmlRoot("Profile")]
public class LinksysDMA2100Profile : DefaultProfile public class LinksysDMA2100Profile : DefaultProfile
{ {
public LinksysDMA2100Profile() public LinksysDMA2100Profile()

@ -1,19 +1,21 @@
using MediaBrowser.Controller.Dlna; using System.Xml.Serialization;
using MediaBrowser.Controller.Dlna;
namespace MediaBrowser.Dlna.Profiles namespace MediaBrowser.Dlna.Profiles
{ {
public class PanasonicVieraProfile : DefaultProfile [XmlRoot("Profile")]
public class PanasonicVieraProfile : DefaultProfile
{ {
public PanasonicVieraProfile() public PanasonicVieraProfile()
{ {
Name = "Panasonic Viera"; Name = "Panasonic Viera";
Identification = new DeviceIdentification Identification = new DeviceIdentification
{ {
FriendlyName = @"VIERA", FriendlyName = @"VIERA",
Manufacturer = "Panasonic", Manufacturer = "Panasonic",
Headers = new[] Headers = new[]
{ {
new HttpHeaderInfo new HttpHeaderInfo
{ {
@ -22,11 +24,11 @@ namespace MediaBrowser.Dlna.Profiles
Match = HeaderMatchType.Substring Match = HeaderMatchType.Substring
} }
} }
}; };
TimelineOffsetSeconds = 10; TimelineOffsetSeconds = 10;
TranscodingProfiles = new[] TranscodingProfiles = new[]
{ {
new TranscodingProfile new TranscodingProfile
{ {
@ -48,7 +50,7 @@ namespace MediaBrowser.Dlna.Profiles
} }
}; };
DirectPlayProfiles = new[] DirectPlayProfiles = new[]
{ {
new DirectPlayProfile new DirectPlayProfile
{ {
@ -127,7 +129,7 @@ namespace MediaBrowser.Dlna.Profiles
} }
}; };
ContainerProfiles = new[] ContainerProfiles = new[]
{ {
new ContainerProfile new ContainerProfile
{ {
@ -151,7 +153,7 @@ namespace MediaBrowser.Dlna.Profiles
} }
}; };
CodecProfiles = new[] CodecProfiles = new[]
{ {
new CodecProfile new CodecProfile
{ {
@ -181,6 +183,6 @@ namespace MediaBrowser.Dlna.Profiles
} }
} }
}; };
} }
} }
} }

@ -1,7 +1,9 @@
using MediaBrowser.Controller.Dlna; using System.Xml.Serialization;
using MediaBrowser.Controller.Dlna;
namespace MediaBrowser.Dlna.Profiles namespace MediaBrowser.Dlna.Profiles
{ {
[XmlRoot("Profile")]
public class SamsungSmartTvProfile : DefaultProfile public class SamsungSmartTvProfile : DefaultProfile
{ {
public SamsungSmartTvProfile() public SamsungSmartTvProfile()

@ -1,7 +1,9 @@
using MediaBrowser.Controller.Dlna; using System.Xml.Serialization;
using MediaBrowser.Controller.Dlna;
namespace MediaBrowser.Dlna.Profiles namespace MediaBrowser.Dlna.Profiles
{ {
[XmlRoot("Profile")]
public class SonyBlurayPlayer2013Profile : DefaultProfile public class SonyBlurayPlayer2013Profile : DefaultProfile
{ {
public SonyBlurayPlayer2013Profile() public SonyBlurayPlayer2013Profile()

@ -1,7 +1,9 @@
using MediaBrowser.Controller.Dlna; using System.Xml.Serialization;
using MediaBrowser.Controller.Dlna;
namespace MediaBrowser.Dlna.Profiles namespace MediaBrowser.Dlna.Profiles
{ {
[XmlRoot("Profile")]
public class SonyBlurayPlayerProfile : DefaultProfile public class SonyBlurayPlayerProfile : DefaultProfile
{ {
public SonyBlurayPlayerProfile() public SonyBlurayPlayerProfile()

@ -1,7 +1,9 @@
using MediaBrowser.Controller.Dlna; using System.Xml.Serialization;
using MediaBrowser.Controller.Dlna;
namespace MediaBrowser.Dlna.Profiles namespace MediaBrowser.Dlna.Profiles
{ {
[XmlRoot("Profile")]
public class SonyBravia2010Profile : DefaultProfile public class SonyBravia2010Profile : DefaultProfile
{ {
public SonyBravia2010Profile() public SonyBravia2010Profile()

@ -1,7 +1,9 @@
using MediaBrowser.Controller.Dlna; using System.Xml.Serialization;
using MediaBrowser.Controller.Dlna;
namespace MediaBrowser.Dlna.Profiles namespace MediaBrowser.Dlna.Profiles
{ {
[XmlRoot("Profile")]
public class SonyBravia2011Profile : DefaultProfile public class SonyBravia2011Profile : DefaultProfile
{ {
public SonyBravia2011Profile() public SonyBravia2011Profile()

@ -1,7 +1,9 @@
using MediaBrowser.Controller.Dlna; using System.Xml.Serialization;
using MediaBrowser.Controller.Dlna;
namespace MediaBrowser.Dlna.Profiles namespace MediaBrowser.Dlna.Profiles
{ {
[XmlRoot("Profile")]
public class SonyBravia2012Profile : DefaultProfile public class SonyBravia2012Profile : DefaultProfile
{ {
public SonyBravia2012Profile() public SonyBravia2012Profile()

@ -1,7 +1,9 @@
using MediaBrowser.Controller.Dlna; using System.Xml.Serialization;
using MediaBrowser.Controller.Dlna;
namespace MediaBrowser.Dlna.Profiles namespace MediaBrowser.Dlna.Profiles
{ {
[XmlRoot("Profile")]
public class SonyBravia2013Profile : DefaultProfile public class SonyBravia2013Profile : DefaultProfile
{ {
public SonyBravia2013Profile() public SonyBravia2013Profile()

@ -1,7 +1,9 @@
using MediaBrowser.Controller.Dlna; using System.Xml.Serialization;
using MediaBrowser.Controller.Dlna;
namespace MediaBrowser.Dlna.Profiles namespace MediaBrowser.Dlna.Profiles
{ {
[XmlRoot("Profile")]
public class SonyPs3Profile : DefaultProfile public class SonyPs3Profile : DefaultProfile
{ {
public SonyPs3Profile() public SonyPs3Profile()

@ -1,7 +1,9 @@
using MediaBrowser.Controller.Dlna; using System.Xml.Serialization;
using MediaBrowser.Controller.Dlna;
namespace MediaBrowser.Dlna.Profiles namespace MediaBrowser.Dlna.Profiles
{ {
[XmlRoot("Profile")]
public class WdtvLiveProfile : DefaultProfile public class WdtvLiveProfile : DefaultProfile
{ {
public WdtvLiveProfile() public WdtvLiveProfile()

@ -1,7 +1,9 @@
using MediaBrowser.Controller.Dlna; using System.Xml.Serialization;
using MediaBrowser.Controller.Dlna;
namespace MediaBrowser.Dlna.Profiles namespace MediaBrowser.Dlna.Profiles
{ {
[XmlRoot("Profile")]
public class Xbox360Profile : DefaultProfile public class Xbox360Profile : DefaultProfile
{ {
public Xbox360Profile() public Xbox360Profile()

@ -1,7 +1,9 @@
using MediaBrowser.Controller.Dlna; using System.Xml.Serialization;
using MediaBrowser.Controller.Dlna;
namespace MediaBrowser.Dlna.Profiles namespace MediaBrowser.Dlna.Profiles
{ {
[XmlRoot("Profile")]
public class XboxOneProfile : DefaultProfile public class XboxOneProfile : DefaultProfile
{ {
public XboxOneProfile() public XboxOneProfile()

@ -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>

@ -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>

@ -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>

@ -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>

@ -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>

@ -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>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -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>

@ -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>

@ -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>

@ -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>

@ -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>

@ -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>

@ -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>

@ -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>

@ -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>

@ -101,6 +101,9 @@
<Compile Include="..\MediaBrowser.Model\Configuration\UserConfiguration.cs"> <Compile Include="..\MediaBrowser.Model\Configuration\UserConfiguration.cs">
<Link>Configuration\UserConfiguration.cs</Link> <Link>Configuration\UserConfiguration.cs</Link>
</Compile> </Compile>
<Compile Include="..\MediaBrowser.Model\Dlna\DeviceProfileInfo.cs">
<Link>Dlna\DeviceProfileInfo.cs</Link>
</Compile>
<Compile Include="..\MediaBrowser.Model\Drawing\DrawingUtils.cs"> <Compile Include="..\MediaBrowser.Model\Drawing\DrawingUtils.cs">
<Link>Drawing\DrawingUtils.cs</Link> <Link>Drawing\DrawingUtils.cs</Link>
</Compile> </Compile>

@ -88,6 +88,9 @@
<Compile Include="..\MediaBrowser.Model\Configuration\UserConfiguration.cs"> <Compile Include="..\MediaBrowser.Model\Configuration\UserConfiguration.cs">
<Link>Configuration\UserConfiguration.cs</Link> <Link>Configuration\UserConfiguration.cs</Link>
</Compile> </Compile>
<Compile Include="..\MediaBrowser.Model\Dlna\DeviceProfileInfo.cs">
<Link>Dlna\DeviceProfileInfo.cs</Link>
</Compile>
<Compile Include="..\MediaBrowser.Model\Drawing\DrawingUtils.cs"> <Compile Include="..\MediaBrowser.Model\Drawing\DrawingUtils.cs">
<Link>Drawing\DrawingUtils.cs</Link> <Link>Drawing\DrawingUtils.cs</Link>
</Compile> </Compile>

@ -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
}
}

@ -66,6 +66,7 @@
<Compile Include="Configuration\MetadataPlugin.cs" /> <Compile Include="Configuration\MetadataPlugin.cs" />
<Compile Include="Configuration\MetadataOptions.cs" /> <Compile Include="Configuration\MetadataOptions.cs" />
<Compile Include="Configuration\ServerConfiguration.cs" /> <Compile Include="Configuration\ServerConfiguration.cs" />
<Compile Include="Dlna\DeviceProfileInfo.cs" />
<Compile Include="Drawing\ImageOutputFormat.cs" /> <Compile Include="Drawing\ImageOutputFormat.cs" />
<Compile Include="Dto\BaseItemPerson.cs" /> <Compile Include="Dto\BaseItemPerson.cs" />
<Compile Include="Dto\ChapterInfoDto.cs" /> <Compile Include="Dto\ChapterInfoDto.cs" />

@ -1498,8 +1498,11 @@ namespace MediaBrowser.Server.Implementations.LiveTv
{ {
var programs = _programs.ToList(); var programs = _programs.ToList();
var startDate = programs.Select(i => i.Value.StartDate).Min(); var startDate = _programs.Count == 0 ? DateTime.MinValue :
var endDate = programs.Select(i => i.Value.StartDate).Max(); programs.Select(i => i.Value.StartDate).Min();
var endDate = programs.Count == 0 ? DateTime.MinValue :
programs.Select(i => i.Value.StartDate).Max();
return new GuideInfo return new GuideInfo
{ {

@ -441,7 +441,7 @@ namespace MediaBrowser.ServerApplication
FileOrganizationRepository = await GetFileOrganizationRepository().ConfigureAwait(false); FileOrganizationRepository = await GetFileOrganizationRepository().ConfigureAwait(false);
RegisterSingleInstance(FileOrganizationRepository); RegisterSingleInstance(FileOrganizationRepository);
UserManager = new UserManager(Logger, ServerConfigurationManager, UserRepository); UserManager = new UserManager(LogManager.GetLogger("UserManager"), ServerConfigurationManager, UserRepository);
RegisterSingleInstance(UserManager); RegisterSingleInstance(UserManager);
LibraryManager = new LibraryManager(Logger, TaskManager, UserManager, ServerConfigurationManager, UserDataManager, () => LibraryMonitor, FileSystemManager, () => ProviderManager); LibraryManager = new LibraryManager(Logger, TaskManager, UserManager, ServerConfigurationManager, UserDataManager, () => LibraryMonitor, FileSystemManager, () => ProviderManager);
@ -462,13 +462,13 @@ namespace MediaBrowser.ServerApplication
RegisterSingleInstance(HttpServer, false); RegisterSingleInstance(HttpServer, false);
progress.Report(10); progress.Report(10);
ServerManager = new ServerManager(this, JsonSerializer, Logger, ServerConfigurationManager); ServerManager = new ServerManager(this, JsonSerializer, LogManager.GetLogger("ServerManager"), ServerConfigurationManager);
RegisterSingleInstance(ServerManager); RegisterSingleInstance(ServerManager);
LocalizationManager = new LocalizationManager(ServerConfigurationManager, FileSystemManager); LocalizationManager = new LocalizationManager(ServerConfigurationManager, FileSystemManager);
RegisterSingleInstance(LocalizationManager); RegisterSingleInstance(LocalizationManager);
ImageProcessor = new ImageProcessor(Logger, ServerConfigurationManager.ApplicationPaths, FileSystemManager, JsonSerializer); ImageProcessor = new ImageProcessor(LogManager.GetLogger("ImageProcessor"), ServerConfigurationManager.ApplicationPaths, FileSystemManager, JsonSerializer);
RegisterSingleInstance(ImageProcessor); RegisterSingleInstance(ImageProcessor);
DtoService = new DtoService(Logger, LibraryManager, UserManager, UserDataManager, ItemRepository, ImageProcessor, ServerConfigurationManager, FileSystemManager, ProviderManager); 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); var newsService = new Server.Implementations.News.NewsService(ApplicationPaths, JsonSerializer);
RegisterSingleInstance<INewsService>(newsService); 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); RegisterSingleInstance<IFileOrganizationService>(fileOrganizationService);
progress.Report(15); progress.Report(15);
@ -498,7 +498,7 @@ namespace MediaBrowser.ServerApplication
var appThemeManager = new AppThemeManager(ApplicationPaths, FileSystemManager, JsonSerializer, Logger); var appThemeManager = new AppThemeManager(ApplicationPaths, FileSystemManager, JsonSerializer, Logger);
RegisterSingleInstance<IAppThemeManager>(appThemeManager); RegisterSingleInstance<IAppThemeManager>(appThemeManager);
var dlnaManager = new DlnaManager(XmlSerializer, FileSystemManager, JsonSerializer); var dlnaManager = new DlnaManager(XmlSerializer, FileSystemManager, ApplicationPaths, LogManager.GetLogger("DLNA"));
RegisterSingleInstance<IDlnaManager>(dlnaManager); RegisterSingleInstance<IDlnaManager>(dlnaManager);
var collectionManager = new CollectionManager(LibraryManager, FileSystemManager, LibraryMonitor); var collectionManager = new CollectionManager(LibraryManager, FileSystemManager, LibraryMonitor);

@ -203,8 +203,12 @@
<Content Include="dashboard-ui\css\images\items\list\remotesearch.png"> <Content Include="dashboard-ui\css\images\items\list\remotesearch.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content> </Content>
<Content Include="dashboard-ui\css\images\media\pause.png" /> <Content Include="dashboard-ui\css\images\media\pause.png">
<Content Include="dashboard-ui\css\images\media\play.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"> <Content Include="dashboard-ui\css\images\media\tvflyout.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content> </Content>

Loading…
Cancel
Save