Browse Source

make more dlna attributes configurable

Luke Pulverenti 10 years ago
parent
commit
a9ccccc535
37 changed files with 148 additions and 95 deletions
  1. 1 1
      MediaBrowser.Dlna/DlnaManager.cs
  2. 1 1
      MediaBrowser.Dlna/PlayTo/SsdpHttpClient.cs
  3. 18 0
      MediaBrowser.Dlna/Profiles/DefaultProfile.cs
  4. 1 8
      MediaBrowser.Dlna/Profiles/PanasonicVieraProfile.cs
  5. 1 8
      MediaBrowser.Dlna/Profiles/SamsungSmartTvProfile.cs
  6. 1 8
      MediaBrowser.Dlna/Profiles/SonyBlurayPlayer2013Profile.cs
  7. 1 8
      MediaBrowser.Dlna/Profiles/SonyBlurayPlayerProfile.cs
  8. 1 8
      MediaBrowser.Dlna/Profiles/SonyBravia2010Profile.cs
  9. 1 8
      MediaBrowser.Dlna/Profiles/SonyBravia2011Profile.cs
  10. 1 8
      MediaBrowser.Dlna/Profiles/SonyBravia2012Profile.cs
  11. 1 8
      MediaBrowser.Dlna/Profiles/SonyBravia2013Profile.cs
  12. 7 3
      MediaBrowser.Dlna/Profiles/Xbox360Profile.cs
  13. 4 1
      MediaBrowser.Dlna/Profiles/Xml/BubbleUPnp.xml
  14. 4 1
      MediaBrowser.Dlna/Profiles/Xml/Default.xml
  15. 4 1
      MediaBrowser.Dlna/Profiles/Xml/Denon AVR.xml
  16. 4 1
      MediaBrowser.Dlna/Profiles/Xml/DirecTV HD-DVR.xml
  17. 4 1
      MediaBrowser.Dlna/Profiles/Xml/Dish Hopper-Joey.xml
  18. 4 1
      MediaBrowser.Dlna/Profiles/Xml/LG Smart TV.xml
  19. 4 1
      MediaBrowser.Dlna/Profiles/Xml/Linksys DMA2100.xml
  20. 4 1
      MediaBrowser.Dlna/Profiles/Xml/MediaMonkey.xml
  21. 2 0
      MediaBrowser.Dlna/Profiles/Xml/Panasonic Viera.xml
  22. 4 1
      MediaBrowser.Dlna/Profiles/Xml/Popcorn Hour.xml
  23. 2 0
      MediaBrowser.Dlna/Profiles/Xml/Samsung Smart TV.xml
  24. 2 0
      MediaBrowser.Dlna/Profiles/Xml/Sony Blu-ray Player 2013.xml
  25. 2 0
      MediaBrowser.Dlna/Profiles/Xml/Sony Blu-ray Player.xml
  26. 2 0
      MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2010).xml
  27. 2 0
      MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2011).xml
  28. 2 0
      MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2012).xml
  29. 2 0
      MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2013).xml
  30. 4 1
      MediaBrowser.Dlna/Profiles/Xml/Sony PlayStation 3.xml
  31. 4 1
      MediaBrowser.Dlna/Profiles/Xml/Vlc.xml
  32. 4 1
      MediaBrowser.Dlna/Profiles/Xml/WDTV Live.xml
  33. 6 5
      MediaBrowser.Dlna/Profiles/Xml/Xbox 360.xml
  34. 4 1
      MediaBrowser.Dlna/Profiles/Xml/Xbox One.xml
  35. 4 1
      MediaBrowser.Dlna/Profiles/Xml/foobar2000.xml
  36. 26 7
      MediaBrowser.Dlna/Server/DescriptionXmlBuilder.cs
  37. 9 0
      MediaBrowser.Providers/Manager/ProviderUtils.cs

+ 1 - 1
MediaBrowser.Dlna/DlnaManager.cs

@@ -482,7 +482,7 @@ namespace MediaBrowser.Dlna
             var profile = GetProfile(headers) ??
                           GetDefaultProfile();
 
-            return new DescriptionXmlBuilder(profile, serverUuId, serverAddress, _appHost.FriendlyName).GetXml();
+            return new DescriptionXmlBuilder(profile, serverUuId, serverAddress, _appHost.FriendlyName, serverUuId.GetMD5().ToString("N")).GetXml();
         }
 
         public ImageStream GetIcon(string filename)

+ 1 - 1
MediaBrowser.Dlna/PlayTo/SsdpHttpClient.cs

@@ -13,7 +13,7 @@ namespace MediaBrowser.Dlna.PlayTo
     public class SsdpHttpClient
     {
         private const string USERAGENT = "Microsoft-Windows/6.2 UPnP/1.0 Microsoft-DLNA DLNADOC/1.50";
-        private const string FriendlyName = "MediaBrowser";
+        private const string FriendlyName = "Emby";
 
         private readonly IHttpClient _httpClient;
         private readonly IServerConfigurationManager _config;

+ 18 - 0
MediaBrowser.Dlna/Profiles/DefaultProfile.cs

@@ -1,4 +1,5 @@
 using MediaBrowser.Model.Dlna;
+using System.Linq;
 using System.Xml.Serialization;
 
 namespace MediaBrowser.Dlna.Profiles
@@ -75,6 +76,23 @@ namespace MediaBrowser.Dlna.Profiles
                     Type = DlnaProfileType.Video
                 }
             };
+
+            AddXmlRootAttribute("xmlns", "urn:schemas-upnp-org:device-1-0");
+            AddXmlRootAttribute("xmlns:dlna", "urn:schemas-dlna-org:device-1-0");
+        }
+
+        public void AddXmlRootAttribute(string name, string value)
+        {
+            var atts = XmlRootAttributes ?? new XmlAttribute[] { };
+            var list = atts.ToList();
+
+            list.Add(new XmlAttribute
+            {
+                Name = name,
+                Value = value
+            });
+
+            XmlRootAttributes = list.ToArray();
         }
     }
 }

+ 1 - 8
MediaBrowser.Dlna/Profiles/PanasonicVieraProfile.cs

@@ -26,14 +26,7 @@ namespace MediaBrowser.Dlna.Profiles
                }
             };
 
-            XmlRootAttributes = new[]
-            {
-                new XmlAttribute
-                {
-                    Name = "xmlns:pv",
-                    Value = "http://www.pv.com/pvns/"
-                }
-            };
+            AddXmlRootAttribute("xmlns:pv", "http://www.pv.com/pvns/");
 
             TimelineOffsetSeconds = 10;
 

+ 1 - 8
MediaBrowser.Dlna/Profiles/SamsungSmartTvProfile.cs

@@ -27,14 +27,7 @@ namespace MediaBrowser.Dlna.Profiles
                 }
             };
 
-            XmlRootAttributes = new[]
-            {
-                new XmlAttribute
-                {
-                    Name = "xmlns:sec",
-                    Value = "http://www.sec.co.kr/"
-                }
-            };
+            AddXmlRootAttribute("xmlns:sec", "http://www.sec.co.kr/");
 
             TranscodingProfiles = new[]
            {

+ 1 - 8
MediaBrowser.Dlna/Profiles/SonyBlurayPlayer2013Profile.cs

@@ -17,14 +17,7 @@ namespace MediaBrowser.Dlna.Profiles
                 ModelNumber = "BDP-2013"
             };
 
-            XmlRootAttributes = new[]
-            {
-                new XmlAttribute
-                {
-                    Name = "xmlns:av",
-                    Value = "urn:schemas-sony-com:av"
-                }
-            };
+            AddXmlRootAttribute("xmlns:av", "urn:schemas-sony-com:av");
 
             ModelName = "Windows Media Player Sharing";
             ModelNumber = "3.0";

+ 1 - 8
MediaBrowser.Dlna/Profiles/SonyBlurayPlayerProfile.cs

@@ -33,14 +33,7 @@ namespace MediaBrowser.Dlna.Profiles
                 }
             };
 
-            XmlRootAttributes = new[]
-            {
-                new XmlAttribute
-                {
-                    Name = "xmlns:av",
-                    Value = "urn:schemas-sony-com:av"
-                }
-            };
+            AddXmlRootAttribute("xmlns:av", "urn:schemas-sony-com:av");
 
             ModelName = "Windows Media Player Sharing";
             ModelNumber = "3.0";

+ 1 - 8
MediaBrowser.Dlna/Profiles/SonyBravia2010Profile.cs

@@ -26,14 +26,7 @@ namespace MediaBrowser.Dlna.Profiles
                 }
             };
 
-            XmlRootAttributes = new[]
-            {
-                new XmlAttribute
-                {
-                    Name = "xmlns:av",
-                    Value = "urn:schemas-sony-com:av"
-                }
-            };
+            AddXmlRootAttribute("xmlns:av", "urn:schemas-sony-com:av");
 
             AlbumArtPn = "JPEG_TN";
 

+ 1 - 8
MediaBrowser.Dlna/Profiles/SonyBravia2011Profile.cs

@@ -26,14 +26,7 @@ namespace MediaBrowser.Dlna.Profiles
                 }
             };
 
-            XmlRootAttributes = new[]
-            {
-                new XmlAttribute
-                {
-                    Name = "xmlns:av",
-                    Value = "urn:schemas-sony-com:av"
-                }
-            };
+            AddXmlRootAttribute("xmlns:av", "urn:schemas-sony-com:av");
 
             AlbumArtPn = "JPEG_TN";
 

+ 1 - 8
MediaBrowser.Dlna/Profiles/SonyBravia2012Profile.cs

@@ -26,14 +26,7 @@ namespace MediaBrowser.Dlna.Profiles
                 }
             };
 
-            XmlRootAttributes = new[]
-            {
-                new XmlAttribute
-                {
-                    Name = "xmlns:av",
-                    Value = "urn:schemas-sony-com:av"
-                }
-            };
+            AddXmlRootAttribute("xmlns:av", "urn:schemas-sony-com:av");
 
             AlbumArtPn = "JPEG_TN";
 

+ 1 - 8
MediaBrowser.Dlna/Profiles/SonyBravia2013Profile.cs

@@ -26,14 +26,7 @@ namespace MediaBrowser.Dlna.Profiles
                 }
             };
 
-            XmlRootAttributes = new[]
-            {
-                new XmlAttribute
-                {
-                    Name = "xmlns:av",
-                    Value = "urn:schemas-sony-com:av"
-                }
-            };
+            AddXmlRootAttribute("xmlns:av", "urn:schemas-sony-com:av");
 
             AlbumArtPn = "JPEG_TN";
 

+ 7 - 3
MediaBrowser.Dlna/Profiles/Xbox360Profile.cs

@@ -18,12 +18,13 @@ namespace MediaBrowser.Dlna.Profiles
 
             ModelNumber = "12.0";
 
-            FriendlyName = "${HostName} : 1";
+            FriendlyName = "${HostName}: Emby:";
 
-            ModelUrl = "http://www.microsoft.com/";
+            ModelUrl = "http://go.microsoft.com/fwlink/?LinkId=105926";
             Manufacturer = "Microsoft Corporation";
-            ManufacturerUrl = "http://www.microsoft.com/";
+            ManufacturerUrl = "http://www.microsoft.com";
             XDlnaDoc = "DMS-1.50";
+            ModelDescription = null;
 
             TimelineOffsetSeconds = 40;
             RequiresPlainFolders = true;
@@ -311,6 +312,9 @@ namespace MediaBrowser.Dlna.Profiles
                     }
                 }
             };
+
+            XmlRootAttributes = new XmlAttribute[] { };
+            AddXmlRootAttribute("xmlns", "urn:schemas-upnp-org:device-1-0");
         }
     }
 }

+ 4 - 1
MediaBrowser.Dlna/Profiles/Xml/BubbleUPnp.xml

@@ -32,7 +32,10 @@
   <RequiresPlainVideoItems>false</RequiresPlainVideoItems>
   <RequiresPlainFolders>false</RequiresPlainFolders>
   <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar>
-  <XmlRootAttributes />
+  <XmlRootAttributes>
+    <XmlAttribute name="xmlns" value="urn:schemas-upnp-org:device-1-0" />
+    <XmlAttribute name="xmlns:dlna" value="urn:schemas-dlna-org:device-1-0" />
+  </XmlRootAttributes>
   <DirectPlayProfiles>
     <DirectPlayProfile container="avi,mpeg,mkv,ts,mp4,mov,m4v,asf,webm,ogg,ogv,iso" type="Video" />
     <DirectPlayProfile container="mp3,flac,asf,off,oga,aac" type="Audio" />

+ 4 - 1
MediaBrowser.Dlna/Profiles/Xml/Default.xml

@@ -26,7 +26,10 @@
   <RequiresPlainVideoItems>false</RequiresPlainVideoItems>
   <RequiresPlainFolders>false</RequiresPlainFolders>
   <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar>
-  <XmlRootAttributes />
+  <XmlRootAttributes>
+    <XmlAttribute name="xmlns" value="urn:schemas-upnp-org:device-1-0" />
+    <XmlAttribute name="xmlns:dlna" value="urn:schemas-dlna-org:device-1-0" />
+  </XmlRootAttributes>
   <DirectPlayProfiles>
     <DirectPlayProfile container="mp3,wma" type="Audio" />
     <DirectPlayProfile container="avi,mp4" type="Video" />

+ 4 - 1
MediaBrowser.Dlna/Profiles/Xml/Denon AVR.xml

@@ -31,7 +31,10 @@
   <RequiresPlainVideoItems>false</RequiresPlainVideoItems>
   <RequiresPlainFolders>false</RequiresPlainFolders>
   <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar>
-  <XmlRootAttributes />
+  <XmlRootAttributes>
+    <XmlAttribute name="xmlns" value="urn:schemas-upnp-org:device-1-0" />
+    <XmlAttribute name="xmlns:dlna" value="urn:schemas-dlna-org:device-1-0" />
+  </XmlRootAttributes>
   <DirectPlayProfiles>
     <DirectPlayProfile container="mp3,flac,m4a,wma" type="Audio" />
   </DirectPlayProfiles>

+ 4 - 1
MediaBrowser.Dlna/Profiles/Xml/DirecTV HD-DVR.xml

@@ -32,7 +32,10 @@
   <RequiresPlainVideoItems>true</RequiresPlainVideoItems>
   <RequiresPlainFolders>true</RequiresPlainFolders>
   <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar>
-  <XmlRootAttributes />
+  <XmlRootAttributes>
+    <XmlAttribute name="xmlns" value="urn:schemas-upnp-org:device-1-0" />
+    <XmlAttribute name="xmlns:dlna" value="urn:schemas-dlna-org:device-1-0" />
+  </XmlRootAttributes>
   <DirectPlayProfiles>
     <DirectPlayProfile container="mpeg" audioCodec="mp2" videoCodec="mpeg2video" type="Video" />
     <DirectPlayProfile container="jpeg,jpg" type="Photo" />

+ 4 - 1
MediaBrowser.Dlna/Profiles/Xml/Dish Hopper-Joey.xml

@@ -33,7 +33,10 @@
   <RequiresPlainVideoItems>false</RequiresPlainVideoItems>
   <RequiresPlainFolders>false</RequiresPlainFolders>
   <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar>
-  <XmlRootAttributes />
+  <XmlRootAttributes>
+    <XmlAttribute name="xmlns" value="urn:schemas-upnp-org:device-1-0" />
+    <XmlAttribute name="xmlns:dlna" value="urn:schemas-dlna-org:device-1-0" />
+  </XmlRootAttributes>
   <DirectPlayProfiles>
     <DirectPlayProfile container="mp4,mkv,mpeg,ts" audioCodec="mp3,ac3,aac,he-aac,pcm" videoCodec="h264,mpeg2video" type="Video" />
     <DirectPlayProfile container="mp3" audioCodec="mp3" type="Audio" />

+ 4 - 1
MediaBrowser.Dlna/Profiles/Xml/LG Smart TV.xml

@@ -32,7 +32,10 @@
   <RequiresPlainVideoItems>false</RequiresPlainVideoItems>
   <RequiresPlainFolders>false</RequiresPlainFolders>
   <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar>
-  <XmlRootAttributes />
+  <XmlRootAttributes>
+    <XmlAttribute name="xmlns" value="urn:schemas-upnp-org:device-1-0" />
+    <XmlAttribute name="xmlns:dlna" value="urn:schemas-dlna-org:device-1-0" />
+  </XmlRootAttributes>
   <DirectPlayProfiles>
     <DirectPlayProfile container="ts" audioCodec="aac,ac3,mp3" videoCodec="h264" type="Video" />
     <DirectPlayProfile container="mkv" audioCodec="aac,ac3,mp3" videoCodec="h264" type="Video" />

+ 4 - 1
MediaBrowser.Dlna/Profiles/Xml/Linksys DMA2100.xml

@@ -30,7 +30,10 @@
   <RequiresPlainVideoItems>false</RequiresPlainVideoItems>
   <RequiresPlainFolders>false</RequiresPlainFolders>
   <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar>
-  <XmlRootAttributes />
+  <XmlRootAttributes>
+    <XmlAttribute name="xmlns" value="urn:schemas-upnp-org:device-1-0" />
+    <XmlAttribute name="xmlns:dlna" value="urn:schemas-dlna-org:device-1-0" />
+  </XmlRootAttributes>
   <DirectPlayProfiles>
     <DirectPlayProfile container="mp3,flac,m4a,wma" type="Audio" />
     <DirectPlayProfile container="avi,mp4,mkv,ts" type="Video" />

+ 4 - 1
MediaBrowser.Dlna/Profiles/Xml/MediaMonkey.xml

@@ -32,7 +32,10 @@
   <RequiresPlainVideoItems>false</RequiresPlainVideoItems>
   <RequiresPlainFolders>false</RequiresPlainFolders>
   <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar>
-  <XmlRootAttributes />
+  <XmlRootAttributes>
+    <XmlAttribute name="xmlns" value="urn:schemas-upnp-org:device-1-0" />
+    <XmlAttribute name="xmlns:dlna" value="urn:schemas-dlna-org:device-1-0" />
+  </XmlRootAttributes>
   <DirectPlayProfiles>
     <DirectPlayProfile container="mp3" audioCodec="mp2,mp3" type="Audio" />
     <DirectPlayProfile container="mp4" audioCodec="mp4" type="Audio" />

+ 2 - 0
MediaBrowser.Dlna/Profiles/Xml/Panasonic Viera.xml

@@ -34,6 +34,8 @@
   <RequiresPlainFolders>false</RequiresPlainFolders>
   <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar>
   <XmlRootAttributes>
+    <XmlAttribute name="xmlns" value="urn:schemas-upnp-org:device-1-0" />
+    <XmlAttribute name="xmlns:dlna" value="urn:schemas-dlna-org:device-1-0" />
     <XmlAttribute name="xmlns:pv" value="http://www.pv.com/pvns/" />
   </XmlRootAttributes>
   <DirectPlayProfiles>

+ 4 - 1
MediaBrowser.Dlna/Profiles/Xml/Popcorn Hour.xml

@@ -26,7 +26,10 @@
   <RequiresPlainVideoItems>false</RequiresPlainVideoItems>
   <RequiresPlainFolders>false</RequiresPlainFolders>
   <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar>
-  <XmlRootAttributes />
+  <XmlRootAttributes>
+    <XmlAttribute name="xmlns" value="urn:schemas-upnp-org:device-1-0" />
+    <XmlAttribute name="xmlns:dlna" value="urn:schemas-dlna-org:device-1-0" />
+  </XmlRootAttributes>
   <DirectPlayProfiles>
     <DirectPlayProfile container="mp4,mov" audioCodec="aac" videoCodec="h264,mpeg4" type="Video" />
     <DirectPlayProfile container="ts" audioCodec="aac,ac3,eac3,mp3,mp2,pcm" videoCodec="h264" type="Video" />

+ 2 - 0
MediaBrowser.Dlna/Profiles/Xml/Samsung Smart TV.xml

@@ -33,6 +33,8 @@
   <RequiresPlainFolders>false</RequiresPlainFolders>
   <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar>
   <XmlRootAttributes>
+    <XmlAttribute name="xmlns" value="urn:schemas-upnp-org:device-1-0" />
+    <XmlAttribute name="xmlns:dlna" value="urn:schemas-dlna-org:device-1-0" />
     <XmlAttribute name="xmlns:sec" value="http://www.sec.co.kr/" />
   </XmlRootAttributes>
   <DirectPlayProfiles>

+ 2 - 0
MediaBrowser.Dlna/Profiles/Xml/Sony Blu-ray Player 2013.xml

@@ -33,6 +33,8 @@
   <RequiresPlainFolders>false</RequiresPlainFolders>
   <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar>
   <XmlRootAttributes>
+    <XmlAttribute name="xmlns" value="urn:schemas-upnp-org:device-1-0" />
+    <XmlAttribute name="xmlns:dlna" value="urn:schemas-dlna-org:device-1-0" />
     <XmlAttribute name="xmlns:av" value="urn:schemas-sony-com:av" />
   </XmlRootAttributes>
   <DirectPlayProfiles>

+ 2 - 0
MediaBrowser.Dlna/Profiles/Xml/Sony Blu-ray Player.xml

@@ -35,6 +35,8 @@
   <RequiresPlainFolders>false</RequiresPlainFolders>
   <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar>
   <XmlRootAttributes>
+    <XmlAttribute name="xmlns" value="urn:schemas-upnp-org:device-1-0" />
+    <XmlAttribute name="xmlns:dlna" value="urn:schemas-dlna-org:device-1-0" />
     <XmlAttribute name="xmlns:av" value="urn:schemas-sony-com:av" />
   </XmlRootAttributes>
   <DirectPlayProfiles>

+ 2 - 0
MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2010).xml

@@ -35,6 +35,8 @@
   <RequiresPlainFolders>false</RequiresPlainFolders>
   <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar>
   <XmlRootAttributes>
+    <XmlAttribute name="xmlns" value="urn:schemas-upnp-org:device-1-0" />
+    <XmlAttribute name="xmlns:dlna" value="urn:schemas-dlna-org:device-1-0" />
     <XmlAttribute name="xmlns:av" value="urn:schemas-sony-com:av" />
   </XmlRootAttributes>
   <DirectPlayProfiles>

+ 2 - 0
MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2011).xml

@@ -35,6 +35,8 @@
   <RequiresPlainFolders>false</RequiresPlainFolders>
   <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar>
   <XmlRootAttributes>
+    <XmlAttribute name="xmlns" value="urn:schemas-upnp-org:device-1-0" />
+    <XmlAttribute name="xmlns:dlna" value="urn:schemas-dlna-org:device-1-0" />
     <XmlAttribute name="xmlns:av" value="urn:schemas-sony-com:av" />
   </XmlRootAttributes>
   <DirectPlayProfiles>

+ 2 - 0
MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2012).xml

@@ -35,6 +35,8 @@
   <RequiresPlainFolders>false</RequiresPlainFolders>
   <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar>
   <XmlRootAttributes>
+    <XmlAttribute name="xmlns" value="urn:schemas-upnp-org:device-1-0" />
+    <XmlAttribute name="xmlns:dlna" value="urn:schemas-dlna-org:device-1-0" />
     <XmlAttribute name="xmlns:av" value="urn:schemas-sony-com:av" />
   </XmlRootAttributes>
   <DirectPlayProfiles>

+ 2 - 0
MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2013).xml

@@ -35,6 +35,8 @@
   <RequiresPlainFolders>false</RequiresPlainFolders>
   <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar>
   <XmlRootAttributes>
+    <XmlAttribute name="xmlns" value="urn:schemas-upnp-org:device-1-0" />
+    <XmlAttribute name="xmlns:dlna" value="urn:schemas-dlna-org:device-1-0" />
     <XmlAttribute name="xmlns:av" value="urn:schemas-sony-com:av" />
   </XmlRootAttributes>
   <DirectPlayProfiles>

+ 4 - 1
MediaBrowser.Dlna/Profiles/Xml/Sony PlayStation 3.xml

@@ -34,7 +34,10 @@
   <RequiresPlainVideoItems>false</RequiresPlainVideoItems>
   <RequiresPlainFolders>false</RequiresPlainFolders>
   <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar>
-  <XmlRootAttributes />
+  <XmlRootAttributes>
+    <XmlAttribute name="xmlns" value="urn:schemas-upnp-org:device-1-0" />
+    <XmlAttribute name="xmlns:dlna" value="urn:schemas-dlna-org:device-1-0" />
+  </XmlRootAttributes>
   <DirectPlayProfiles>
     <DirectPlayProfile container="avi" audioCodec="mp2,mp3" videoCodec="mpeg4" type="Video" />
     <DirectPlayProfile container="ts" audioCodec="ac3,mp2,mp3,aac" videoCodec="mpeg1video,mpeg2video,h264" type="Video" />

+ 4 - 1
MediaBrowser.Dlna/Profiles/Xml/Vlc.xml

@@ -32,7 +32,10 @@
   <RequiresPlainVideoItems>false</RequiresPlainVideoItems>
   <RequiresPlainFolders>false</RequiresPlainFolders>
   <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar>
-  <XmlRootAttributes />
+  <XmlRootAttributes>
+    <XmlAttribute name="xmlns" value="urn:schemas-upnp-org:device-1-0" />
+    <XmlAttribute name="xmlns:dlna" value="urn:schemas-dlna-org:device-1-0" />
+  </XmlRootAttributes>
   <DirectPlayProfiles>
     <DirectPlayProfile container="avi,mpeg,mkv,ts,mp4,mov,m4v,asf,webm,ogg,ogv,iso" type="Video" />
     <DirectPlayProfile container="mp3,flac,asf,off,oga,aac" type="Audio" />

+ 4 - 1
MediaBrowser.Dlna/Profiles/Xml/WDTV Live.xml

@@ -33,7 +33,10 @@
   <RequiresPlainVideoItems>false</RequiresPlainVideoItems>
   <RequiresPlainFolders>false</RequiresPlainFolders>
   <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar>
-  <XmlRootAttributes />
+  <XmlRootAttributes>
+    <XmlAttribute name="xmlns" value="urn:schemas-upnp-org:device-1-0" />
+    <XmlAttribute name="xmlns:dlna" value="urn:schemas-dlna-org:device-1-0" />
+  </XmlRootAttributes>
   <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" />

+ 6 - 5
MediaBrowser.Dlna/Profiles/Xml/Xbox 360.xml

@@ -8,13 +8,12 @@
       <HttpHeaderInfo name="User-Agent" value="Xenon" match="Substring" />
     </Headers>
   </Identification>
-  <FriendlyName>${HostName} : 1</FriendlyName>
+  <FriendlyName>${HostName}: Emby:</FriendlyName>
   <Manufacturer>Microsoft Corporation</Manufacturer>
-  <ManufacturerUrl>http://www.microsoft.com/</ManufacturerUrl>
+  <ManufacturerUrl>http://www.microsoft.com</ManufacturerUrl>
   <ModelName>Windows Media Player Sharing</ModelName>
-  <ModelDescription>Emby</ModelDescription>
   <ModelNumber>12.0</ModelNumber>
-  <ModelUrl>http://www.microsoft.com/</ModelUrl>
+  <ModelUrl>http://go.microsoft.com/fwlink/?LinkId=105926</ModelUrl>
   <EnableAlbumArtInDidl>false</EnableAlbumArtInDidl>
   <EnableSingleAlbumArtLimit>false</EnableSingleAlbumArtLimit>
   <SupportedMediaTypes>Audio,Photo,Video</SupportedMediaTypes>
@@ -33,7 +32,9 @@
   <RequiresPlainVideoItems>true</RequiresPlainVideoItems>
   <RequiresPlainFolders>true</RequiresPlainFolders>
   <EnableMSMediaReceiverRegistrar>true</EnableMSMediaReceiverRegistrar>
-  <XmlRootAttributes />
+  <XmlRootAttributes>
+    <XmlAttribute name="xmlns" value="urn:schemas-upnp-org:device-1-0" />
+  </XmlRootAttributes>
   <DirectPlayProfiles>
     <DirectPlayProfile container="avi" audioCodec="ac3,mp3" videoCodec="mpeg4" type="Video" />
     <DirectPlayProfile container="avi" audioCodec="aac" videoCodec="h264" type="Video" />

+ 4 - 1
MediaBrowser.Dlna/Profiles/Xml/Xbox One.xml

@@ -33,7 +33,10 @@
   <RequiresPlainVideoItems>false</RequiresPlainVideoItems>
   <RequiresPlainFolders>false</RequiresPlainFolders>
   <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar>
-  <XmlRootAttributes />
+  <XmlRootAttributes>
+    <XmlAttribute name="xmlns" value="urn:schemas-upnp-org:device-1-0" />
+    <XmlAttribute name="xmlns:dlna" value="urn:schemas-dlna-org:device-1-0" />
+  </XmlRootAttributes>
   <DirectPlayProfiles>
     <DirectPlayProfile container="ts" audioCodec="ac3" videoCodec="h264" type="Video" />
     <DirectPlayProfile container="avi" audioCodec="ac3,mp3" videoCodec="mpeg4" type="Video" />

+ 4 - 1
MediaBrowser.Dlna/Profiles/Xml/foobar2000.xml

@@ -32,7 +32,10 @@
   <RequiresPlainVideoItems>false</RequiresPlainVideoItems>
   <RequiresPlainFolders>false</RequiresPlainFolders>
   <EnableMSMediaReceiverRegistrar>false</EnableMSMediaReceiverRegistrar>
-  <XmlRootAttributes />
+  <XmlRootAttributes>
+    <XmlAttribute name="xmlns" value="urn:schemas-upnp-org:device-1-0" />
+    <XmlAttribute name="xmlns:dlna" value="urn:schemas-dlna-org:device-1-0" />
+  </XmlRootAttributes>
   <DirectPlayProfiles>
     <DirectPlayProfile container="mp3" audioCodec="mp2,mp3" type="Audio" />
     <DirectPlayProfile container="mp4" audioCodec="mp4" type="Audio" />

+ 26 - 7
MediaBrowser.Dlna/Server/DescriptionXmlBuilder.cs

@@ -18,8 +18,9 @@ namespace MediaBrowser.Dlna.Server
         private readonly string _serverUdn;
         private readonly string _serverAddress;
         private readonly string _serverName;
+        private readonly string _serverId;
 
-        public DescriptionXmlBuilder(DeviceProfile profile, string serverUdn, string serverAddress, string serverName)
+        public DescriptionXmlBuilder(DeviceProfile profile, string serverUdn, string serverAddress, string serverName, string serverId)
         {
             if (string.IsNullOrWhiteSpace(serverUdn))
             {
@@ -35,6 +36,7 @@ namespace MediaBrowser.Dlna.Server
             _serverUdn = serverUdn;
             _serverAddress = serverAddress;
             _serverName = serverName;
+            _serverId = serverId;
         }
 
         private bool EnableAbsoluteUrls
@@ -48,7 +50,7 @@ namespace MediaBrowser.Dlna.Server
 
             builder.Append("<?xml version=\"1.0\"?>");
 
-            builder.Append("<root xmlns=\"urn:schemas-upnp-org:device-1-0\" xmlns:dlna=\"urn:schemas-dlna-org:device-1-0\"");
+            builder.Append("<root");
             foreach (var att in _profile.XmlRootAttributes)
             {
                 builder.AppendFormat(" {0}=\"{1}\"", att.Name, att.Value);
@@ -72,7 +74,7 @@ namespace MediaBrowser.Dlna.Server
             builder.Append("<device>");
             AppendDeviceProperties(builder);
 
-            AppendIconList(builder);
+            //AppendIconList(builder);
             AppendServiceList(builder);
             builder.Append("</device>");
         }
@@ -80,20 +82,37 @@ namespace MediaBrowser.Dlna.Server
         private void AppendDeviceProperties(StringBuilder builder)
         {
             builder.Append("<UDN>uuid:" + SecurityElement.Escape(_serverUdn) + "</UDN>");
-            builder.Append("<dlna:X_DLNACAP>" + SecurityElement.Escape(_profile.XDlnaCap ?? string.Empty) + "</dlna:X_DLNACAP>");
+
+            if (!string.IsNullOrWhiteSpace(_profile.XDlnaCap))
+            {
+                builder.Append("<dlna:X_DLNACAP>" + SecurityElement.Escape(_profile.XDlnaCap ?? string.Empty) + "</dlna:X_DLNACAP>");
+            }
 
             builder.Append("<dlna:X_DLNADOC xmlns:dlna=\"urn:schemas-dlna-org:device-1-0\">M-DMS-1.50</dlna:X_DLNADOC>");
             builder.Append("<dlna:X_DLNADOC xmlns:dlna=\"urn:schemas-dlna-org:device-1-0\">" + SecurityElement.Escape(_profile.XDlnaDoc ?? string.Empty) + "</dlna:X_DLNADOC>");
-
+            
             builder.Append("<friendlyName>" + SecurityElement.Escape(GetFriendlyName()) + "</friendlyName>");
             builder.Append("<deviceType>urn:schemas-upnp-org:device:MediaServer:1</deviceType>");
             builder.Append("<manufacturer>" + SecurityElement.Escape(_profile.Manufacturer ?? string.Empty) + "</manufacturer>");
             builder.Append("<manufacturerURL>" + SecurityElement.Escape(_profile.ManufacturerUrl ?? string.Empty) + "</manufacturerURL>");
             builder.Append("<modelName>" + SecurityElement.Escape(_profile.ModelName ?? string.Empty) + "</modelName>");
-            builder.Append("<modelDescription>" + SecurityElement.Escape(_profile.ModelDescription ?? string.Empty) + "</modelDescription>");
+
+            if (!string.IsNullOrWhiteSpace(_profile.ModelDescription))
+            {
+                builder.Append("<modelDescription>" + SecurityElement.Escape(_profile.ModelDescription ?? string.Empty) + "</modelDescription>");
+            }
+            
             builder.Append("<modelNumber>" + SecurityElement.Escape(_profile.ModelNumber ?? string.Empty) + "</modelNumber>");
             builder.Append("<modelURL>" + SecurityElement.Escape(_profile.ModelUrl ?? string.Empty) + "</modelURL>");
-            builder.Append("<serialNumber>" + SecurityElement.Escape(_profile.SerialNumber ?? string.Empty) + "</serialNumber>");
+
+            if (string.IsNullOrWhiteSpace(_profile.SerialNumber))
+            {
+                builder.Append("<serialNumber>" + SecurityElement.Escape(_serverId) + "</serialNumber>");
+            }
+            else
+            {
+                builder.Append("<serialNumber>" + SecurityElement.Escape(_profile.SerialNumber) + "</serialNumber>");
+            }
 
             builder.Append("<presentationURL>" + SecurityElement.Escape(_serverAddress) + "</presentationURL>");
 

+ 9 - 0
MediaBrowser.Providers/Manager/ProviderUtils.cs

@@ -14,6 +14,15 @@ namespace MediaBrowser.Providers.Manager
             bool replaceData, 
             bool mergeMetadataSettings)
         {
+            if (source == null)
+            {
+                throw new ArgumentNullException("source");
+            }
+            if (target == null)
+            {
+                throw new ArgumentNullException("target");
+            }
+
             if (!lockedFields.Contains(MetadataFields.Name))
             {
                 if (replaceData || string.IsNullOrEmpty(target.Name))