mirror of
https://github.com/jellyfin/jellyfin.git
synced 2024-07-30 01:09:09 +02:00
separate profiles
This commit is contained in:
parent
e0c60dc29a
commit
85aa11e926
|
@ -6,12 +6,12 @@ namespace MediaBrowser.Controller.Dlna
|
||||||
public class CodecProfile
|
public class CodecProfile
|
||||||
{
|
{
|
||||||
public CodecType Type { get; set; }
|
public CodecType Type { get; set; }
|
||||||
public List<ProfileCondition> Conditions { get; set; }
|
public ProfileCondition[] Conditions { get; set; }
|
||||||
public string Codec { get; set; }
|
public string Codec { get; set; }
|
||||||
|
|
||||||
public CodecProfile()
|
public CodecProfile()
|
||||||
{
|
{
|
||||||
Conditions = new List<ProfileCondition>();
|
Conditions = new ProfileCondition[] {};
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<string> GetCodecs()
|
public List<string> GetCodecs()
|
||||||
|
|
22
MediaBrowser.Controller/Dlna/ContainerProfile.cs
Normal file
22
MediaBrowser.Controller/Dlna/ContainerProfile.cs
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
namespace MediaBrowser.Controller.Dlna
|
||||||
|
{
|
||||||
|
public class ContainerProfile
|
||||||
|
{
|
||||||
|
public DlnaProfileType Type { get; set; }
|
||||||
|
public ProfileCondition[] Conditions { get; set; }
|
||||||
|
public string Container { get; set; }
|
||||||
|
|
||||||
|
public ContainerProfile()
|
||||||
|
{
|
||||||
|
Conditions = new ProfileCondition[] { };
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<string> GetContainers()
|
||||||
|
{
|
||||||
|
return (Container ?? string.Empty).Split(',').Where(i => !string.IsNullOrWhiteSpace(i)).ToList();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,5 +1,4 @@
|
||||||
using System.Collections.Generic;
|
|
||||||
|
|
||||||
namespace MediaBrowser.Controller.Dlna
|
namespace MediaBrowser.Controller.Dlna
|
||||||
{
|
{
|
||||||
public class DeviceIdentification
|
public class DeviceIdentification
|
||||||
|
@ -55,11 +54,11 @@ namespace MediaBrowser.Controller.Dlna
|
||||||
/// Gets or sets the headers.
|
/// Gets or sets the headers.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The headers.</value>
|
/// <value>The headers.</value>
|
||||||
public List<HttpHeaderInfo> Headers { get; set; }
|
public HttpHeaderInfo[] Headers { get; set; }
|
||||||
|
|
||||||
public DeviceIdentification()
|
public DeviceIdentification()
|
||||||
{
|
{
|
||||||
Headers = new List<HttpHeaderInfo>();
|
Headers = new HttpHeaderInfo[] {};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -73,6 +72,7 @@ namespace MediaBrowser.Controller.Dlna
|
||||||
public enum HeaderMatchType
|
public enum HeaderMatchType
|
||||||
{
|
{
|
||||||
Equals = 0,
|
Equals = 0,
|
||||||
Substring = 1
|
Regex = 1,
|
||||||
|
Substring = 2
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,6 +27,8 @@ namespace MediaBrowser.Controller.Dlna
|
||||||
/// <value>The direct play profiles.</value>
|
/// <value>The direct play profiles.</value>
|
||||||
public DirectPlayProfile[] DirectPlayProfiles { get; set; }
|
public DirectPlayProfile[] DirectPlayProfiles { get; set; }
|
||||||
|
|
||||||
|
public ContainerProfile[] ContainerProfiles { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the identification.
|
/// Gets or sets the identification.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -40,6 +42,8 @@ namespace MediaBrowser.Controller.Dlna
|
||||||
public string ModelDescription { get; set; }
|
public string ModelDescription { get; set; }
|
||||||
public string ModelNumber { get; set; }
|
public string ModelNumber { get; set; }
|
||||||
public string ModelUrl { get; set; }
|
public string ModelUrl { get; set; }
|
||||||
|
public bool IgnoreTranscodeByteRangeRequests { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Controls the content of the X_DLNADOC element in the urn:schemas-dlna-org:device-1-0 namespace.
|
/// Controls the content of the X_DLNADOC element in the urn:schemas-dlna-org:device-1-0 namespace.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -69,6 +73,7 @@ namespace MediaBrowser.Controller.Dlna
|
||||||
TranscodingProfiles = new TranscodingProfile[] { };
|
TranscodingProfiles = new TranscodingProfile[] { };
|
||||||
MediaProfiles = new MediaProfile[] { };
|
MediaProfiles = new MediaProfile[] { };
|
||||||
CodecProfiles = new CodecProfile[] { };
|
CodecProfiles = new CodecProfile[] { };
|
||||||
|
ContainerProfiles = new ContainerProfile[] { };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,13 +11,6 @@ namespace MediaBrowser.Controller.Dlna
|
||||||
|
|
||||||
public DlnaProfileType Type { get; set; }
|
public DlnaProfileType Type { get; set; }
|
||||||
|
|
||||||
public List<ProfileCondition> Conditions { get; set; }
|
|
||||||
|
|
||||||
public DirectPlayProfile()
|
|
||||||
{
|
|
||||||
Conditions = new List<ProfileCondition>();
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<string> GetContainers()
|
public List<string> GetContainers()
|
||||||
{
|
{
|
||||||
return (Container ?? string.Empty).Split(',').Where(i => !string.IsNullOrWhiteSpace(i)).ToList();
|
return (Container ?? string.Empty).Split(',').Where(i => !string.IsNullOrWhiteSpace(i)).ToList();
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
using System.Collections.Generic;
|
|
||||||
|
|
||||||
namespace MediaBrowser.Controller.Dlna
|
namespace MediaBrowser.Controller.Dlna
|
||||||
{
|
{
|
||||||
public class TranscodingProfile
|
public class TranscodingProfile
|
||||||
|
@ -15,12 +14,14 @@ namespace MediaBrowser.Controller.Dlna
|
||||||
|
|
||||||
public TranscodeSeekInfo TranscodeSeekInfo { get; set; }
|
public TranscodeSeekInfo TranscodeSeekInfo { get; set; }
|
||||||
|
|
||||||
public List<TranscodingSetting> Settings { get; set; }
|
public TranscodingSetting[] Settings { get; set; }
|
||||||
|
|
||||||
public TranscodingProfile()
|
public TranscodingProfile()
|
||||||
{
|
{
|
||||||
Settings = new List<TranscodingSetting>();
|
Settings = new TranscodingSetting[] { };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool EnableMpegtsM2TsMode { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class TranscodingSetting
|
public class TranscodingSetting
|
||||||
|
|
|
@ -79,6 +79,7 @@
|
||||||
<Compile Include="Collections\CollectionCreationOptions.cs" />
|
<Compile Include="Collections\CollectionCreationOptions.cs" />
|
||||||
<Compile Include="Collections\ICollectionManager.cs" />
|
<Compile Include="Collections\ICollectionManager.cs" />
|
||||||
<Compile Include="Dlna\CodecProfile.cs" />
|
<Compile Include="Dlna\CodecProfile.cs" />
|
||||||
|
<Compile Include="Dlna\ContainerProfile.cs" />
|
||||||
<Compile Include="Dlna\DeviceIdentification.cs" />
|
<Compile Include="Dlna\DeviceIdentification.cs" />
|
||||||
<Compile Include="Dlna\DirectPlayProfile.cs" />
|
<Compile Include="Dlna\DirectPlayProfile.cs" />
|
||||||
<Compile Include="Dlna\IDlnaManager.cs" />
|
<Compile Include="Dlna\IDlnaManager.cs" />
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -81,6 +81,16 @@
|
||||||
<Compile Include="PlayTo\uIcon.cs" />
|
<Compile Include="PlayTo\uIcon.cs" />
|
||||||
<Compile Include="PlayTo\uParser.cs" />
|
<Compile Include="PlayTo\uParser.cs" />
|
||||||
<Compile Include="PlayTo\uPnpNamespaces.cs" />
|
<Compile Include="PlayTo\uPnpNamespaces.cs" />
|
||||||
|
<Compile Include="Profiles\DefaultProfile.cs" />
|
||||||
|
<Compile Include="Profiles\DenonAvrProfile.cs" />
|
||||||
|
<Compile Include="Profiles\PanasonicVieraProfile.cs" />
|
||||||
|
<Compile Include="Profiles\SonyBravia2010Profile.cs" />
|
||||||
|
<Compile Include="Profiles\SonyBravia2011Profile.cs" />
|
||||||
|
<Compile Include="Profiles\SonyBravia2012Profile.cs" />
|
||||||
|
<Compile Include="Profiles\SonyBravia2013Profile.cs" />
|
||||||
|
<Compile Include="Profiles\WdtvLiveProfile.cs" />
|
||||||
|
<Compile Include="Profiles\Xbox360Profile.cs" />
|
||||||
|
<Compile Include="Profiles\XboxOneProfile.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|
|
@ -399,8 +399,11 @@ namespace MediaBrowser.Dlna.PlayTo
|
||||||
|
|
||||||
var deviceInfo = _device.Properties;
|
var deviceInfo = _device.Properties;
|
||||||
|
|
||||||
var playlistItem = GetPlaylistItem(item, streams, _dlnaManager.GetProfile(deviceInfo.ToDeviceIdentification()));
|
var profile = _dlnaManager.GetProfile(deviceInfo.ToDeviceIdentification());
|
||||||
|
|
||||||
|
var playlistItem = GetPlaylistItem(item, streams, profile);
|
||||||
playlistItem.StartPositionTicks = startPostionTicks;
|
playlistItem.StartPositionTicks = startPostionTicks;
|
||||||
|
playlistItem.DeviceProfileName = profile.Name;
|
||||||
|
|
||||||
if (playlistItem.MediaType == DlnaProfileType.Audio)
|
if (playlistItem.MediaType == DlnaProfileType.Audio)
|
||||||
{
|
{
|
||||||
|
|
|
@ -33,6 +33,8 @@ namespace MediaBrowser.Dlna.PlayTo
|
||||||
|
|
||||||
public int? SubtitleStreamIndex { get; set; }
|
public int? SubtitleStreamIndex { get; set; }
|
||||||
|
|
||||||
|
public string DeviceProfileName { get; set; }
|
||||||
|
|
||||||
public PlaylistItem()
|
public PlaylistItem()
|
||||||
{
|
{
|
||||||
TranscodingSettings = new List<TranscodingSetting>();
|
TranscodingSettings = new List<TranscodingSetting>();
|
||||||
|
|
|
@ -47,6 +47,7 @@ namespace MediaBrowser.Dlna.PlayTo
|
||||||
playlistItem.Transcode = true;
|
playlistItem.Transcode = true;
|
||||||
playlistItem.TranscodingSettings = transcodingProfile.Settings.ToList();
|
playlistItem.TranscodingSettings = transcodingProfile.Settings.ToList();
|
||||||
playlistItem.Container = "." + transcodingProfile.Container.TrimStart('.');
|
playlistItem.Container = "." + transcodingProfile.Container.TrimStart('.');
|
||||||
|
playlistItem.AudioCodec = transcodingProfile.AudioCodec;
|
||||||
}
|
}
|
||||||
|
|
||||||
return playlistItem;
|
return playlistItem;
|
||||||
|
@ -118,6 +119,8 @@ namespace MediaBrowser.Dlna.PlayTo
|
||||||
playlistItem.Transcode = true;
|
playlistItem.Transcode = true;
|
||||||
playlistItem.TranscodingSettings = transcodingProfile.Settings.ToList();
|
playlistItem.TranscodingSettings = transcodingProfile.Settings.ToList();
|
||||||
playlistItem.Container = "." + transcodingProfile.Container.TrimStart('.');
|
playlistItem.Container = "." + transcodingProfile.Container.TrimStart('.');
|
||||||
|
playlistItem.AudioCodec = transcodingProfile.AudioCodec.Split(',').FirstOrDefault();
|
||||||
|
playlistItem.VideoCodec = transcodingProfile.VideoCodec;
|
||||||
}
|
}
|
||||||
|
|
||||||
return playlistItem;
|
return playlistItem;
|
||||||
|
@ -137,12 +140,6 @@ namespace MediaBrowser.Dlna.PlayTo
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check additional conditions
|
|
||||||
if (!profile.Conditions.Any(i => IsConditionSatisfied(i, mediaPath, null, null)))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -160,12 +157,6 @@ namespace MediaBrowser.Dlna.PlayTo
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check additional conditions
|
|
||||||
if (!profile.Conditions.Any(i => IsConditionSatisfied(i, mediaPath, null, audioStream)))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -210,12 +201,6 @@ namespace MediaBrowser.Dlna.PlayTo
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check additional conditions
|
|
||||||
if (!profile.Conditions.Any(i => IsConditionSatisfied(i, mediaPath, videoStream, audioStream)))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,7 @@ namespace MediaBrowser.Dlna.PlayTo
|
||||||
/// <returns>System.String.</returns>
|
/// <returns>System.String.</returns>
|
||||||
internal static string GetAudioUrl(DeviceInfo deviceProperties, PlaylistItem item, List<MediaStream> streams, string serverAddress)
|
internal static string GetAudioUrl(DeviceInfo deviceProperties, PlaylistItem item, List<MediaStream> streams, string serverAddress)
|
||||||
{
|
{
|
||||||
var dlnaCommand = BuildDlnaUrl(item.MediaSourceId, deviceProperties.UUID, !item.Transcode, null, item.AudioCodec, item.AudioStreamIndex, item.SubtitleStreamIndex, null, 128000, item.StartPositionTicks, item.TranscodingSettings);
|
var dlnaCommand = BuildDlnaUrl(item.DeviceProfileName, item.MediaSourceId, deviceProperties.UUID, !item.Transcode, null, item.AudioCodec, item.AudioStreamIndex, item.SubtitleStreamIndex, null, 128000, item.StartPositionTicks, item.TranscodingSettings);
|
||||||
|
|
||||||
return string.Format("{0}/audio/{1}/stream{2}?{3}", serverAddress, item.ItemId, "." + item.Container.TrimStart('.'), dlnaCommand);
|
return string.Format("{0}/audio/{1}/stream{2}?{3}", serverAddress, item.ItemId, "." + item.Container.TrimStart('.'), dlnaCommand);
|
||||||
}
|
}
|
||||||
|
@ -33,7 +33,7 @@ namespace MediaBrowser.Dlna.PlayTo
|
||||||
/// <returns>The url to send to the device</returns>
|
/// <returns>The url to send to the device</returns>
|
||||||
internal static string GetVideoUrl(DeviceInfo deviceProperties, PlaylistItem item, List<MediaStream> streams, string serverAddress)
|
internal static string GetVideoUrl(DeviceInfo deviceProperties, PlaylistItem item, List<MediaStream> streams, string serverAddress)
|
||||||
{
|
{
|
||||||
var dlnaCommand = BuildDlnaUrl(item.MediaSourceId, deviceProperties.UUID, !item.Transcode, item.VideoCodec, item.AudioCodec, item.AudioStreamIndex, item.SubtitleStreamIndex, 1500000, 128000, item.StartPositionTicks, item.TranscodingSettings);
|
var dlnaCommand = BuildDlnaUrl(item.DeviceProfileName, item.MediaSourceId, deviceProperties.UUID, !item.Transcode, item.VideoCodec, item.AudioCodec, item.AudioStreamIndex, item.SubtitleStreamIndex, 1500000, 128000, item.StartPositionTicks, item.TranscodingSettings);
|
||||||
|
|
||||||
return string.Format("{0}/Videos/{1}/stream{2}?{3}", serverAddress, item.ItemId, item.Container, dlnaCommand);
|
return string.Format("{0}/Videos/{1}/stream{2}?{3}", serverAddress, item.ItemId, item.Container, dlnaCommand);
|
||||||
}
|
}
|
||||||
|
@ -41,7 +41,7 @@ namespace MediaBrowser.Dlna.PlayTo
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Builds the dlna URL.
|
/// Builds the dlna URL.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private static string BuildDlnaUrl(string mediaSourceId, string deviceID, bool isStatic, string videoCodec, string audioCodec, int? audiostreamIndex, int? subtitleIndex, int? videoBitrate, int? audioBitrate, long? startPositionTicks, List<TranscodingSetting> settings)
|
private static string BuildDlnaUrl(string deviceProfileName, string mediaSourceId, string deviceID, bool isStatic, string videoCodec, string audioCodec, int? audiostreamIndex, int? subtitleIndex, int? videoBitrate, int? audioBitrate, long? startPositionTicks, List<TranscodingSetting> settings)
|
||||||
{
|
{
|
||||||
var profile = settings.Where(i => i.Name == TranscodingSettingType.VideoProfile).Select(i => i.Value).FirstOrDefault();
|
var profile = settings.Where(i => i.Name == TranscodingSettingType.VideoProfile).Select(i => i.Value).FirstOrDefault();
|
||||||
var videoLevel = settings.Where(i => i.Name == TranscodingSettingType.VideoLevel).Select(i => i.Value).FirstOrDefault();
|
var videoLevel = settings.Where(i => i.Name == TranscodingSettingType.VideoLevel).Select(i => i.Value).FirstOrDefault();
|
||||||
|
@ -51,6 +51,7 @@ namespace MediaBrowser.Dlna.PlayTo
|
||||||
|
|
||||||
var list = new List<string>
|
var list = new List<string>
|
||||||
{
|
{
|
||||||
|
deviceProfileName ?? string.Empty,
|
||||||
deviceID ?? string.Empty,
|
deviceID ?? string.Empty,
|
||||||
mediaSourceId ?? string.Empty,
|
mediaSourceId ?? string.Empty,
|
||||||
isStatic.ToString().ToLower(),
|
isStatic.ToString().ToLower(),
|
||||||
|
|
49
MediaBrowser.Dlna/Profiles/DefaultProfile.cs
Normal file
49
MediaBrowser.Dlna/Profiles/DefaultProfile.cs
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
using MediaBrowser.Controller.Dlna;
|
||||||
|
|
||||||
|
namespace MediaBrowser.Dlna.Profiles
|
||||||
|
{
|
||||||
|
public class DefaultProfile : DeviceProfile
|
||||||
|
{
|
||||||
|
public DefaultProfile()
|
||||||
|
{
|
||||||
|
TranscodingProfiles = new[]
|
||||||
|
{
|
||||||
|
new TranscodingProfile
|
||||||
|
{
|
||||||
|
Container = "mp3",
|
||||||
|
AudioCodec = "mp3",
|
||||||
|
Type = DlnaProfileType.Audio
|
||||||
|
},
|
||||||
|
|
||||||
|
new TranscodingProfile
|
||||||
|
{
|
||||||
|
Container = "ts",
|
||||||
|
Type = DlnaProfileType.Video,
|
||||||
|
AudioCodec = "aac",
|
||||||
|
VideoCodec = "h264",
|
||||||
|
|
||||||
|
Settings = new []
|
||||||
|
{
|
||||||
|
new TranscodingSetting {Name = TranscodingSettingType.VideoLevel, Value = "3"},
|
||||||
|
new TranscodingSetting {Name = TranscodingSettingType.VideoProfile, Value = "baseline"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
DirectPlayProfiles = new[]
|
||||||
|
{
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "mp3,wma",
|
||||||
|
Type = DlnaProfileType.Audio
|
||||||
|
},
|
||||||
|
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "avi,mp4",
|
||||||
|
Type = DlnaProfileType.Video
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
28
MediaBrowser.Dlna/Profiles/DenonAvrProfile.cs
Normal file
28
MediaBrowser.Dlna/Profiles/DenonAvrProfile.cs
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
using MediaBrowser.Controller.Dlna;
|
||||||
|
|
||||||
|
namespace MediaBrowser.Dlna.Profiles
|
||||||
|
{
|
||||||
|
public class DenonAvrProfile : DefaultProfile
|
||||||
|
{
|
||||||
|
public DenonAvrProfile()
|
||||||
|
{
|
||||||
|
Name = "Denon AVR";
|
||||||
|
ClientType = "DLNA";
|
||||||
|
|
||||||
|
Identification = new DeviceIdentification
|
||||||
|
{
|
||||||
|
FriendlyName = @"Denon:\[AVR:.*",
|
||||||
|
Manufacturer = "Denon"
|
||||||
|
};
|
||||||
|
|
||||||
|
DirectPlayProfiles = new[]
|
||||||
|
{
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "mp3,flac,m4a,wma",
|
||||||
|
Type = DlnaProfileType.Audio
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
187
MediaBrowser.Dlna/Profiles/PanasonicVieraProfile.cs
Normal file
187
MediaBrowser.Dlna/Profiles/PanasonicVieraProfile.cs
Normal file
|
@ -0,0 +1,187 @@
|
||||||
|
using MediaBrowser.Controller.Dlna;
|
||||||
|
|
||||||
|
namespace MediaBrowser.Dlna.Profiles
|
||||||
|
{
|
||||||
|
public class PanasonicVieraProfile : DefaultProfile
|
||||||
|
{
|
||||||
|
public PanasonicVieraProfile()
|
||||||
|
{
|
||||||
|
Name = "Panasonic Viera";
|
||||||
|
ClientType = "DLNA";
|
||||||
|
|
||||||
|
Identification = new DeviceIdentification
|
||||||
|
{
|
||||||
|
FriendlyName = @"VIERA",
|
||||||
|
Manufacturer = "Panasonic",
|
||||||
|
|
||||||
|
Headers = new[]
|
||||||
|
{
|
||||||
|
new HttpHeaderInfo
|
||||||
|
{
|
||||||
|
Name = "User-Agent",
|
||||||
|
Value = "Panasonic MIL DLNA",
|
||||||
|
Match = HeaderMatchType.Substring
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
TimelineOffsetSeconds = 10;
|
||||||
|
|
||||||
|
TranscodingProfiles = new[]
|
||||||
|
{
|
||||||
|
new TranscodingProfile
|
||||||
|
{
|
||||||
|
Container = "mp3",
|
||||||
|
AudioCodec = "mp3",
|
||||||
|
Type = DlnaProfileType.Audio
|
||||||
|
},
|
||||||
|
new TranscodingProfile
|
||||||
|
{
|
||||||
|
Container = "ts",
|
||||||
|
AudioCodec = "ac3",
|
||||||
|
VideoCodec = "h264",
|
||||||
|
Type = DlnaProfileType.Video
|
||||||
|
},
|
||||||
|
new TranscodingProfile
|
||||||
|
{
|
||||||
|
Container = "jpeg",
|
||||||
|
Type = DlnaProfileType.Photo
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
DirectPlayProfiles = new[]
|
||||||
|
{
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "mpeg",
|
||||||
|
VideoCodec = "mpeg2video,mpeg4",
|
||||||
|
AudioCodec = "ac3,mp3",
|
||||||
|
Type = DlnaProfileType.Video
|
||||||
|
},
|
||||||
|
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "mkv",
|
||||||
|
VideoCodec = "h264",
|
||||||
|
AudioCodec = "aac,ac3,mp3,pcm",
|
||||||
|
Type = DlnaProfileType.Video
|
||||||
|
},
|
||||||
|
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "ts",
|
||||||
|
VideoCodec = "h264",
|
||||||
|
AudioCodec = "aac,mp3",
|
||||||
|
Type = DlnaProfileType.Video
|
||||||
|
},
|
||||||
|
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "mp4",
|
||||||
|
VideoCodec = "h264",
|
||||||
|
AudioCodec = "aac,ac3,mp3,pcm",
|
||||||
|
Type = DlnaProfileType.Video
|
||||||
|
},
|
||||||
|
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "mov",
|
||||||
|
VideoCodec = "h264",
|
||||||
|
AudioCodec = "aac,pcm",
|
||||||
|
Type = DlnaProfileType.Video
|
||||||
|
},
|
||||||
|
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "avi",
|
||||||
|
VideoCodec = "mpeg4",
|
||||||
|
AudioCodec = "pcm",
|
||||||
|
Type = DlnaProfileType.Video
|
||||||
|
},
|
||||||
|
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "flv",
|
||||||
|
VideoCodec = "h264",
|
||||||
|
AudioCodec = "aac",
|
||||||
|
Type = DlnaProfileType.Video
|
||||||
|
},
|
||||||
|
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "mp3",
|
||||||
|
AudioCodec = "mp3",
|
||||||
|
Type = DlnaProfileType.Audio
|
||||||
|
},
|
||||||
|
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "mp4",
|
||||||
|
AudioCodec = "aac",
|
||||||
|
Type = DlnaProfileType.Audio
|
||||||
|
},
|
||||||
|
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "jpeg",
|
||||||
|
Type = DlnaProfileType.Photo
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
ContainerProfiles = new[]
|
||||||
|
{
|
||||||
|
new ContainerProfile
|
||||||
|
{
|
||||||
|
Type = DlnaProfileType.Photo,
|
||||||
|
|
||||||
|
Conditions = new []
|
||||||
|
{
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.Width,
|
||||||
|
Value = "1920"
|
||||||
|
},
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.Height,
|
||||||
|
Value = "1080"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
CodecProfiles = new[]
|
||||||
|
{
|
||||||
|
new CodecProfile
|
||||||
|
{
|
||||||
|
Type = CodecType.VideoCodec,
|
||||||
|
|
||||||
|
Conditions = new[]
|
||||||
|
{
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.Width,
|
||||||
|
Value = "1920"
|
||||||
|
},
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.Height,
|
||||||
|
Value = "1080"
|
||||||
|
},
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.VideoBitDepth,
|
||||||
|
Value = "8",
|
||||||
|
IsRequired = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
242
MediaBrowser.Dlna/Profiles/SonyBravia2010Profile.cs
Normal file
242
MediaBrowser.Dlna/Profiles/SonyBravia2010Profile.cs
Normal file
|
@ -0,0 +1,242 @@
|
||||||
|
using MediaBrowser.Controller.Dlna;
|
||||||
|
|
||||||
|
namespace MediaBrowser.Dlna.Profiles
|
||||||
|
{
|
||||||
|
public class SonyBravia2010Profile : DefaultProfile
|
||||||
|
{
|
||||||
|
public SonyBravia2010Profile()
|
||||||
|
{
|
||||||
|
Name = "Sony Bravia (2010)";
|
||||||
|
ClientType = "DLNA";
|
||||||
|
|
||||||
|
Identification = new DeviceIdentification
|
||||||
|
{
|
||||||
|
FriendlyName = @"KDL-\d{2}[EHLNPB]X\d[01]\d.*",
|
||||||
|
Manufacturer = "Sony",
|
||||||
|
|
||||||
|
Headers = new []
|
||||||
|
{
|
||||||
|
new HttpHeaderInfo
|
||||||
|
{
|
||||||
|
Name = "X-AV-Client-Info",
|
||||||
|
Value = @".*KDL-\d{2}[EHLNPB]X\d[01]\d.*",
|
||||||
|
Match = HeaderMatchType.Regex
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
ModelName = "Windows Media Player Sharing";
|
||||||
|
ModelNumber = "3.0";
|
||||||
|
ModelUrl = "http://www.microsoft.com/";
|
||||||
|
Manufacturer = "Microsoft Corporation";
|
||||||
|
ManufacturerUrl = "http://www.microsoft.com/";
|
||||||
|
SonyAggregationFlags = "10";
|
||||||
|
ProtocolInfo =
|
||||||
|
"http-get:*:audio/mpeg:DLNA.ORG_PN=MP3;DLNA.ORG_OP=01;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_SM;DLNA.ORG_OP=00;DLNA.ORG_FLAGS=00D00000000000000000000000000000,http-get:*:video/mpeg:DLNA.ORG_PN=MPEG_PS_PAL;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000";
|
||||||
|
|
||||||
|
TranscodingProfiles = new[]
|
||||||
|
{
|
||||||
|
new TranscodingProfile
|
||||||
|
{
|
||||||
|
Container = "mp3",
|
||||||
|
AudioCodec = "mp3",
|
||||||
|
Type = DlnaProfileType.Audio
|
||||||
|
},
|
||||||
|
new TranscodingProfile
|
||||||
|
{
|
||||||
|
Container = "ts",
|
||||||
|
VideoCodec = "h264",
|
||||||
|
AudioCodec = "ac3,aac",
|
||||||
|
Type = DlnaProfileType.Video,
|
||||||
|
EnableMpegtsM2TsMode = true
|
||||||
|
},
|
||||||
|
new TranscodingProfile
|
||||||
|
{
|
||||||
|
Container = "jpeg",
|
||||||
|
Type = DlnaProfileType.Photo
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
DirectPlayProfiles = new[]
|
||||||
|
{
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "ts",
|
||||||
|
VideoCodec = "h264",
|
||||||
|
AudioCodec = "ac3,aac,mp3",
|
||||||
|
Type = DlnaProfileType.Video
|
||||||
|
},
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "ts",
|
||||||
|
VideoCodec = "mpeg1video,mpeg2video",
|
||||||
|
AudioCodec = "mp3,mp2",
|
||||||
|
Type = DlnaProfileType.Video
|
||||||
|
},
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "mpeg",
|
||||||
|
VideoCodec = "mpeg2video,mpeg1video",
|
||||||
|
AudioCodec = "mp3,mp2",
|
||||||
|
Type = DlnaProfileType.Video
|
||||||
|
},
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "mp3",
|
||||||
|
AudioCodec = "mp3",
|
||||||
|
Type = DlnaProfileType.Audio
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
MediaProfiles = new[]
|
||||||
|
{
|
||||||
|
new MediaProfile
|
||||||
|
{
|
||||||
|
Container = "avi",
|
||||||
|
MimeType = "video/avi",
|
||||||
|
Type = DlnaProfileType.Video
|
||||||
|
},
|
||||||
|
|
||||||
|
new MediaProfile
|
||||||
|
{
|
||||||
|
Container = "asf",
|
||||||
|
MimeType = "video/x-ms-wmv",
|
||||||
|
Type = DlnaProfileType.Audio
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
ContainerProfiles = new[]
|
||||||
|
{
|
||||||
|
new ContainerProfile
|
||||||
|
{
|
||||||
|
Type = DlnaProfileType.Photo,
|
||||||
|
|
||||||
|
Conditions = new []
|
||||||
|
{
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.Width,
|
||||||
|
Value = "1920"
|
||||||
|
},
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.Height,
|
||||||
|
Value = "1080"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
CodecProfiles = new[]
|
||||||
|
{
|
||||||
|
new CodecProfile
|
||||||
|
{
|
||||||
|
Type = CodecType.VideoCodec,
|
||||||
|
Conditions = new []
|
||||||
|
{
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.Width,
|
||||||
|
Value = "1920"
|
||||||
|
},
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.Height,
|
||||||
|
Value = "1080"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
new CodecProfile
|
||||||
|
{
|
||||||
|
Type = CodecType.VideoCodec,
|
||||||
|
Codec = "h264",
|
||||||
|
Conditions = new []
|
||||||
|
{
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.VideoFramerate,
|
||||||
|
Value = "30"
|
||||||
|
},
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.VideoBitrate,
|
||||||
|
Value = "20000000"
|
||||||
|
},
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.VideoLevel,
|
||||||
|
Value = "41"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
new CodecProfile
|
||||||
|
{
|
||||||
|
Type = CodecType.VideoCodec,
|
||||||
|
Codec = "mpeg2video",
|
||||||
|
Conditions = new []
|
||||||
|
{
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.VideoFramerate,
|
||||||
|
Value = "30"
|
||||||
|
},
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.VideoBitrate,
|
||||||
|
Value = "20000000"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
new CodecProfile
|
||||||
|
{
|
||||||
|
Type = CodecType.VideoAudioCodec,
|
||||||
|
Codec = "ac3",
|
||||||
|
|
||||||
|
Conditions = new []
|
||||||
|
{
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.AudioChannels,
|
||||||
|
Value = "6"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
new CodecProfile
|
||||||
|
{
|
||||||
|
Type = CodecType.VideoAudioCodec,
|
||||||
|
Codec = "aac",
|
||||||
|
|
||||||
|
Conditions = new []
|
||||||
|
{
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.AudioChannels,
|
||||||
|
Value = "2"
|
||||||
|
},
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.NotEquals,
|
||||||
|
Property = ProfileConditionValue.AudioProfile,
|
||||||
|
Value = "he-aac"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
260
MediaBrowser.Dlna/Profiles/SonyBravia2011Profile.cs
Normal file
260
MediaBrowser.Dlna/Profiles/SonyBravia2011Profile.cs
Normal file
|
@ -0,0 +1,260 @@
|
||||||
|
using MediaBrowser.Controller.Dlna;
|
||||||
|
|
||||||
|
namespace MediaBrowser.Dlna.Profiles
|
||||||
|
{
|
||||||
|
public class SonyBravia2011Profile : DefaultProfile
|
||||||
|
{
|
||||||
|
public SonyBravia2011Profile()
|
||||||
|
{
|
||||||
|
Name = "Sony Bravia (2011)";
|
||||||
|
ClientType = "DLNA";
|
||||||
|
|
||||||
|
Identification = new DeviceIdentification
|
||||||
|
{
|
||||||
|
FriendlyName = @"KDL-\d{2}([A-Z]X\d2\d|CX400).*",
|
||||||
|
Manufacturer = "Sony",
|
||||||
|
|
||||||
|
Headers = new[]
|
||||||
|
{
|
||||||
|
new HttpHeaderInfo
|
||||||
|
{
|
||||||
|
Name = "X-AV-Client-Info",
|
||||||
|
Value = @".*KDL-\d{2}([A-Z]X\d2\d|CX400).*",
|
||||||
|
Match = HeaderMatchType.Regex
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
ModelName = "Windows Media Player Sharing";
|
||||||
|
ModelNumber = "3.0";
|
||||||
|
ModelUrl = "http://www.microsoft.com/";
|
||||||
|
Manufacturer = "Microsoft Corporation";
|
||||||
|
ManufacturerUrl = "http://www.microsoft.com/";
|
||||||
|
SonyAggregationFlags = "10";
|
||||||
|
|
||||||
|
TranscodingProfiles = new[]
|
||||||
|
{
|
||||||
|
new TranscodingProfile
|
||||||
|
{
|
||||||
|
Container = "mp3",
|
||||||
|
AudioCodec = "mp3",
|
||||||
|
Type = DlnaProfileType.Audio
|
||||||
|
},
|
||||||
|
new TranscodingProfile
|
||||||
|
{
|
||||||
|
Container = "ts",
|
||||||
|
VideoCodec = "h264",
|
||||||
|
AudioCodec = "ac3,aac",
|
||||||
|
Type = DlnaProfileType.Video,
|
||||||
|
EnableMpegtsM2TsMode = true
|
||||||
|
},
|
||||||
|
new TranscodingProfile
|
||||||
|
{
|
||||||
|
Container = "jpeg",
|
||||||
|
Type = DlnaProfileType.Photo
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
DirectPlayProfiles = new[]
|
||||||
|
{
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "ts",
|
||||||
|
VideoCodec = "h264",
|
||||||
|
AudioCodec = "ac3,aac,mp3",
|
||||||
|
Type = DlnaProfileType.Video
|
||||||
|
},
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "ts",
|
||||||
|
VideoCodec = "mpeg2video",
|
||||||
|
AudioCodec = "mp3,mp2",
|
||||||
|
Type = DlnaProfileType.Video
|
||||||
|
},
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "mp4",
|
||||||
|
VideoCodec = "h264,mpeg4",
|
||||||
|
AudioCodec = "ac3,aac,mp3,mp2",
|
||||||
|
Type = DlnaProfileType.Video
|
||||||
|
},
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "mpeg",
|
||||||
|
VideoCodec = "mpeg2video,mpeg1video",
|
||||||
|
AudioCodec = "mp3,mp2",
|
||||||
|
Type = DlnaProfileType.Video
|
||||||
|
},
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "asf",
|
||||||
|
VideoCodec = "wmv2,wmv3,vc1",
|
||||||
|
AudioCodec = "wmav2,wmapro,wmavoice",
|
||||||
|
Type = DlnaProfileType.Video
|
||||||
|
},
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "mp3",
|
||||||
|
AudioCodec = "mp3",
|
||||||
|
Type = DlnaProfileType.Audio
|
||||||
|
},
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "asf",
|
||||||
|
AudioCodec = "wmav2,wmapro,wmavoice",
|
||||||
|
Type = DlnaProfileType.Audio
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
MediaProfiles = new[]
|
||||||
|
{
|
||||||
|
new MediaProfile
|
||||||
|
{
|
||||||
|
Container = "avi",
|
||||||
|
MimeType = "video/avi",
|
||||||
|
Type = DlnaProfileType.Video
|
||||||
|
},
|
||||||
|
|
||||||
|
new MediaProfile
|
||||||
|
{
|
||||||
|
Container = "asf",
|
||||||
|
MimeType = "video/x-ms-wmv",
|
||||||
|
Type = DlnaProfileType.Audio
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
ContainerProfiles = new[]
|
||||||
|
{
|
||||||
|
new ContainerProfile
|
||||||
|
{
|
||||||
|
Type = DlnaProfileType.Photo,
|
||||||
|
|
||||||
|
Conditions = new []
|
||||||
|
{
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.Width,
|
||||||
|
Value = "1920"
|
||||||
|
},
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.Height,
|
||||||
|
Value = "1080"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
CodecProfiles = new[]
|
||||||
|
{
|
||||||
|
new CodecProfile
|
||||||
|
{
|
||||||
|
Type = CodecType.VideoCodec,
|
||||||
|
Conditions = new []
|
||||||
|
{
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.Width,
|
||||||
|
Value = "1920"
|
||||||
|
},
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.Height,
|
||||||
|
Value = "1080"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
new CodecProfile
|
||||||
|
{
|
||||||
|
Type = CodecType.VideoCodec,
|
||||||
|
Codec = "h264",
|
||||||
|
Conditions = new []
|
||||||
|
{
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.VideoFramerate,
|
||||||
|
Value = "30"
|
||||||
|
},
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.VideoBitrate,
|
||||||
|
Value = "20000000"
|
||||||
|
},
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.VideoLevel,
|
||||||
|
Value = "41"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
new CodecProfile
|
||||||
|
{
|
||||||
|
Type = CodecType.VideoCodec,
|
||||||
|
Codec = "mpeg2video",
|
||||||
|
Conditions = new []
|
||||||
|
{
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.VideoFramerate,
|
||||||
|
Value = "30"
|
||||||
|
},
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.VideoBitrate,
|
||||||
|
Value = "20000000"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
new CodecProfile
|
||||||
|
{
|
||||||
|
Type = CodecType.VideoAudioCodec,
|
||||||
|
Codec = "ac3",
|
||||||
|
|
||||||
|
Conditions = new []
|
||||||
|
{
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.AudioChannels,
|
||||||
|
Value = "6"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
new CodecProfile
|
||||||
|
{
|
||||||
|
Type = CodecType.VideoAudioCodec,
|
||||||
|
Codec = "aac",
|
||||||
|
|
||||||
|
Conditions = new[]
|
||||||
|
{
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.AudioChannels,
|
||||||
|
Value = "2"
|
||||||
|
},
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.NotEquals,
|
||||||
|
Property = ProfileConditionValue.AudioProfile,
|
||||||
|
Value = "he-aac"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
202
MediaBrowser.Dlna/Profiles/SonyBravia2012Profile.cs
Normal file
202
MediaBrowser.Dlna/Profiles/SonyBravia2012Profile.cs
Normal file
|
@ -0,0 +1,202 @@
|
||||||
|
using MediaBrowser.Controller.Dlna;
|
||||||
|
|
||||||
|
namespace MediaBrowser.Dlna.Profiles
|
||||||
|
{
|
||||||
|
public class SonyBravia2012Profile : DefaultProfile
|
||||||
|
{
|
||||||
|
public SonyBravia2012Profile()
|
||||||
|
{
|
||||||
|
Name = "Sony Bravia (2012)";
|
||||||
|
ClientType = "DLNA";
|
||||||
|
|
||||||
|
Identification = new DeviceIdentification
|
||||||
|
{
|
||||||
|
FriendlyName = @"KDL-\d{2}[A-Z]X\d5(\d|G).*",
|
||||||
|
Manufacturer = "Sony",
|
||||||
|
|
||||||
|
Headers = new[]
|
||||||
|
{
|
||||||
|
new HttpHeaderInfo
|
||||||
|
{
|
||||||
|
Name = "X-AV-Client-Info",
|
||||||
|
Value = @".*KDL-\d{2}[A-Z]X\d5(\d|G).*",
|
||||||
|
Match = HeaderMatchType.Regex
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
ModelName = "Windows Media Player Sharing";
|
||||||
|
ModelNumber = "3.0";
|
||||||
|
ModelUrl = "http://www.microsoft.com/";
|
||||||
|
Manufacturer = "Microsoft Corporation";
|
||||||
|
ManufacturerUrl = "http://www.microsoft.com/";
|
||||||
|
SonyAggregationFlags = "10";
|
||||||
|
|
||||||
|
TranscodingProfiles = new[]
|
||||||
|
{
|
||||||
|
new TranscodingProfile
|
||||||
|
{
|
||||||
|
Container = "mp3",
|
||||||
|
AudioCodec = "mp3",
|
||||||
|
Type = DlnaProfileType.Audio
|
||||||
|
},
|
||||||
|
new TranscodingProfile
|
||||||
|
{
|
||||||
|
Container = "ts",
|
||||||
|
VideoCodec = "h264",
|
||||||
|
AudioCodec = "ac3,aac",
|
||||||
|
Type = DlnaProfileType.Video,
|
||||||
|
EnableMpegtsM2TsMode = true
|
||||||
|
},
|
||||||
|
new TranscodingProfile
|
||||||
|
{
|
||||||
|
Container = "jpeg",
|
||||||
|
Type = DlnaProfileType.Photo
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
DirectPlayProfiles = new[]
|
||||||
|
{
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "ts",
|
||||||
|
VideoCodec = "h264",
|
||||||
|
AudioCodec = "ac3,aac,mp3",
|
||||||
|
Type = DlnaProfileType.Video
|
||||||
|
},
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "ts",
|
||||||
|
VideoCodec = "mpeg2video",
|
||||||
|
AudioCodec = "mp3,mp2",
|
||||||
|
Type = DlnaProfileType.Video
|
||||||
|
},
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "mp4",
|
||||||
|
VideoCodec = "h264,mpeg4",
|
||||||
|
AudioCodec = "ac3,aac,mp3,mp2",
|
||||||
|
Type = DlnaProfileType.Video
|
||||||
|
},
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "avi",
|
||||||
|
VideoCodec = "mpeg4",
|
||||||
|
AudioCodec = "ac3,mp3",
|
||||||
|
Type = DlnaProfileType.Video
|
||||||
|
},
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "mpeg",
|
||||||
|
VideoCodec = "mpeg2video,mpeg1video",
|
||||||
|
AudioCodec = "mp3,mp2",
|
||||||
|
Type = DlnaProfileType.Video
|
||||||
|
},
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "asf",
|
||||||
|
VideoCodec = "wmv2,wmv3,vc1",
|
||||||
|
AudioCodec = "wmav2,wmapro,wmavoice",
|
||||||
|
Type = DlnaProfileType.Video
|
||||||
|
},
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "mp3",
|
||||||
|
AudioCodec = "mp3",
|
||||||
|
Type = DlnaProfileType.Audio
|
||||||
|
},
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "asf",
|
||||||
|
AudioCodec = "wmav2,wmapro,wmavoice",
|
||||||
|
Type = DlnaProfileType.Audio
|
||||||
|
},
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "jpeg",
|
||||||
|
Type = DlnaProfileType.Photo
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
MediaProfiles = new[]
|
||||||
|
{
|
||||||
|
new MediaProfile
|
||||||
|
{
|
||||||
|
Container = "avi",
|
||||||
|
MimeType = "video/avi",
|
||||||
|
Type = DlnaProfileType.Video
|
||||||
|
},
|
||||||
|
|
||||||
|
new MediaProfile
|
||||||
|
{
|
||||||
|
Container = "asf",
|
||||||
|
MimeType = "video/x-ms-wmv",
|
||||||
|
Type = DlnaProfileType.Audio
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
ContainerProfiles = new[]
|
||||||
|
{
|
||||||
|
new ContainerProfile
|
||||||
|
{
|
||||||
|
Type = DlnaProfileType.Photo,
|
||||||
|
|
||||||
|
Conditions = new []
|
||||||
|
{
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.Width,
|
||||||
|
Value = "1920"
|
||||||
|
},
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.Height,
|
||||||
|
Value = "1080"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
CodecProfiles = new[]
|
||||||
|
{
|
||||||
|
new CodecProfile
|
||||||
|
{
|
||||||
|
Type = CodecType.VideoCodec,
|
||||||
|
Conditions = new[]
|
||||||
|
{
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.Width,
|
||||||
|
Value = "1920"
|
||||||
|
},
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.Height,
|
||||||
|
Value = "1080"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
new CodecProfile
|
||||||
|
{
|
||||||
|
Type = CodecType.VideoAudioCodec,
|
||||||
|
Codec = "ac3",
|
||||||
|
|
||||||
|
Conditions = new[]
|
||||||
|
{
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.AudioChannels,
|
||||||
|
Value = "6"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
233
MediaBrowser.Dlna/Profiles/SonyBravia2013Profile.cs
Normal file
233
MediaBrowser.Dlna/Profiles/SonyBravia2013Profile.cs
Normal file
|
@ -0,0 +1,233 @@
|
||||||
|
using MediaBrowser.Controller.Dlna;
|
||||||
|
|
||||||
|
namespace MediaBrowser.Dlna.Profiles
|
||||||
|
{
|
||||||
|
public class SonyBravia2013Profile : DefaultProfile
|
||||||
|
{
|
||||||
|
public SonyBravia2013Profile()
|
||||||
|
{
|
||||||
|
Name = "Sony Bravia (2013)";
|
||||||
|
ClientType = "DLNA";
|
||||||
|
|
||||||
|
Identification = new DeviceIdentification
|
||||||
|
{
|
||||||
|
FriendlyName = @"KDL-\d{2}[WR][5689]\d{2}A.*",
|
||||||
|
Manufacturer = "Sony",
|
||||||
|
|
||||||
|
Headers = new[]
|
||||||
|
{
|
||||||
|
new HttpHeaderInfo
|
||||||
|
{
|
||||||
|
Name = "X-AV-Client-Info",
|
||||||
|
Value = @".*KDL-\d{2}[WR][5689]\d{2}A.*",
|
||||||
|
Match = HeaderMatchType.Regex
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
ModelName = "Windows Media Player Sharing";
|
||||||
|
ModelNumber = "3.0";
|
||||||
|
ModelUrl = "http://www.microsoft.com/";
|
||||||
|
Manufacturer = "Microsoft Corporation";
|
||||||
|
ManufacturerUrl = "http://www.microsoft.com/";
|
||||||
|
SonyAggregationFlags = "10";
|
||||||
|
|
||||||
|
TranscodingProfiles = new[]
|
||||||
|
{
|
||||||
|
new TranscodingProfile
|
||||||
|
{
|
||||||
|
Container = "mp3",
|
||||||
|
Type = DlnaProfileType.Audio
|
||||||
|
},
|
||||||
|
new TranscodingProfile
|
||||||
|
{
|
||||||
|
Container = "ts",
|
||||||
|
VideoCodec = "h264",
|
||||||
|
AudioCodec = "ac3,aac",
|
||||||
|
Type = DlnaProfileType.Video,
|
||||||
|
EnableMpegtsM2TsMode = true
|
||||||
|
},
|
||||||
|
new TranscodingProfile
|
||||||
|
{
|
||||||
|
Container = "jpeg",
|
||||||
|
Type = DlnaProfileType.Photo
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
DirectPlayProfiles = new[]
|
||||||
|
{
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "ts",
|
||||||
|
VideoCodec = "h264",
|
||||||
|
AudioCodec = "ac3,eac3,aac,mp3",
|
||||||
|
Type = DlnaProfileType.Video
|
||||||
|
},
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "ts",
|
||||||
|
VideoCodec = "mpeg2video",
|
||||||
|
AudioCodec = "mp3,mp2",
|
||||||
|
Type = DlnaProfileType.Video
|
||||||
|
},
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "mp4",
|
||||||
|
VideoCodec = "h264,mpeg4",
|
||||||
|
AudioCodec = "ac3,eac3,aac,mp3,mp2",
|
||||||
|
Type = DlnaProfileType.Video
|
||||||
|
},
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "mov",
|
||||||
|
VideoCodec = "h264,mpeg4,mjpeg",
|
||||||
|
AudioCodec = "ac3,eac3,aac,mp3,mp2",
|
||||||
|
Type = DlnaProfileType.Video
|
||||||
|
},
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "mkv",
|
||||||
|
VideoCodec = "h264,mpeg4,vp8",
|
||||||
|
AudioCodec = "ac3,eac3,aac,mp3,mp2,pcm,vorbis",
|
||||||
|
Type = DlnaProfileType.Video
|
||||||
|
},
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "avi",
|
||||||
|
VideoCodec = "mpeg4",
|
||||||
|
AudioCodec = "ac3,eac3,mp3",
|
||||||
|
Type = DlnaProfileType.Video
|
||||||
|
},
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "avi",
|
||||||
|
VideoCodec = "mjpeg",
|
||||||
|
AudioCodec = "pcm",
|
||||||
|
Type = DlnaProfileType.Video
|
||||||
|
},
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "mpeg",
|
||||||
|
VideoCodec = "mpeg2video,mpeg1video",
|
||||||
|
AudioCodec = "mp3,mp2",
|
||||||
|
Type = DlnaProfileType.Video
|
||||||
|
},
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "asf",
|
||||||
|
VideoCodec = "wmv2,wmv3,vc1",
|
||||||
|
AudioCodec = "wmav2,wmapro,wmavoice",
|
||||||
|
Type = DlnaProfileType.Video
|
||||||
|
},
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "mp3",
|
||||||
|
AudioCodec = "mp3",
|
||||||
|
Type = DlnaProfileType.Audio
|
||||||
|
},
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "mp4",
|
||||||
|
AudioCodec = "aac",
|
||||||
|
Type = DlnaProfileType.Audio
|
||||||
|
},
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "wav",
|
||||||
|
AudioCodec = "pcm",
|
||||||
|
Type = DlnaProfileType.Audio
|
||||||
|
},
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "asf",
|
||||||
|
AudioCodec = "wmav2,wmapro,wmavoice",
|
||||||
|
Type = DlnaProfileType.Audio
|
||||||
|
},
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "jpeg",
|
||||||
|
Type = DlnaProfileType.Photo
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
ContainerProfiles = new[]
|
||||||
|
{
|
||||||
|
new ContainerProfile
|
||||||
|
{
|
||||||
|
Type = DlnaProfileType.Photo,
|
||||||
|
|
||||||
|
Conditions = new []
|
||||||
|
{
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.Width,
|
||||||
|
Value = "1920"
|
||||||
|
},
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.Height,
|
||||||
|
Value = "1080"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
MediaProfiles = new[]
|
||||||
|
{
|
||||||
|
new MediaProfile
|
||||||
|
{
|
||||||
|
Container = "avi",
|
||||||
|
MimeType = "video/avi",
|
||||||
|
Type = DlnaProfileType.Video
|
||||||
|
},
|
||||||
|
|
||||||
|
new MediaProfile
|
||||||
|
{
|
||||||
|
Container = "mp4",
|
||||||
|
MimeType = "video/mp4",
|
||||||
|
Type = DlnaProfileType.Video
|
||||||
|
},
|
||||||
|
|
||||||
|
new MediaProfile
|
||||||
|
{
|
||||||
|
Container = "ts",
|
||||||
|
MimeType = "video/mpeg",
|
||||||
|
Type = DlnaProfileType.Video
|
||||||
|
},
|
||||||
|
|
||||||
|
new MediaProfile
|
||||||
|
{
|
||||||
|
Container = "wma",
|
||||||
|
MimeType = "video/x-ms-wma",
|
||||||
|
Type = DlnaProfileType.Audio
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
CodecProfiles = new[]
|
||||||
|
{
|
||||||
|
new CodecProfile
|
||||||
|
{
|
||||||
|
Type = CodecType.VideoCodec,
|
||||||
|
|
||||||
|
Conditions = new []
|
||||||
|
{
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.Width,
|
||||||
|
Value = "1920"
|
||||||
|
},
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.Height,
|
||||||
|
Value = "1080"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
242
MediaBrowser.Dlna/Profiles/WdtvLiveProfile.cs
Normal file
242
MediaBrowser.Dlna/Profiles/WdtvLiveProfile.cs
Normal file
|
@ -0,0 +1,242 @@
|
||||||
|
using MediaBrowser.Controller.Dlna;
|
||||||
|
|
||||||
|
namespace MediaBrowser.Dlna.Profiles
|
||||||
|
{
|
||||||
|
public class WdtvLiveProfile : DefaultProfile
|
||||||
|
{
|
||||||
|
public WdtvLiveProfile()
|
||||||
|
{
|
||||||
|
Name = "WDTV Live";
|
||||||
|
ClientType = "DLNA";
|
||||||
|
|
||||||
|
TimelineOffsetSeconds = 5;
|
||||||
|
IgnoreTranscodeByteRangeRequests = true;
|
||||||
|
|
||||||
|
Identification = new DeviceIdentification
|
||||||
|
{
|
||||||
|
ModelName = "WD TV HD Live",
|
||||||
|
|
||||||
|
Headers = new []
|
||||||
|
{
|
||||||
|
new HttpHeaderInfo {Name = "User-Agent", Value = "alphanetworks", Match = HeaderMatchType.Substring},
|
||||||
|
new HttpHeaderInfo
|
||||||
|
{
|
||||||
|
Name = "User-Agent",
|
||||||
|
Value = "ALPHA Networks",
|
||||||
|
Match = HeaderMatchType.Substring
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
TranscodingProfiles = new[]
|
||||||
|
{
|
||||||
|
new TranscodingProfile
|
||||||
|
{
|
||||||
|
Container = "mp3",
|
||||||
|
Type = DlnaProfileType.Audio,
|
||||||
|
AudioCodec = "mp3"
|
||||||
|
},
|
||||||
|
new TranscodingProfile
|
||||||
|
{
|
||||||
|
Container = "ts",
|
||||||
|
Type = DlnaProfileType.Video,
|
||||||
|
VideoCodec = "h264",
|
||||||
|
AudioCodec = "aac",
|
||||||
|
|
||||||
|
Settings = new []
|
||||||
|
{
|
||||||
|
new TranscodingSetting {Name = TranscodingSettingType.VideoLevel, Value = "3"},
|
||||||
|
new TranscodingSetting {Name = TranscodingSettingType.VideoProfile, Value = "baseline"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
new TranscodingProfile
|
||||||
|
{
|
||||||
|
Container = "jpeg",
|
||||||
|
Type = DlnaProfileType.Photo
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
DirectPlayProfiles = new[]
|
||||||
|
{
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "avi",
|
||||||
|
Type = DlnaProfileType.Video,
|
||||||
|
VideoCodec = "mpeg1video,mpeg2video,mpeg4,h264,vc1",
|
||||||
|
AudioCodec = "ac3,dca,mp2,mp3,pcm"
|
||||||
|
},
|
||||||
|
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "mpeg",
|
||||||
|
Type = DlnaProfileType.Video,
|
||||||
|
VideoCodec = "mpeg1video,mpeg2video",
|
||||||
|
AudioCodec = "ac3,dca,mp2,mp3,pcm"
|
||||||
|
},
|
||||||
|
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "mkv",
|
||||||
|
Type = DlnaProfileType.Video,
|
||||||
|
VideoCodec = "mpeg1video,mpeg2video,mpeg4,h264,vc1",
|
||||||
|
AudioCodec = "ac3,dca,aac,mp2,mp3,pcm"
|
||||||
|
},
|
||||||
|
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "ts",
|
||||||
|
Type = DlnaProfileType.Video,
|
||||||
|
VideoCodec = "mpeg1video,mpeg2video,h264,vc1",
|
||||||
|
AudioCodec = "ac3,dca,mp2,mp3"
|
||||||
|
},
|
||||||
|
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "mp4,mov",
|
||||||
|
Type = DlnaProfileType.Video,
|
||||||
|
VideoCodec = "h264,mpeg4",
|
||||||
|
AudioCodec = "ac3,aac,mp2,mp3"
|
||||||
|
},
|
||||||
|
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "asf",
|
||||||
|
Type = DlnaProfileType.Video,
|
||||||
|
VideoCodec = "vc1",
|
||||||
|
AudioCodec = "wmav2,wmapro"
|
||||||
|
},
|
||||||
|
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "asf",
|
||||||
|
Type = DlnaProfileType.Video,
|
||||||
|
VideoCodec = "mpeg2video",
|
||||||
|
AudioCodec = "mp2,ac3"
|
||||||
|
},
|
||||||
|
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "mp3",
|
||||||
|
AudioCodec = "mp2,mp3",
|
||||||
|
Type = DlnaProfileType.Audio
|
||||||
|
},
|
||||||
|
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "mp4",
|
||||||
|
AudioCodec = "mp4",
|
||||||
|
Type = DlnaProfileType.Audio
|
||||||
|
},
|
||||||
|
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "flac",
|
||||||
|
AudioCodec = "flac",
|
||||||
|
Type = DlnaProfileType.Audio
|
||||||
|
},
|
||||||
|
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "asf",
|
||||||
|
AudioCodec = "wmav2,wmapro,wmavoice",
|
||||||
|
Type = DlnaProfileType.Audio
|
||||||
|
},
|
||||||
|
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "ogg",
|
||||||
|
AudioCodec = "vorbis",
|
||||||
|
Type = DlnaProfileType.Audio
|
||||||
|
},
|
||||||
|
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Type = DlnaProfileType.Photo,
|
||||||
|
|
||||||
|
Container = "jpeg,png,gif,bmp,tiff"
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
MediaProfiles = new[]
|
||||||
|
{
|
||||||
|
new MediaProfile
|
||||||
|
{
|
||||||
|
Container = "ts",
|
||||||
|
OrgPn = "MPEG_TS_SD_NA",
|
||||||
|
Type = DlnaProfileType.Video
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
ContainerProfiles = new[]
|
||||||
|
{
|
||||||
|
new ContainerProfile
|
||||||
|
{
|
||||||
|
Type = DlnaProfileType.Photo,
|
||||||
|
|
||||||
|
Conditions = new []
|
||||||
|
{
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.Width,
|
||||||
|
Value = "1920"
|
||||||
|
},
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.Height,
|
||||||
|
Value = "1080"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
CodecProfiles = new[]
|
||||||
|
{
|
||||||
|
new CodecProfile
|
||||||
|
{
|
||||||
|
Type = CodecType.VideoCodec,
|
||||||
|
Codec = "h264",
|
||||||
|
|
||||||
|
Conditions = new []
|
||||||
|
{
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.Width,
|
||||||
|
Value = "1920"
|
||||||
|
},
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.Height,
|
||||||
|
Value = "1080"
|
||||||
|
},
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.VideoLevel,
|
||||||
|
Value = "41"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
new CodecProfile
|
||||||
|
{
|
||||||
|
Type = CodecType.VideoAudioCodec,
|
||||||
|
Codec = "aac",
|
||||||
|
|
||||||
|
Conditions = new []
|
||||||
|
{
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.AudioChannels,
|
||||||
|
Value = "2"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
314
MediaBrowser.Dlna/Profiles/Xbox360Profile.cs
Normal file
314
MediaBrowser.Dlna/Profiles/Xbox360Profile.cs
Normal file
|
@ -0,0 +1,314 @@
|
||||||
|
using MediaBrowser.Controller.Dlna;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace MediaBrowser.Dlna.Profiles
|
||||||
|
{
|
||||||
|
public class Xbox360Profile : DefaultProfile
|
||||||
|
{
|
||||||
|
public Xbox360Profile()
|
||||||
|
{
|
||||||
|
Name = "Xbox 360";
|
||||||
|
ClientType = "DLNA";
|
||||||
|
|
||||||
|
ModelName = "Windows Media Player Sharing";
|
||||||
|
ModelNumber = "12.0";
|
||||||
|
ModelUrl = "http://www.microsoft.com/";
|
||||||
|
Manufacturer = "Microsoft Corporation";
|
||||||
|
ManufacturerUrl = "http://www.microsoft.com/";
|
||||||
|
XDlnaDoc = "DMS-1.50";
|
||||||
|
|
||||||
|
TimelineOffsetSeconds = 40;
|
||||||
|
RequiresPlainFolders = true;
|
||||||
|
RequiresPlainVideoItems = true;
|
||||||
|
|
||||||
|
Identification = new DeviceIdentification
|
||||||
|
{
|
||||||
|
ModelName = "Xbox 360",
|
||||||
|
|
||||||
|
Headers = new []
|
||||||
|
{
|
||||||
|
new HttpHeaderInfo {Name = "User-Agent", Value = "Xbox", Match = HeaderMatchType.Substring},
|
||||||
|
new HttpHeaderInfo {Name = "User-Agent", Value = "Xenon", Match = HeaderMatchType.Substring}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
TranscodingProfiles = new[]
|
||||||
|
{
|
||||||
|
new TranscodingProfile
|
||||||
|
{
|
||||||
|
Container = "mp3",
|
||||||
|
AudioCodec = "mp3",
|
||||||
|
Type = DlnaProfileType.Audio
|
||||||
|
},
|
||||||
|
new TranscodingProfile
|
||||||
|
{
|
||||||
|
Container = "asf",
|
||||||
|
VideoCodec = "wmv2",
|
||||||
|
AudioCodec = "wmav2",
|
||||||
|
Type = DlnaProfileType.Video,
|
||||||
|
TranscodeSeekInfo = TranscodeSeekInfo.Bytes,
|
||||||
|
EstimateContentLength = true,
|
||||||
|
|
||||||
|
Settings = new []
|
||||||
|
{
|
||||||
|
new TranscodingSetting {Name = TranscodingSettingType.MaxAudioChannels, Value = "6"},
|
||||||
|
new TranscodingSetting {Name = TranscodingSettingType.VideoLevel, Value = "3"},
|
||||||
|
new TranscodingSetting {Name = TranscodingSettingType.VideoProfile, Value = "baseline"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
new TranscodingProfile
|
||||||
|
{
|
||||||
|
Container = "jpeg",
|
||||||
|
Type = DlnaProfileType.Photo
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
DirectPlayProfiles = new[]
|
||||||
|
{
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "avi",
|
||||||
|
VideoCodec = "mpeg4",
|
||||||
|
AudioCodec = "ac3,mp3",
|
||||||
|
Type = DlnaProfileType.Video
|
||||||
|
},
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "avi",
|
||||||
|
VideoCodec = "h264",
|
||||||
|
AudioCodec = "aac",
|
||||||
|
Type = DlnaProfileType.Video
|
||||||
|
},
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "mp4,mov",
|
||||||
|
VideoCodec = "h264,mpeg4",
|
||||||
|
AudioCodec = "aac,ac3",
|
||||||
|
Type = DlnaProfileType.Video
|
||||||
|
},
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "asf",
|
||||||
|
VideoCodec = "wmv2,wmv3,vc1",
|
||||||
|
AudioCodec = "wmav2,wmapro",
|
||||||
|
Type = DlnaProfileType.Video
|
||||||
|
},
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "asf",
|
||||||
|
AudioCodec = "wmav2,wmapro,wmavoice",
|
||||||
|
Type = DlnaProfileType.Audio
|
||||||
|
},
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "mp3",
|
||||||
|
AudioCodec = "mp3",
|
||||||
|
Type = DlnaProfileType.Audio
|
||||||
|
},
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "jpeg",
|
||||||
|
Type = DlnaProfileType.Photo
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
MediaProfiles = new[]
|
||||||
|
{
|
||||||
|
new MediaProfile
|
||||||
|
{
|
||||||
|
Container = "avi",
|
||||||
|
MimeType = "video/avi",
|
||||||
|
Type = DlnaProfileType.Video
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
ContainerProfiles = new[]
|
||||||
|
{
|
||||||
|
new ContainerProfile
|
||||||
|
{
|
||||||
|
Type = DlnaProfileType.Video,
|
||||||
|
Container = "mp4,mov",
|
||||||
|
|
||||||
|
Conditions = new []
|
||||||
|
{
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.Has64BitOffsets,
|
||||||
|
Value = "false",
|
||||||
|
IsRequired = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
new ContainerProfile
|
||||||
|
{
|
||||||
|
Type = DlnaProfileType.Photo,
|
||||||
|
|
||||||
|
Conditions = new []
|
||||||
|
{
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.Width,
|
||||||
|
Value = "1920"
|
||||||
|
},
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.Height,
|
||||||
|
Value = "1080"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
CodecProfiles = new[]
|
||||||
|
{
|
||||||
|
new CodecProfile
|
||||||
|
{
|
||||||
|
Type = CodecType.VideoCodec,
|
||||||
|
Codec = "mpeg4",
|
||||||
|
Conditions = new []
|
||||||
|
{
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.Width,
|
||||||
|
Value = "1280"
|
||||||
|
},
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.Height,
|
||||||
|
Value = "720"
|
||||||
|
},
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.VideoFramerate,
|
||||||
|
Value = "30",
|
||||||
|
IsRequired = false
|
||||||
|
},
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.VideoBitrate,
|
||||||
|
Value = "5120000",
|
||||||
|
IsRequired = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
new CodecProfile
|
||||||
|
{
|
||||||
|
Type = CodecType.VideoCodec,
|
||||||
|
Codec = "h264",
|
||||||
|
Conditions = new []
|
||||||
|
{
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.Width,
|
||||||
|
Value = "1920"
|
||||||
|
},
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.Height,
|
||||||
|
Value = "1080"
|
||||||
|
},
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.VideoLevel,
|
||||||
|
Value = "41",
|
||||||
|
IsRequired = false
|
||||||
|
},
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.VideoBitrate,
|
||||||
|
Value = "10240000",
|
||||||
|
IsRequired = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
new CodecProfile
|
||||||
|
{
|
||||||
|
Type = CodecType.VideoCodec,
|
||||||
|
Codec = "wmv2,wmv3,vc1",
|
||||||
|
Conditions = new []
|
||||||
|
{
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.Width,
|
||||||
|
Value = "1920"
|
||||||
|
},
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.Height,
|
||||||
|
Value = "1080"
|
||||||
|
},
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.VideoFramerate,
|
||||||
|
Value = "30",
|
||||||
|
IsRequired = false
|
||||||
|
},
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.VideoBitrate,
|
||||||
|
Value = "15360000",
|
||||||
|
IsRequired = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
new CodecProfile
|
||||||
|
{
|
||||||
|
Type = CodecType.VideoAudioCodec,
|
||||||
|
Codec = "ac3,wmav2,wmapro",
|
||||||
|
Conditions = new []
|
||||||
|
{
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.AudioChannels,
|
||||||
|
Value = "6",
|
||||||
|
IsRequired = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
new CodecProfile
|
||||||
|
{
|
||||||
|
Type = CodecType.VideoAudioCodec,
|
||||||
|
Codec = "aac",
|
||||||
|
Conditions = new []
|
||||||
|
{
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.LessThanEqual,
|
||||||
|
Property = ProfileConditionValue.AudioChannels,
|
||||||
|
Value = "6",
|
||||||
|
IsRequired = false
|
||||||
|
},
|
||||||
|
new ProfileCondition
|
||||||
|
{
|
||||||
|
Condition = ProfileConditionType.Equals,
|
||||||
|
Property = ProfileConditionValue.AudioProfile,
|
||||||
|
Value = "lc",
|
||||||
|
IsRequired = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
60
MediaBrowser.Dlna/Profiles/XboxOneProfile.cs
Normal file
60
MediaBrowser.Dlna/Profiles/XboxOneProfile.cs
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
using MediaBrowser.Controller.Dlna;
|
||||||
|
|
||||||
|
namespace MediaBrowser.Dlna.Profiles
|
||||||
|
{
|
||||||
|
public class XboxOneProfile : DefaultProfile
|
||||||
|
{
|
||||||
|
public XboxOneProfile()
|
||||||
|
{
|
||||||
|
Name = "Xbox One";
|
||||||
|
ClientType = "DLNA";
|
||||||
|
|
||||||
|
Identification = new DeviceIdentification
|
||||||
|
{
|
||||||
|
ModelName = "Xbox One",
|
||||||
|
FriendlyName = "Xbox-SystemOS"
|
||||||
|
};
|
||||||
|
|
||||||
|
TranscodingProfiles = new[]
|
||||||
|
{
|
||||||
|
new TranscodingProfile
|
||||||
|
{
|
||||||
|
Container = "mp3",
|
||||||
|
AudioCodec = "mp3",
|
||||||
|
Type = DlnaProfileType.Audio
|
||||||
|
},
|
||||||
|
new TranscodingProfile
|
||||||
|
{
|
||||||
|
Container = "ts",
|
||||||
|
VideoCodec = "h264",
|
||||||
|
AudioCodec = "aac",
|
||||||
|
Type = DlnaProfileType.Video
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
DirectPlayProfiles = new[]
|
||||||
|
{
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "mp3",
|
||||||
|
Type = DlnaProfileType.Audio
|
||||||
|
},
|
||||||
|
new DirectPlayProfile
|
||||||
|
{
|
||||||
|
Container = "avi",
|
||||||
|
Type = DlnaProfileType.Video
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
MediaProfiles = new[]
|
||||||
|
{
|
||||||
|
new MediaProfile
|
||||||
|
{
|
||||||
|
Container = "avi",
|
||||||
|
MimeType = "video/x-msvideo",
|
||||||
|
Type = DlnaProfileType.Video
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -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);
|
var dlnaManager = new DlnaManager(XmlSerializer, FileSystemManager, JsonSerializer);
|
||||||
RegisterSingleInstance<IDlnaManager>(dlnaManager);
|
RegisterSingleInstance<IDlnaManager>(dlnaManager);
|
||||||
|
|
||||||
var collectionManager = new CollectionManager(LibraryManager, FileSystemManager, LibraryMonitor);
|
var collectionManager = new CollectionManager(LibraryManager, FileSystemManager, LibraryMonitor);
|
||||||
|
|
Loading…
Reference in a new issue