aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2014-10-07 22:25:24 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2014-10-07 22:25:24 -0400
commitbebba65d6137125d459a911b695131c063524c56 (patch)
tree9e501c50be814e161b262de538acc584343edacc
parent4999f1948533f513f43966b7af03b3db8881645d (diff)
check video profile with substring
-rw-r--r--MediaBrowser.Dlna/DlnaManager.cs2
-rw-r--r--MediaBrowser.Dlna/Ssdp/Datagram.cs18
-rw-r--r--MediaBrowser.Dlna/Ssdp/SsdpHandler.cs8
-rw-r--r--MediaBrowser.Model/Dlna/ConditionProcessor.cs2
-rw-r--r--MediaBrowser.Model/Dlna/ProfileConditionType.cs3
-rw-r--r--MediaBrowser.Model/Dlna/Profiles/AndroidProfile.cs68
6 files changed, 72 insertions, 29 deletions
diff --git a/MediaBrowser.Dlna/DlnaManager.cs b/MediaBrowser.Dlna/DlnaManager.cs
index dc43b90b2..cd1457169 100644
--- a/MediaBrowser.Dlna/DlnaManager.cs
+++ b/MediaBrowser.Dlna/DlnaManager.cs
@@ -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()
diff --git a/MediaBrowser.Dlna/Ssdp/Datagram.cs b/MediaBrowser.Dlna/Ssdp/Datagram.cs
index 0432c35c1..f16464209 100644
--- a/MediaBrowser.Dlna/Ssdp/Datagram.cs
+++ b/MediaBrowser.Dlna/Ssdp/Datagram.cs
@@ -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
{
diff --git a/MediaBrowser.Dlna/Ssdp/SsdpHandler.cs b/MediaBrowser.Dlna/Ssdp/SsdpHandler.cs
index 35572f990..15735746b 100644
--- a/MediaBrowser.Dlna/Ssdp/SsdpHandler.cs
+++ b/MediaBrowser.Dlna/Ssdp/SsdpHandler.cs
@@ -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)
{
diff --git a/MediaBrowser.Model/Dlna/ConditionProcessor.cs b/MediaBrowser.Model/Dlna/ConditionProcessor.cs
index db004a65e..dd9a49ec4 100644
--- a/MediaBrowser.Model/Dlna/ConditionProcessor.cs
+++ b/MediaBrowser.Model/Dlna/ConditionProcessor.cs
@@ -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:
diff --git a/MediaBrowser.Model/Dlna/ProfileConditionType.cs b/MediaBrowser.Model/Dlna/ProfileConditionType.cs
index 22156c47d..bfbd31f02 100644
--- a/MediaBrowser.Model/Dlna/ProfileConditionType.cs
+++ b/MediaBrowser.Model/Dlna/ProfileConditionType.cs
@@ -5,6 +5,7 @@
Equals = 0,
NotEquals = 1,
LessThanEqual = 2,
- GreaterThanEqual = 3
+ GreaterThanEqual = 3,
+ SubstringOf = 4
}
} \ No newline at end of file
diff --git a/MediaBrowser.Model/Dlna/Profiles/AndroidProfile.cs b/MediaBrowser.Model/Dlna/Profiles/AndroidProfile.cs
index 09c26cb1f..1f0b9a262 100644
--- a/MediaBrowser.Model/Dlna/Profiles/AndroidProfile.cs
+++ b/MediaBrowser.Model/Dlna/Profiles/AndroidProfile.cs
@@ -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"),