check video profile with substring

This commit is contained in:
Luke Pulverenti 2014-10-07 22:25:24 -04:00
parent 4999f19485
commit bebba65d61
6 changed files with 72 additions and 29 deletions

View File

@ -79,7 +79,7 @@ namespace MediaBrowser.Dlna
new Windows81Profile(),
//new WindowsMediaCenterProfile(),
new WindowsPhoneProfile(),
new AndroidProfile(),
new AndroidProfile(true, true),
new DirectTvProfile(),
new DishHopperJoeyProfile(),
new DefaultProfile()

View File

@ -16,6 +16,7 @@ namespace MediaBrowser.Dlna.Ssdp
/// The number of times to send the message
/// </summary>
public int TotalSendCount { get; private set; }
public bool IgnoreBindFailure { get; private set; }
/// <summary>
/// The number of times the message has been sent
@ -24,10 +25,11 @@ namespace MediaBrowser.Dlna.Ssdp
private readonly ILogger _logger;
public Datagram(EndPoint toEndPoint, EndPoint fromEndPoint, ILogger logger, string message, int totalSendCount)
public Datagram(EndPoint toEndPoint, EndPoint fromEndPoint, ILogger logger, string message, int totalSendCount, bool ignoreBindFailure)
{
Message = message;
_logger = logger;
IgnoreBindFailure = ignoreBindFailure;
TotalSendCount = totalSendCount;
FromEndPoint = fromEndPoint;
ToEndPoint = toEndPoint;
@ -42,7 +44,14 @@ namespace MediaBrowser.Dlna.Ssdp
if (FromEndPoint != null)
{
client.Bind(FromEndPoint);
try
{
client.Bind(FromEndPoint);
}
catch
{
if (!IgnoreBindFailure) throw;
}
}
client.BeginSendTo(msg, 0, msg.Length, SocketFlags.None, ToEndPoint, result =>
@ -53,7 +62,10 @@ namespace MediaBrowser.Dlna.Ssdp
}
catch (Exception ex)
{
_logger.ErrorException("Error sending Datagram to {0} from {1}: " + Message, ex, ToEndPoint, FromEndPoint == null ? "" : FromEndPoint.ToString());
if (!IgnoreBindFailure)
{
_logger.ErrorException("Error sending Datagram to {0} from {1}: " + Message, ex, ToEndPoint, FromEndPoint == null ? "" : FromEndPoint.ToString());
}
}
finally
{

View File

@ -124,18 +124,19 @@ namespace MediaBrowser.Dlna.Ssdp
EndPoint localAddress,
int sendCount = 1)
{
SendDatagram(header, values, _ssdpEndp, localAddress, sendCount);
SendDatagram(header, values, _ssdpEndp, localAddress, false, sendCount);
}
public void SendDatagram(string header,
Dictionary<string, string> values,
EndPoint endpoint,
EndPoint localAddress,
bool ignoreBindFailure,
int sendCount = 1)
{
var msg = new SsdpMessageBuilder().BuildMessage(header, values);
var dgram = new Datagram(endpoint, localAddress, _logger, msg, sendCount);
var dgram = new Datagram(endpoint, localAddress, _logger, msg, sendCount, ignoreBindFailure);
if (_messageQueue.Count == 0)
{
@ -171,7 +172,8 @@ namespace MediaBrowser.Dlna.Ssdp
values["ST"] = d.Type;
values["USN"] = d.USN;
SendDatagram(header, values, endpoint, new IPEndPoint(d.Address, 0));
SendDatagram(header, values, endpoint, new IPEndPoint(d.Address, 0), true);
//SendDatagram(header, values, endpoint, null, true);
if (_config.GetDlnaConfiguration().EnableDebugLogging)
{

View File

@ -145,6 +145,8 @@ namespace MediaBrowser.Model.Dlna
switch (condition.Condition)
{
case ProfileConditionType.SubstringOf:
return StringHelper.IndexOfIgnoreCase(currentValue, expected) != -1;
case ProfileConditionType.Equals:
return StringHelper.EqualsIgnoreCase(currentValue, expected);
case ProfileConditionType.NotEquals:

View File

@ -5,6 +5,7 @@
Equals = 0,
NotEquals = 1,
LessThanEqual = 2,
GreaterThanEqual = 3
GreaterThanEqual = 3,
SubstringOf = 4
}
}

View File

@ -1,23 +1,31 @@
using System.Xml.Serialization;
using System.Collections.Generic;
using System.Xml.Serialization;
namespace MediaBrowser.Model.Dlna.Profiles
{
[XmlRoot("Profile")]
public class AndroidProfile : DefaultProfile
{
public AndroidProfile()
public AndroidProfile(bool supportsHls, bool supportsMpegDash)
{
Name = "Android";
TranscodingProfiles = new[]
List<TranscodingProfile> transcodingProfiles = new List<TranscodingProfile>();
transcodingProfiles.Add(new TranscodingProfile
{
new TranscodingProfile
{
Container = "mp3",
AudioCodec = "mp3",
Type = DlnaProfileType.Audio
},
new TranscodingProfile
Container = "mp3",
AudioCodec = "mp3",
Type = DlnaProfileType.Audio
});
if (supportsMpegDash)
{
}
if (supportsHls)
{
transcodingProfiles.Add(new TranscodingProfile
{
Protocol = "hls",
Container = "ts",
@ -26,17 +34,19 @@ namespace MediaBrowser.Model.Dlna.Profiles
Type = DlnaProfileType.Video,
VideoProfile = "Baseline",
Context = EncodingContext.Streaming
},
new TranscodingProfile
{
Container = "mp4",
VideoCodec = "h264",
AudioCodec = "aac",
Type = DlnaProfileType.Video,
VideoProfile = "Baseline",
Context = EncodingContext.Static
}
};
});
}
transcodingProfiles.Add(new TranscodingProfile
{
Container = "mp4",
VideoCodec = "h264",
AudioCodec = "aac",
Type = DlnaProfileType.Video,
VideoProfile = "Baseline",
Context = EncodingContext.Static
});
TranscodingProfiles = transcodingProfiles.ToArray();
DirectPlayProfiles = new[]
{
@ -88,6 +98,22 @@ namespace MediaBrowser.Model.Dlna.Profiles
new CodecProfile
{
Type = CodecType.Video,
Codec= "h264",
Conditions = new []
{
new ProfileCondition(ProfileConditionType.SubstringOf, ProfileConditionValue.VideoProfile, "baseline"),
new ProfileCondition(ProfileConditionType.LessThanEqual, ProfileConditionValue.Width, "1920"),
new ProfileCondition(ProfileConditionType.LessThanEqual, ProfileConditionValue.Height, "1080"),
new ProfileCondition(ProfileConditionType.LessThanEqual, ProfileConditionValue.VideoBitDepth, "8"),
new ProfileCondition(ProfileConditionType.NotEquals, ProfileConditionValue.IsAnamorphic, "true")
}
},
new CodecProfile
{
Type = CodecType.Video,
Conditions = new []
{
new ProfileCondition(ProfileConditionType.LessThanEqual, ProfileConditionValue.Width, "1920"),