瀏覽代碼

Merge remote-tracking branch 'upstream/master'

Tim Hobbs 11 年之前
父節點
當前提交
40d07e89ad
共有 56 個文件被更改,包括 252 次插入156 次删除
  1. 2 4
      MediaBrowser.Api/DisplayPreferencesService.cs
  2. 5 10
      MediaBrowser.Api/EnvironmentService.cs
  3. 6 9
      MediaBrowser.Api/GamesService.cs
  4. 18 18
      MediaBrowser.Api/Playback/Progressive/AudioService.cs
  5. 2 3
      MediaBrowser.Api/UserLibrary/ItemsService.cs
  6. 0 1
      MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj
  7. 3 3
      MediaBrowser.Controller/Dlna/CodecProfile.cs
  8. 0 1
      MediaBrowser.Controller/Dlna/DeviceProfile.cs
  9. 3 0
      MediaBrowser.Controller/Dlna/TranscodingProfile.cs
  10. 8 0
      MediaBrowser.Controller/Session/ISessionController.cs
  11. 4 4
      MediaBrowser.Dlna/PlayTo/DidlBuilder.cs
  12. 6 1
      MediaBrowser.Dlna/PlayTo/DlnaController.cs
  13. 6 6
      MediaBrowser.Dlna/PlayTo/PlaylistItemFactory.cs
  14. 3 3
      MediaBrowser.Dlna/Profiles/LgTvProfile.cs
  15. 1 1
      MediaBrowser.Dlna/Profiles/PanasonicVieraProfile.cs
  16. 5 5
      MediaBrowser.Dlna/Profiles/SamsungSmartTvProfile.cs
  17. 2 2
      MediaBrowser.Dlna/Profiles/SonyBlurayPlayer2013Profile.cs
  18. 3 3
      MediaBrowser.Dlna/Profiles/SonyBlurayPlayerProfile.cs
  19. 5 5
      MediaBrowser.Dlna/Profiles/SonyBravia2010Profile.cs
  20. 5 5
      MediaBrowser.Dlna/Profiles/SonyBravia2011Profile.cs
  21. 2 2
      MediaBrowser.Dlna/Profiles/SonyBravia2012Profile.cs
  22. 1 1
      MediaBrowser.Dlna/Profiles/SonyBravia2013Profile.cs
  23. 5 5
      MediaBrowser.Dlna/Profiles/SonyPs3Profile.cs
  24. 2 2
      MediaBrowser.Dlna/Profiles/WdtvLiveProfile.cs
  25. 5 5
      MediaBrowser.Dlna/Profiles/Xbox360Profile.cs
  26. 1 0
      MediaBrowser.Dlna/Profiles/Xml/Default.xml
  27. 1 0
      MediaBrowser.Dlna/Profiles/Xml/Denon AVR.xml
  28. 3 3
      MediaBrowser.Dlna/Profiles/Xml/LG Smart TV.xml
  29. 1 0
      MediaBrowser.Dlna/Profiles/Xml/Linksys DMA2100.xml
  30. 1 1
      MediaBrowser.Dlna/Profiles/Xml/Panasonic Viera.xml
  31. 5 5
      MediaBrowser.Dlna/Profiles/Xml/Samsung Smart TV.xml
  32. 2 2
      MediaBrowser.Dlna/Profiles/Xml/Sony Blu-ray Player 2013.xml
  33. 3 3
      MediaBrowser.Dlna/Profiles/Xml/Sony Blu-ray Player.xml
  34. 5 5
      MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2010).xml
  35. 5 5
      MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2011).xml
  36. 2 2
      MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2012).xml
  37. 1 1
      MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2013).xml
  38. 5 5
      MediaBrowser.Dlna/Profiles/Xml/Sony PlayStation 3.xml
  39. 2 2
      MediaBrowser.Dlna/Profiles/Xml/WDTV Live.xml
  40. 5 5
      MediaBrowser.Dlna/Profiles/Xml/Xbox 360.xml
  41. 1 0
      MediaBrowser.Dlna/Profiles/Xml/Xbox One.xml
  42. 1 0
      MediaBrowser.Dlna/Profiles/Xml/foobar2000.xml
  43. 3 0
      MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj
  44. 3 0
      MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj
  45. 8 0
      MediaBrowser.Model/ApiClient/IApiClient.cs
  46. 1 0
      MediaBrowser.Model/MediaBrowser.Model.csproj
  47. 48 0
      MediaBrowser.Model/Session/GenericCommand.cs
  48. 9 1
      MediaBrowser.Model/Session/PlaystateCommand.cs
  49. 11 0
      MediaBrowser.Server.Implementations/Roku/RokuSessionController.cs
  50. 12 0
      MediaBrowser.Server.Implementations/Session/WebSocketController.cs
  51. 2 3
      MediaBrowser.ServerApplication/MainStartup.cs
  52. 1 0
      MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj
  53. 3 9
      MediaBrowser.ServerApplication/Updates/ApplicationUpdater.cs
  54. 2 2
      Nuget/MediaBrowser.Common.Internal.nuspec
  55. 1 1
      Nuget/MediaBrowser.Common.nuspec
  56. 2 2
      Nuget/MediaBrowser.Server.Core.nuspec

+ 2 - 4
MediaBrowser.Api/DisplayPreferencesService.cs

@@ -12,8 +12,7 @@ namespace MediaBrowser.Api
     /// <summary>
     /// <summary>
     /// Class UpdateDisplayPreferences
     /// Class UpdateDisplayPreferences
     /// </summary>
     /// </summary>
-    [Route("/DisplayPreferences/{DisplayPreferencesId}", "POST")]
-    [Api(("Updates a user's display preferences for an item"))]
+    [Route("/DisplayPreferences/{DisplayPreferencesId}", "POST", Summary = "Updates a user's display preferences for an item")]
     public class UpdateDisplayPreferences : DisplayPreferences, IReturnVoid
     public class UpdateDisplayPreferences : DisplayPreferences, IReturnVoid
     {
     {
         /// <summary>
         /// <summary>
@@ -30,8 +29,7 @@ namespace MediaBrowser.Api
         public string Client { get; set; }
         public string Client { get; set; }
     }
     }
 
 
-    [Route("/DisplayPreferences/{Id}", "GET")]
-    [Api(("Gets a user's display preferences for an item"))]
+    [Route("/DisplayPreferences/{Id}", "GET", Summary = "Gets a user's display preferences for an item")]
     public class GetDisplayPreferences : IReturn<DisplayPreferences>
     public class GetDisplayPreferences : IReturn<DisplayPreferences>
     {
     {
         /// <summary>
         /// <summary>

+ 5 - 10
MediaBrowser.Api/EnvironmentService.cs

@@ -13,8 +13,7 @@ namespace MediaBrowser.Api
     /// <summary>
     /// <summary>
     /// Class GetDirectoryContents
     /// Class GetDirectoryContents
     /// </summary>
     /// </summary>
-    [Route("/Environment/DirectoryContents", "GET")]
-    [Api(Description = "Gets the contents of a given directory in the file system")]
+    [Route("/Environment/DirectoryContents", "GET", Summary = "Gets the contents of a given directory in the file system")]
     public class GetDirectoryContents : IReturn<List<FileSystemEntryInfo>>
     public class GetDirectoryContents : IReturn<List<FileSystemEntryInfo>>
     {
     {
         /// <summary>
         /// <summary>
@@ -46,8 +45,7 @@ namespace MediaBrowser.Api
         public bool IncludeHidden { get; set; }
         public bool IncludeHidden { get; set; }
     }
     }
 
 
-    [Route("/Environment/NetworkShares", "GET")]
-    [Api(Description = "Gets shares from a network device")]
+    [Route("/Environment/NetworkShares", "GET", Summary = "Gets shares from a network device")]
     public class GetNetworkShares : IReturn<List<FileSystemEntryInfo>>
     public class GetNetworkShares : IReturn<List<FileSystemEntryInfo>>
     {
     {
         /// <summary>
         /// <summary>
@@ -61,8 +59,7 @@ namespace MediaBrowser.Api
     /// <summary>
     /// <summary>
     /// Class GetDrives
     /// Class GetDrives
     /// </summary>
     /// </summary>
-    [Route("/Environment/Drives", "GET")]
-    [Api(Description = "Gets available drives from the server's file system")]
+    [Route("/Environment/Drives", "GET", Summary = "Gets available drives from the server's file system")]
     public class GetDrives : IReturn<List<FileSystemEntryInfo>>
     public class GetDrives : IReturn<List<FileSystemEntryInfo>>
     {
     {
     }
     }
@@ -70,14 +67,12 @@ namespace MediaBrowser.Api
     /// <summary>
     /// <summary>
     /// Class GetNetworkComputers
     /// Class GetNetworkComputers
     /// </summary>
     /// </summary>
-    [Route("/Environment/NetworkDevices", "GET")]
-    [Api(Description = "Gets a list of devices on the network")]
+    [Route("/Environment/NetworkDevices", "GET", Summary = "Gets a list of devices on the network")]
     public class GetNetworkDevices : IReturn<List<FileSystemEntryInfo>>
     public class GetNetworkDevices : IReturn<List<FileSystemEntryInfo>>
     {
     {
     }
     }
 
 
-    [Route("/Environment/ParentPath", "GET")]
-    [Api(Description = "Gets the parent path of a given path")]
+    [Route("/Environment/ParentPath", "GET", Summary = "Gets the parent path of a given path")]
     public class GetParentPath : IReturn<string>
     public class GetParentPath : IReturn<string>
     {
     {
         /// <summary>
         /// <summary>

+ 6 - 9
MediaBrowser.Api/GamesService.cs

@@ -1,5 +1,4 @@
-using System.Globalization;
-using MediaBrowser.Controller.Dto;
+using MediaBrowser.Controller.Dto;
 using MediaBrowser.Controller.Entities;
 using MediaBrowser.Controller.Entities;
 using MediaBrowser.Controller.Library;
 using MediaBrowser.Controller.Library;
 using MediaBrowser.Controller.Persistence;
 using MediaBrowser.Controller.Persistence;
@@ -7,6 +6,7 @@ using MediaBrowser.Model.Dto;
 using ServiceStack;
 using ServiceStack;
 using System;
 using System;
 using System.Collections.Generic;
 using System.Collections.Generic;
+using System.Globalization;
 using System.IO;
 using System.IO;
 using System.Linq;
 using System.Linq;
 
 
@@ -15,8 +15,7 @@ namespace MediaBrowser.Api
     /// <summary>
     /// <summary>
     /// Class GetSimilarGames
     /// Class GetSimilarGames
     /// </summary>
     /// </summary>
-    [Route("/Games/{Id}/Similar", "GET")]
-    [Api(Description = "Finds games similar to a given game.")]
+    [Route("/Games/{Id}/Similar", "GET", Summary = "Finds games similar to a given game.")]
     public class GetSimilarGames : BaseGetSimilarItemsFromItem
     public class GetSimilarGames : BaseGetSimilarItemsFromItem
     {
     {
     }
     }
@@ -24,8 +23,7 @@ namespace MediaBrowser.Api
     /// <summary>
     /// <summary>
     /// Class GetGameSystemSummaries
     /// Class GetGameSystemSummaries
     /// </summary>
     /// </summary>
-    [Route("/Games/SystemSummaries", "GET")]
-    [Api(Description = "Finds games similar to a given game.")]
+    [Route("/Games/SystemSummaries", "GET", Summary = "Finds games similar to a given game.")]
     public class GetGameSystemSummaries : IReturn<List<GameSystemSummary>>
     public class GetGameSystemSummaries : IReturn<List<GameSystemSummary>>
     {
     {
         /// <summary>
         /// <summary>
@@ -39,8 +37,7 @@ namespace MediaBrowser.Api
     /// <summary>
     /// <summary>
     /// Class GetGameSystemSummaries
     /// Class GetGameSystemSummaries
     /// </summary>
     /// </summary>
-    [Route("/Games/PlayerIndex", "GET")]
-    [Api(Description = "Gets an index of players (1-x) and the number of games listed under each")]
+    [Route("/Games/PlayerIndex", "GET", Summary = "Gets an index of players (1-x) and the number of games listed under each")]
     public class GetPlayerIndex : IReturn<List<ItemIndex>>
     public class GetPlayerIndex : IReturn<List<ItemIndex>>
     {
     {
         /// <summary>
         /// <summary>
@@ -117,7 +114,7 @@ namespace MediaBrowser.Api
         }
         }
 
 
         private static readonly CultureInfo UsCulture = new CultureInfo("en-US");
         private static readonly CultureInfo UsCulture = new CultureInfo("en-US");
-        
+
         public object Get(GetPlayerIndex request)
         public object Get(GetPlayerIndex request)
         {
         {
             var games = GetAllLibraryItems(request.UserId, _userManager, _libraryManager)
             var games = GetAllLibraryItems(request.UserId, _userManager, _libraryManager)

+ 18 - 18
MediaBrowser.Api/Playback/Progressive/AudioService.cs

@@ -17,23 +17,22 @@ namespace MediaBrowser.Api.Playback.Progressive
     /// <summary>
     /// <summary>
     /// Class GetAudioStream
     /// Class GetAudioStream
     /// </summary>
     /// </summary>
-    [Route("/Audio/{Id}/stream.mp3", "GET")]
-    [Route("/Audio/{Id}/stream.wma", "GET")]
-    [Route("/Audio/{Id}/stream.aac", "GET")]
-    [Route("/Audio/{Id}/stream.flac", "GET")]
-    [Route("/Audio/{Id}/stream.ogg", "GET")]
-    [Route("/Audio/{Id}/stream.oga", "GET")]
-    [Route("/Audio/{Id}/stream.webm", "GET")]
-    [Route("/Audio/{Id}/stream", "GET")]
-    [Route("/Audio/{Id}/stream.mp3", "HEAD")]
-    [Route("/Audio/{Id}/stream.wma", "HEAD")]
-    [Route("/Audio/{Id}/stream.aac", "HEAD")]
-    [Route("/Audio/{Id}/stream.flac", "HEAD")]
-    [Route("/Audio/{Id}/stream.ogg", "HEAD")]
-    [Route("/Audio/{Id}/stream.oga", "HEAD")]
-    [Route("/Audio/{Id}/stream.webm", "HEAD")]
-    [Route("/Audio/{Id}/stream", "HEAD")]
-    [Api(Description = "Gets an audio stream")]
+    [Route("/Audio/{Id}/stream.mp3", "GET", Summary = "Gets an audio stream")]
+    [Route("/Audio/{Id}/stream.wma", "GET", Summary = "Gets an audio stream")]
+    [Route("/Audio/{Id}/stream.aac", "GET", Summary = "Gets an audio stream")]
+    [Route("/Audio/{Id}/stream.flac", "GET", Summary = "Gets an audio stream")]
+    [Route("/Audio/{Id}/stream.ogg", "GET", Summary = "Gets an audio stream")]
+    [Route("/Audio/{Id}/stream.oga", "GET", Summary = "Gets an audio stream")]
+    [Route("/Audio/{Id}/stream.webm", "GET", Summary = "Gets an audio stream")]
+    [Route("/Audio/{Id}/stream", "GET", Summary = "Gets an audio stream")]
+    [Route("/Audio/{Id}/stream.mp3", "HEAD", Summary = "Gets an audio stream")]
+    [Route("/Audio/{Id}/stream.wma", "HEAD", Summary = "Gets an audio stream")]
+    [Route("/Audio/{Id}/stream.aac", "HEAD", Summary = "Gets an audio stream")]
+    [Route("/Audio/{Id}/stream.flac", "HEAD", Summary = "Gets an audio stream")]
+    [Route("/Audio/{Id}/stream.ogg", "HEAD", Summary = "Gets an audio stream")]
+    [Route("/Audio/{Id}/stream.oga", "HEAD", Summary = "Gets an audio stream")]
+    [Route("/Audio/{Id}/stream.webm", "HEAD", Summary = "Gets an audio stream")]
+    [Route("/Audio/{Id}/stream", "HEAD", Summary = "Gets an audio stream")]
     public class GetAudioStream : StreamRequest
     public class GetAudioStream : StreamRequest
     {
     {
 
 
@@ -44,7 +43,8 @@ namespace MediaBrowser.Api.Playback.Progressive
     /// </summary>
     /// </summary>
     public class AudioService : BaseProgressiveStreamingService
     public class AudioService : BaseProgressiveStreamingService
     {
     {
-        public AudioService(IServerConfigurationManager serverConfig, IUserManager userManager, ILibraryManager libraryManager, IIsoManager isoManager, IMediaEncoder mediaEncoder, IDtoService dtoService, IFileSystem fileSystem, IItemRepository itemRepository, ILiveTvManager liveTvManager, IEncodingManager encodingManager, IDlnaManager dlnaManager, IHttpClient httpClient, IImageProcessor imageProcessor) : base(serverConfig, userManager, libraryManager, isoManager, mediaEncoder, dtoService, fileSystem, itemRepository, liveTvManager, encodingManager, dlnaManager, httpClient, imageProcessor)
+        public AudioService(IServerConfigurationManager serverConfig, IUserManager userManager, ILibraryManager libraryManager, IIsoManager isoManager, IMediaEncoder mediaEncoder, IDtoService dtoService, IFileSystem fileSystem, IItemRepository itemRepository, ILiveTvManager liveTvManager, IEncodingManager encodingManager, IDlnaManager dlnaManager, IHttpClient httpClient, IImageProcessor imageProcessor)
+            : base(serverConfig, userManager, libraryManager, isoManager, mediaEncoder, dtoService, fileSystem, itemRepository, liveTvManager, encodingManager, dlnaManager, httpClient, imageProcessor)
         {
         {
         }
         }
 
 

+ 2 - 3
MediaBrowser.Api/UserLibrary/ItemsService.cs

@@ -20,9 +20,8 @@ namespace MediaBrowser.Api.UserLibrary
     /// <summary>
     /// <summary>
     /// Class GetItems
     /// Class GetItems
     /// </summary>
     /// </summary>
-    [Route("/Items", "GET")]
-    [Route("/Users/{UserId}/Items", "GET")]
-    [Api(Description = "Gets items based on a query.")]
+    [Route("/Items", "GET", Summary = "Gets items based on a query.")]
+    [Route("/Users/{UserId}/Items", "GET", Summary = "Gets items based on a query.")]
     public class GetItems : BaseItemsRequest, IReturn<ItemsResult>
     public class GetItems : BaseItemsRequest, IReturn<ItemsResult>
     {
     {
         /// <summary>
         /// <summary>

+ 0 - 1
MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj

@@ -102,7 +102,6 @@
     <Compile Include="Security\PluginSecurityManager.cs" />
     <Compile Include="Security\PluginSecurityManager.cs" />
     <Compile Include="Serialization\JsonSerializer.cs" />
     <Compile Include="Serialization\JsonSerializer.cs" />
     <Compile Include="Serialization\XmlSerializer.cs" />
     <Compile Include="Serialization\XmlSerializer.cs" />
-    <Compile Include="Updates\ApplicationUpdater.cs" />
     <Compile Include="Updates\InstallationManager.cs" />
     <Compile Include="Updates\InstallationManager.cs" />
     <Compile Include="Security\UsageReporter.cs" />
     <Compile Include="Security\UsageReporter.cs" />
   </ItemGroup>
   </ItemGroup>

+ 3 - 3
MediaBrowser.Controller/Dlna/CodecProfile.cs

@@ -35,9 +35,9 @@ namespace MediaBrowser.Controller.Dlna
 
 
     public enum CodecType
     public enum CodecType
     {
     {
-        VideoCodec = 0,
-        VideoAudioCodec = 1,
-        AudioCodec = 2
+        Video = 0,
+        VideoAudio = 1,
+        Audio = 2
     }
     }
 
 
     public class ProfileCondition
     public class ProfileCondition

+ 0 - 1
MediaBrowser.Controller/Dlna/DeviceProfile.cs

@@ -3,7 +3,6 @@ using MediaBrowser.Model.Entities;
 using System;
 using System;
 using System.Collections.Generic;
 using System.Collections.Generic;
 using System.Linq;
 using System.Linq;
-using System.Runtime.Serialization;
 using System.Xml.Serialization;
 using System.Xml.Serialization;
 
 
 namespace MediaBrowser.Controller.Dlna
 namespace MediaBrowser.Controller.Dlna

+ 3 - 0
MediaBrowser.Controller/Dlna/TranscodingProfile.cs

@@ -18,6 +18,9 @@ namespace MediaBrowser.Controller.Dlna
         [XmlAttribute("audioCodec")]
         [XmlAttribute("audioCodec")]
         public string AudioCodec { get; set; }
         public string AudioCodec { get; set; }
 
 
+        [XmlAttribute("protocol")]
+        public string Protocol { get; set; }
+        
         [XmlAttribute("estimateContentLength")]
         [XmlAttribute("estimateContentLength")]
         public bool EstimateContentLength { get; set; }
         public bool EstimateContentLength { get; set; }
 
 

+ 8 - 0
MediaBrowser.Controller/Session/ISessionController.cs

@@ -59,6 +59,14 @@ namespace MediaBrowser.Controller.Session
         /// <returns>Task.</returns>
         /// <returns>Task.</returns>
         Task SendPlaystateCommand(PlaystateRequest command, CancellationToken cancellationToken);
         Task SendPlaystateCommand(PlaystateRequest command, CancellationToken cancellationToken);
 
 
+        /// <summary>
+        /// Sends the generic command.
+        /// </summary>
+        /// <param name="command">The command.</param>
+        /// <param name="cancellationToken">The cancellation token.</param>
+        /// <returns>Task.</returns>
+        Task SendGenericCommand(GenericCommand command, CancellationToken cancellationToken);
+        
         /// <summary>
         /// <summary>
         /// Sends the library update info.
         /// Sends the library update info.
         /// </summary>
         /// </summary>

+ 4 - 4
MediaBrowser.Dlna/PlayTo/DidlBuilder.cs

@@ -40,7 +40,7 @@ namespace MediaBrowser.Dlna.PlayTo
         /// <param name="streamUrl">The stream URL.</param>
         /// <param name="streamUrl">The stream URL.</param>
         /// <param name="streams">The streams.</param>
         /// <param name="streams">The streams.</param>
         /// <returns>System.String.</returns>
         /// <returns>System.String.</returns>
-        public static string Build(BaseItem dto, string userId, string serverAddress, string streamUrl, IEnumerable<MediaStream> streams)
+        public static string Build(BaseItem dto, string userId, string serverAddress, string streamUrl, IEnumerable<MediaStream> streams, bool includeImageRes)
         {
         {
             string response = string.Format(DIDL_START, dto.Id, userId);
             string response = string.Format(DIDL_START, dto.Id, userId);
             response += string.Format(DIDL_TITLE, dto.Name.Replace("&", "and"));
             response += string.Format(DIDL_TITLE, dto.Name.Replace("&", "and"));
@@ -51,7 +51,7 @@ namespace MediaBrowser.Dlna.PlayTo
 
 
             var imageUrl = GetImageUrl(dto, serverAddress);
             var imageUrl = GetImageUrl(dto, serverAddress);
 
 
-            if (!string.IsNullOrEmpty(imageUrl))
+            if (!string.IsNullOrWhiteSpace(imageUrl))
             {
             {
                 response += string.Format(DIDL_IMAGE, imageUrl);
                 response += string.Format(DIDL_IMAGE, imageUrl);
             }
             }
@@ -65,7 +65,7 @@ namespace MediaBrowser.Dlna.PlayTo
                 response += string.Format(DESCRIPTION, UNKNOWN);
                 response += string.Format(DESCRIPTION, UNKNOWN);
                 response += GetVideoDIDL(dto, streamUrl, streams);
                 response += GetVideoDIDL(dto, streamUrl, streams);
 
 
-                if (!string.IsNullOrEmpty(imageUrl))
+                if (includeImageRes && !string.IsNullOrWhiteSpace(imageUrl))
                 {
                 {
                     response += string.Format(DIDL_IMAGE_RES, imageUrl);
                     response += string.Format(DIDL_IMAGE_RES, imageUrl);
                 }
                 }
@@ -84,7 +84,7 @@ namespace MediaBrowser.Dlna.PlayTo
 
 
                 response += GetAudioDIDL(dto, streamUrl, streams);
                 response += GetAudioDIDL(dto, streamUrl, streams);
 
 
-                if (!string.IsNullOrEmpty(imageUrl))
+                if (includeImageRes && !string.IsNullOrWhiteSpace(imageUrl))
                 {
                 {
                     response += string.Format(DIDL_ALBUMIMAGE_RES, imageUrl);
                     response += string.Format(DIDL_ALBUMIMAGE_RES, imageUrl);
                 }
                 }

+ 6 - 1
MediaBrowser.Dlna/PlayTo/DlnaController.cs

@@ -435,7 +435,7 @@ namespace MediaBrowser.Dlna.PlayTo
                 playlistItem.StreamUrl = StreamHelper.GetVideoUrl(_device.Properties, playlistItem, streams, serverAddress);
                 playlistItem.StreamUrl = StreamHelper.GetVideoUrl(_device.Properties, playlistItem, streams, serverAddress);
             }
             }
 
 
-            playlistItem.Didl = DidlBuilder.Build(item, _session.UserId.ToString(), serverAddress, playlistItem.StreamUrl, streams);
+            playlistItem.Didl = DidlBuilder.Build(item, _session.UserId.ToString(), serverAddress, playlistItem.StreamUrl, streams, profile.EnableAlbumArtInDidl);
 
 
             return playlistItem;
             return playlistItem;
         }
         }
@@ -619,5 +619,10 @@ namespace MediaBrowser.Dlna.PlayTo
                 _logger.Log(LogSeverity.Debug, "Controller disposed");
                 _logger.Log(LogSeverity.Debug, "Controller disposed");
             }
             }
         }
         }
+
+        public Task SendGenericCommand(GenericCommand command, CancellationToken cancellationToken)
+        {
+            throw new NotImplementedException();
+        }
     }
     }
 }
 }

+ 6 - 6
MediaBrowser.Dlna/PlayTo/PlaylistItemFactory.cs

@@ -32,7 +32,7 @@ namespace MediaBrowser.Dlna.PlayTo
                 var audioCodec = audioStream == null ? null : audioStream.Codec;
                 var audioCodec = audioStream == null ? null : audioStream.Codec;
 
 
                 // Make sure audio codec profiles are satisfied
                 // Make sure audio codec profiles are satisfied
-                if (!string.IsNullOrEmpty(audioCodec) && profile.CodecProfiles.Where(i => i.Type == CodecType.AudioCodec && i.ContainsCodec(audioCodec))
+                if (!string.IsNullOrEmpty(audioCodec) && profile.CodecProfiles.Where(i => i.Type == CodecType.Audio && i.ContainsCodec(audioCodec))
                     .All(i => AreConditionsSatisfied(i.Conditions, item.Path, null, audioStream)))
                     .All(i => AreConditionsSatisfied(i.Conditions, item.Path, null, audioStream)))
                 {
                 {
                     playlistItem.Transcode = false;
                     playlistItem.Transcode = false;
@@ -53,7 +53,7 @@ namespace MediaBrowser.Dlna.PlayTo
                 playlistItem.AudioCodec = transcodingProfile.AudioCodec;
                 playlistItem.AudioCodec = transcodingProfile.AudioCodec;
 
 
                 var audioTranscodingConditions = profile.CodecProfiles
                 var audioTranscodingConditions = profile.CodecProfiles
-                    .Where(i => i.Type == CodecType.AudioCodec && i.ContainsCodec(transcodingProfile.AudioCodec))
+                    .Where(i => i.Type == CodecType.Audio && i.ContainsCodec(transcodingProfile.AudioCodec))
                     .Take(1)
                     .Take(1)
                     .SelectMany(i => i.Conditions);
                     .SelectMany(i => i.Conditions);
 
 
@@ -114,13 +114,13 @@ namespace MediaBrowser.Dlna.PlayTo
                 var videoCodec = videoStream == null ? null : videoStream.Codec;
                 var videoCodec = videoStream == null ? null : videoStream.Codec;
 
 
                 // Make sure video codec profiles are satisfied
                 // Make sure video codec profiles are satisfied
-                if (!string.IsNullOrEmpty(videoCodec) && profile.CodecProfiles.Where(i => i.Type == CodecType.VideoCodec && i.ContainsCodec(videoCodec))
+                if (!string.IsNullOrEmpty(videoCodec) && profile.CodecProfiles.Where(i => i.Type == CodecType.Video && i.ContainsCodec(videoCodec))
                     .All(i => AreConditionsSatisfied(i.Conditions, item.Path, videoStream, audioStream)))
                     .All(i => AreConditionsSatisfied(i.Conditions, item.Path, videoStream, audioStream)))
                 {
                 {
                     var audioCodec = audioStream == null ? null : audioStream.Codec;
                     var audioCodec = audioStream == null ? null : audioStream.Codec;
 
 
                     // Make sure audio codec profiles are satisfied
                     // Make sure audio codec profiles are satisfied
-                    if (string.IsNullOrEmpty(audioCodec) || profile.CodecProfiles.Where(i => i.Type == CodecType.VideoAudioCodec && i.ContainsCodec(audioCodec))
+                    if (string.IsNullOrEmpty(audioCodec) || profile.CodecProfiles.Where(i => i.Type == CodecType.VideoAudio && i.ContainsCodec(audioCodec))
                         .All(i => AreConditionsSatisfied(i.Conditions, item.Path, videoStream, audioStream)))
                         .All(i => AreConditionsSatisfied(i.Conditions, item.Path, videoStream, audioStream)))
                     {
                     {
                         playlistItem.Transcode = false;
                         playlistItem.Transcode = false;
@@ -143,14 +143,14 @@ namespace MediaBrowser.Dlna.PlayTo
                 playlistItem.VideoCodec = transcodingProfile.VideoCodec;
                 playlistItem.VideoCodec = transcodingProfile.VideoCodec;
 
 
                 var videoTranscodingConditions = profile.CodecProfiles
                 var videoTranscodingConditions = profile.CodecProfiles
-                    .Where(i => i.Type == CodecType.VideoCodec && i.ContainsCodec(transcodingProfile.VideoCodec))
+                    .Where(i => i.Type == CodecType.Video && i.ContainsCodec(transcodingProfile.VideoCodec))
                     .Take(1)
                     .Take(1)
                     .SelectMany(i => i.Conditions);
                     .SelectMany(i => i.Conditions);
 
 
                 ApplyTranscodingConditions(playlistItem, videoTranscodingConditions);
                 ApplyTranscodingConditions(playlistItem, videoTranscodingConditions);
 
 
                 var audioTranscodingConditions = profile.CodecProfiles
                 var audioTranscodingConditions = profile.CodecProfiles
-                    .Where(i => i.Type == CodecType.VideoAudioCodec && i.ContainsCodec(transcodingProfile.AudioCodec))
+                    .Where(i => i.Type == CodecType.VideoAudio && i.ContainsCodec(transcodingProfile.AudioCodec))
                     .Take(1)
                     .Take(1)
                     .SelectMany(i => i.Conditions);
                     .SelectMany(i => i.Conditions);
 
 

+ 3 - 3
MediaBrowser.Dlna/Profiles/LgTvProfile.cs

@@ -113,7 +113,7 @@ namespace MediaBrowser.Dlna.Profiles
            {
            {
                new CodecProfile
                new CodecProfile
                {
                {
-                   Type = CodecType.VideoCodec,
+                   Type = CodecType.Video,
                    Codec = "mpeg4",
                    Codec = "mpeg4",
 
 
                    Conditions = new[]
                    Conditions = new[]
@@ -141,7 +141,7 @@ namespace MediaBrowser.Dlna.Profiles
 
 
                new CodecProfile
                new CodecProfile
                {
                {
-                   Type = CodecType.VideoCodec,
+                   Type = CodecType.Video,
                    Codec = "h264",
                    Codec = "h264",
 
 
                    Conditions = new[]
                    Conditions = new[]
@@ -175,7 +175,7 @@ namespace MediaBrowser.Dlna.Profiles
 
 
                new CodecProfile
                new CodecProfile
                {
                {
-                   Type = CodecType.VideoAudioCodec,
+                   Type = CodecType.VideoAudio,
                    Codec = "ac3,aac,mp3",
                    Codec = "ac3,aac,mp3",
 
 
                    Conditions = new[]
                    Conditions = new[]

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

@@ -157,7 +157,7 @@ namespace MediaBrowser.Dlna.Profiles
            {
            {
                new CodecProfile
                new CodecProfile
                {
                {
-                   Type = CodecType.VideoCodec,
+                   Type = CodecType.Video,
 
 
                    Conditions = new[]
                    Conditions = new[]
                    {
                    {

+ 5 - 5
MediaBrowser.Dlna/Profiles/SamsungSmartTvProfile.cs

@@ -145,7 +145,7 @@ namespace MediaBrowser.Dlna.Profiles
            {
            {
                new CodecProfile
                new CodecProfile
                {
                {
-                   Type = CodecType.VideoCodec,
+                   Type = CodecType.Video,
                    Codec = "mpeg2video",
                    Codec = "mpeg2video",
 
 
                    Conditions = new[]
                    Conditions = new[]
@@ -179,7 +179,7 @@ namespace MediaBrowser.Dlna.Profiles
 
 
                new CodecProfile
                new CodecProfile
                {
                {
-                   Type = CodecType.VideoCodec,
+                   Type = CodecType.Video,
                    Codec = "mpeg4",
                    Codec = "mpeg4",
 
 
                    Conditions = new[]
                    Conditions = new[]
@@ -213,7 +213,7 @@ namespace MediaBrowser.Dlna.Profiles
 
 
                new CodecProfile
                new CodecProfile
                {
                {
-                   Type = CodecType.VideoCodec,
+                   Type = CodecType.Video,
                    Codec = "h264",
                    Codec = "h264",
 
 
                    Conditions = new[]
                    Conditions = new[]
@@ -253,7 +253,7 @@ namespace MediaBrowser.Dlna.Profiles
 
 
                new CodecProfile
                new CodecProfile
                {
                {
-                   Type = CodecType.VideoCodec,
+                   Type = CodecType.Video,
                    Codec = "wmv2,wmv3,vc1",
                    Codec = "wmv2,wmv3,vc1",
 
 
                    Conditions = new[]
                    Conditions = new[]
@@ -287,7 +287,7 @@ namespace MediaBrowser.Dlna.Profiles
 
 
                new CodecProfile
                new CodecProfile
                {
                {
-                   Type = CodecType.VideoAudioCodec,
+                   Type = CodecType.VideoAudio,
                    Codec = "ac3,wmav2,dca,aac,mp3",
                    Codec = "ac3,wmav2,dca,aac,mp3",
 
 
                    Conditions = new[]
                    Conditions = new[]

+ 2 - 2
MediaBrowser.Dlna/Profiles/SonyBlurayPlayer2013Profile.cs

@@ -113,7 +113,7 @@ namespace MediaBrowser.Dlna.Profiles
             {
             {
                 new CodecProfile
                 new CodecProfile
                 {
                 {
-                    Type = CodecType.VideoCodec,
+                    Type = CodecType.Video,
                     Codec = "h264",
                     Codec = "h264",
                     Conditions = new []
                     Conditions = new []
                     {
                     {
@@ -141,7 +141,7 @@ namespace MediaBrowser.Dlna.Profiles
 
 
                 new CodecProfile
                 new CodecProfile
                 {
                 {
-                    Type = CodecType.VideoAudioCodec,
+                    Type = CodecType.VideoAudio,
                     Codec = "ac3",
                     Codec = "ac3",
                     Conditions = new []
                     Conditions = new []
                     {
                     {

+ 3 - 3
MediaBrowser.Dlna/Profiles/SonyBlurayPlayerProfile.cs

@@ -109,7 +109,7 @@ namespace MediaBrowser.Dlna.Profiles
             {
             {
                 new CodecProfile
                 new CodecProfile
                 {
                 {
-                    Type = CodecType.VideoCodec,
+                    Type = CodecType.Video,
                     Codec = "h264",
                     Codec = "h264",
                     Conditions = new []
                     Conditions = new []
                     {
                     {
@@ -151,7 +151,7 @@ namespace MediaBrowser.Dlna.Profiles
 
 
                 new CodecProfile
                 new CodecProfile
                 {
                 {
-                    Type = CodecType.VideoAudioCodec,
+                    Type = CodecType.VideoAudio,
                     Codec = "ac3",
                     Codec = "ac3",
                     Conditions = new []
                     Conditions = new []
                     {
                     {
@@ -167,7 +167,7 @@ namespace MediaBrowser.Dlna.Profiles
 
 
                 new CodecProfile
                 new CodecProfile
                 {
                 {
-                    Type = CodecType.VideoAudioCodec,
+                    Type = CodecType.VideoAudio,
                     Codec = "aac",
                     Codec = "aac",
                     Conditions = new []
                     Conditions = new []
                     {
                     {

+ 5 - 5
MediaBrowser.Dlna/Profiles/SonyBravia2010Profile.cs

@@ -168,7 +168,7 @@ namespace MediaBrowser.Dlna.Profiles
             {
             {
                 new CodecProfile
                 new CodecProfile
                 {
                 {
-                    Type = CodecType.VideoCodec,
+                    Type = CodecType.Video,
                     Conditions = new []
                     Conditions = new []
                     {
                     {
                         new ProfileCondition
                         new ProfileCondition
@@ -188,7 +188,7 @@ namespace MediaBrowser.Dlna.Profiles
 
 
                 new CodecProfile
                 new CodecProfile
                 {
                 {
-                    Type = CodecType.VideoCodec,
+                    Type = CodecType.Video,
                     Codec = "h264",
                     Codec = "h264",
                     Conditions = new []
                     Conditions = new []
                     {
                     {
@@ -215,7 +215,7 @@ namespace MediaBrowser.Dlna.Profiles
 
 
                 new CodecProfile
                 new CodecProfile
                 {
                 {
-                    Type = CodecType.VideoCodec,
+                    Type = CodecType.Video,
                     Codec = "mpeg2video",
                     Codec = "mpeg2video",
                     Conditions = new []
                     Conditions = new []
                     {
                     {
@@ -236,7 +236,7 @@ namespace MediaBrowser.Dlna.Profiles
 
 
                 new CodecProfile
                 new CodecProfile
                 {
                 {
-                    Type = CodecType.VideoAudioCodec,
+                    Type = CodecType.VideoAudio,
                     Codec = "ac3",
                     Codec = "ac3",
 
 
                     Conditions = new []
                     Conditions = new []
@@ -252,7 +252,7 @@ namespace MediaBrowser.Dlna.Profiles
 
 
                 new CodecProfile
                 new CodecProfile
                 {
                 {
-                    Type = CodecType.VideoAudioCodec,
+                    Type = CodecType.VideoAudio,
                     Codec = "aac",
                     Codec = "aac",
 
 
                     Conditions = new []
                     Conditions = new []

+ 5 - 5
MediaBrowser.Dlna/Profiles/SonyBravia2011Profile.cs

@@ -186,7 +186,7 @@ namespace MediaBrowser.Dlna.Profiles
             {
             {
                 new CodecProfile
                 new CodecProfile
                 {
                 {
-                    Type = CodecType.VideoCodec,
+                    Type = CodecType.Video,
                     Conditions = new []
                     Conditions = new []
                     {
                     {
                         new ProfileCondition
                         new ProfileCondition
@@ -206,7 +206,7 @@ namespace MediaBrowser.Dlna.Profiles
 
 
                 new CodecProfile
                 new CodecProfile
                 {
                 {
-                    Type = CodecType.VideoCodec,
+                    Type = CodecType.Video,
                     Codec = "h264",
                     Codec = "h264",
                     Conditions = new []
                     Conditions = new []
                     {
                     {
@@ -233,7 +233,7 @@ namespace MediaBrowser.Dlna.Profiles
 
 
                 new CodecProfile
                 new CodecProfile
                 {
                 {
-                    Type = CodecType.VideoCodec,
+                    Type = CodecType.Video,
                     Codec = "mpeg2video",
                     Codec = "mpeg2video",
                     Conditions = new []
                     Conditions = new []
                     {
                     {
@@ -254,7 +254,7 @@ namespace MediaBrowser.Dlna.Profiles
 
 
                 new CodecProfile
                 new CodecProfile
                 {
                 {
-                    Type = CodecType.VideoAudioCodec,
+                    Type = CodecType.VideoAudio,
                     Codec = "ac3",
                     Codec = "ac3",
 
 
                     Conditions = new []
                     Conditions = new []
@@ -270,7 +270,7 @@ namespace MediaBrowser.Dlna.Profiles
 
 
                 new CodecProfile
                 new CodecProfile
                 {
                 {
-                    Type = CodecType.VideoAudioCodec,
+                    Type = CodecType.VideoAudio,
                     Codec = "aac",
                     Codec = "aac",
 
 
                     Conditions = new[]
                     Conditions = new[]

+ 2 - 2
MediaBrowser.Dlna/Profiles/SonyBravia2012Profile.cs

@@ -198,7 +198,7 @@ namespace MediaBrowser.Dlna.Profiles
             {
             {
                 new CodecProfile
                 new CodecProfile
                 {
                 {
-                    Type = CodecType.VideoCodec,
+                    Type = CodecType.Video,
                     Conditions = new[]
                     Conditions = new[]
                     {
                     {
                         new ProfileCondition
                         new ProfileCondition
@@ -218,7 +218,7 @@ namespace MediaBrowser.Dlna.Profiles
 
 
                 new CodecProfile
                 new CodecProfile
                 {
                 {
-                    Type = CodecType.VideoAudioCodec,
+                    Type = CodecType.VideoAudio,
                     Codec = "ac3",
                     Codec = "ac3",
 
 
                     Conditions = new[]
                     Conditions = new[]

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

@@ -231,7 +231,7 @@ namespace MediaBrowser.Dlna.Profiles
             {
             {
                 new CodecProfile
                 new CodecProfile
                 {
                 {
-                    Type = CodecType.VideoCodec,
+                    Type = CodecType.Video,
 
 
                     Conditions = new []
                     Conditions = new []
                     {
                     {

+ 5 - 5
MediaBrowser.Dlna/Profiles/SonyPs3Profile.cs

@@ -85,7 +85,7 @@ namespace MediaBrowser.Dlna.Profiles
             {
             {
                 new CodecProfile
                 new CodecProfile
                 {
                 {
-                    Type = CodecType.VideoCodec,
+                    Type = CodecType.Video,
                     Codec = "h264",
                     Codec = "h264",
 
 
                     Conditions = new []
                     Conditions = new []
@@ -128,7 +128,7 @@ namespace MediaBrowser.Dlna.Profiles
 
 
                 new CodecProfile
                 new CodecProfile
                 {
                 {
-                    Type = CodecType.VideoAudioCodec,
+                    Type = CodecType.VideoAudio,
                     Codec = "ac3",
                     Codec = "ac3",
 
 
                     Conditions = new []
                     Conditions = new []
@@ -153,7 +153,7 @@ namespace MediaBrowser.Dlna.Profiles
 
 
                 new CodecProfile
                 new CodecProfile
                 {
                 {
-                    Type = CodecType.VideoAudioCodec,
+                    Type = CodecType.VideoAudio,
                     Codec = "wmapro",
                     Codec = "wmapro",
 
 
                     Conditions = new []
                     Conditions = new []
@@ -169,7 +169,7 @@ namespace MediaBrowser.Dlna.Profiles
 
 
                 new CodecProfile
                 new CodecProfile
                 {
                 {
-                    Type = CodecType.VideoAudioCodec,
+                    Type = CodecType.VideoAudio,
                     Codec = "aac",
                     Codec = "aac",
 
 
                     Conditions = new []
                     Conditions = new []
@@ -186,7 +186,7 @@ namespace MediaBrowser.Dlna.Profiles
 
 
                 new CodecProfile
                 new CodecProfile
                 {
                 {
-                    Type = CodecType.VideoAudioCodec,
+                    Type = CodecType.VideoAudio,
                     Codec = "aac",
                     Codec = "aac",
 
 
                     Conditions = new []
                     Conditions = new []

+ 2 - 2
MediaBrowser.Dlna/Profiles/WdtvLiveProfile.cs

@@ -195,7 +195,7 @@ namespace MediaBrowser.Dlna.Profiles
             {
             {
                 new CodecProfile
                 new CodecProfile
                 {
                 {
-                    Type = CodecType.VideoCodec,
+                    Type = CodecType.Video,
                     Codec = "h264",
                     Codec = "h264",
 
 
                     Conditions = new []
                     Conditions = new []
@@ -223,7 +223,7 @@ namespace MediaBrowser.Dlna.Profiles
 
 
                 new CodecProfile
                 new CodecProfile
                 {
                 {
-                    Type = CodecType.VideoAudioCodec,
+                    Type = CodecType.VideoAudio,
                     Codec = "aac",
                     Codec = "aac",
 
 
                     Conditions = new []
                     Conditions = new []

+ 5 - 5
MediaBrowser.Dlna/Profiles/Xbox360Profile.cs

@@ -165,7 +165,7 @@ namespace MediaBrowser.Dlna.Profiles
             {
             {
                 new CodecProfile
                 new CodecProfile
                 {
                 {
-                    Type = CodecType.VideoCodec,
+                    Type = CodecType.Video,
                     Codec = "mpeg4",
                     Codec = "mpeg4",
                     Conditions = new []
                     Conditions = new []
                     {
                     {
@@ -200,7 +200,7 @@ namespace MediaBrowser.Dlna.Profiles
 
 
                 new CodecProfile
                 new CodecProfile
                 {
                 {
-                    Type = CodecType.VideoCodec,
+                    Type = CodecType.Video,
                     Codec = "h264",
                     Codec = "h264",
                     Conditions = new []
                     Conditions = new []
                     {
                     {
@@ -235,7 +235,7 @@ namespace MediaBrowser.Dlna.Profiles
 
 
                 new CodecProfile
                 new CodecProfile
                 {
                 {
-                    Type = CodecType.VideoCodec,
+                    Type = CodecType.Video,
                     Codec = "wmv2,wmv3,vc1",
                     Codec = "wmv2,wmv3,vc1",
                     Conditions = new []
                     Conditions = new []
                     {
                     {
@@ -270,7 +270,7 @@ namespace MediaBrowser.Dlna.Profiles
 
 
                 new CodecProfile
                 new CodecProfile
                 {
                 {
-                    Type = CodecType.VideoAudioCodec,
+                    Type = CodecType.VideoAudio,
                     Codec = "ac3,wmav2,wmapro",
                     Codec = "ac3,wmav2,wmapro",
                     Conditions = new []
                     Conditions = new []
                     {
                     {
@@ -286,7 +286,7 @@ namespace MediaBrowser.Dlna.Profiles
 
 
                 new CodecProfile
                 new CodecProfile
                 {
                 {
-                    Type = CodecType.VideoAudioCodec,
+                    Type = CodecType.VideoAudio,
                     Codec = "aac",
                     Codec = "aac",
                     Conditions = new []
                     Conditions = new []
                     {
                     {

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

@@ -30,5 +30,6 @@
     </TranscodingProfile>
     </TranscodingProfile>
   </TranscodingProfiles>
   </TranscodingProfiles>
   <ContainerProfiles />
   <ContainerProfiles />
+  <CodecProfiles />
   <MediaProfiles />
   <MediaProfiles />
 </Profile>
 </Profile>

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

@@ -34,5 +34,6 @@
     </TranscodingProfile>
     </TranscodingProfile>
   </TranscodingProfiles>
   </TranscodingProfiles>
   <ContainerProfiles />
   <ContainerProfiles />
+  <CodecProfiles />
   <MediaProfiles />
   <MediaProfiles />
 </Profile>
 </Profile>

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

@@ -48,14 +48,14 @@
     </ContainerProfile>
     </ContainerProfile>
   </ContainerProfiles>
   </ContainerProfiles>
   <CodecProfiles>
   <CodecProfiles>
-    <CodecProfile type="VideoCodec" codec="mpeg4">
+    <CodecProfile type="Video" codec="mpeg4">
       <Conditions>
       <Conditions>
         <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="VideoFramerate" value="30" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="VideoFramerate" value="30" isRequired="true" />
       </Conditions>
       </Conditions>
     </CodecProfile>
     </CodecProfile>
-    <CodecProfile type="VideoCodec" codec="h264">
+    <CodecProfile type="Video" codec="h264">
       <Conditions>
       <Conditions>
         <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
@@ -63,7 +63,7 @@
         <ProfileCondition condition="LessThanEqual" property="VideoLevel" value="41" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="VideoLevel" value="41" isRequired="true" />
       </Conditions>
       </Conditions>
     </CodecProfile>
     </CodecProfile>
-    <CodecProfile type="VideoAudioCodec" codec="ac3,aac,mp3">
+    <CodecProfile type="VideoAudio" codec="ac3,aac,mp3">
       <Conditions>
       <Conditions>
         <ProfileCondition condition="LessThanEqual" property="AudioChannels" value="6" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="AudioChannels" value="6" isRequired="true" />
       </Conditions>
       </Conditions>

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

@@ -34,5 +34,6 @@
     </TranscodingProfile>
     </TranscodingProfile>
   </TranscodingProfiles>
   </TranscodingProfiles>
   <ContainerProfiles />
   <ContainerProfiles />
+  <CodecProfiles />
   <MediaProfiles />
   <MediaProfiles />
 </Profile>
 </Profile>

+ 1 - 1
MediaBrowser.Dlna/Profiles/Xml/Panasonic Viera.xml

@@ -54,7 +54,7 @@
     </ContainerProfile>
     </ContainerProfile>
   </ContainerProfiles>
   </ContainerProfiles>
   <CodecProfiles>
   <CodecProfiles>
-    <CodecProfile type="VideoCodec">
+    <CodecProfile type="Video">
       <Conditions>
       <Conditions>
         <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />

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

@@ -52,7 +52,7 @@
     </ContainerProfile>
     </ContainerProfile>
   </ContainerProfiles>
   </ContainerProfiles>
   <CodecProfiles>
   <CodecProfiles>
-    <CodecProfile type="VideoCodec" codec="mpeg2video">
+    <CodecProfile type="Video" codec="mpeg2video">
       <Conditions>
       <Conditions>
         <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
@@ -60,7 +60,7 @@
         <ProfileCondition condition="LessThanEqual" property="VideoBitrate" value="30720000" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="VideoBitrate" value="30720000" isRequired="true" />
       </Conditions>
       </Conditions>
     </CodecProfile>
     </CodecProfile>
-    <CodecProfile type="VideoCodec" codec="mpeg4">
+    <CodecProfile type="Video" codec="mpeg4">
       <Conditions>
       <Conditions>
         <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
@@ -68,7 +68,7 @@
         <ProfileCondition condition="LessThanEqual" property="VideoBitrate" value="8192000" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="VideoBitrate" value="8192000" isRequired="true" />
       </Conditions>
       </Conditions>
     </CodecProfile>
     </CodecProfile>
-    <CodecProfile type="VideoCodec" codec="h264">
+    <CodecProfile type="Video" codec="h264">
       <Conditions>
       <Conditions>
         <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
@@ -77,7 +77,7 @@
         <ProfileCondition condition="LessThanEqual" property="VideoLevel" value="41" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="VideoLevel" value="41" isRequired="true" />
       </Conditions>
       </Conditions>
     </CodecProfile>
     </CodecProfile>
-    <CodecProfile type="VideoCodec" codec="wmv2,wmv3,vc1">
+    <CodecProfile type="Video" codec="wmv2,wmv3,vc1">
       <Conditions>
       <Conditions>
         <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
@@ -85,7 +85,7 @@
         <ProfileCondition condition="LessThanEqual" property="VideoBitrate" value="25600000" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="VideoBitrate" value="25600000" isRequired="true" />
       </Conditions>
       </Conditions>
     </CodecProfile>
     </CodecProfile>
-    <CodecProfile type="VideoAudioCodec" codec="ac3,wmav2,dca,aac,mp3">
+    <CodecProfile type="VideoAudio" codec="ac3,wmav2,dca,aac,mp3">
       <Conditions>
       <Conditions>
         <ProfileCondition condition="LessThanEqual" property="AudioChannels" value="6" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="AudioChannels" value="6" isRequired="true" />
       </Conditions>
       </Conditions>

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

@@ -52,14 +52,14 @@
     </ContainerProfile>
     </ContainerProfile>
   </ContainerProfiles>
   </ContainerProfiles>
   <CodecProfiles>
   <CodecProfiles>
-    <CodecProfile type="VideoCodec" codec="h264">
+    <CodecProfile type="Video" codec="h264">
       <Conditions>
       <Conditions>
         <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="VideoFramerate" value="30" isRequired="false" />
         <ProfileCondition condition="LessThanEqual" property="VideoFramerate" value="30" isRequired="false" />
       </Conditions>
       </Conditions>
     </CodecProfile>
     </CodecProfile>
-    <CodecProfile type="VideoAudioCodec" codec="ac3">
+    <CodecProfile type="VideoAudio" codec="ac3">
       <Conditions>
       <Conditions>
         <ProfileCondition condition="LessThanEqual" property="AudioChannels" value="6" isRequired="false" />
         <ProfileCondition condition="LessThanEqual" property="AudioChannels" value="6" isRequired="false" />
       </Conditions>
       </Conditions>

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

@@ -51,7 +51,7 @@
     </ContainerProfile>
     </ContainerProfile>
   </ContainerProfiles>
   </ContainerProfiles>
   <CodecProfiles>
   <CodecProfiles>
-    <CodecProfile type="VideoCodec" codec="h264">
+    <CodecProfile type="Video" codec="h264">
       <Conditions>
       <Conditions>
         <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
@@ -60,12 +60,12 @@
         <ProfileCondition condition="LessThanEqual" property="VideoBitrate" value="15360000" isRequired="false" />
         <ProfileCondition condition="LessThanEqual" property="VideoBitrate" value="15360000" isRequired="false" />
       </Conditions>
       </Conditions>
     </CodecProfile>
     </CodecProfile>
-    <CodecProfile type="VideoAudioCodec" codec="ac3">
+    <CodecProfile type="VideoAudio" codec="ac3">
       <Conditions>
       <Conditions>
         <ProfileCondition condition="LessThanEqual" property="AudioChannels" value="6" isRequired="false" />
         <ProfileCondition condition="LessThanEqual" property="AudioChannels" value="6" isRequired="false" />
       </Conditions>
       </Conditions>
     </CodecProfile>
     </CodecProfile>
-    <CodecProfile type="VideoAudioCodec" codec="aac">
+    <CodecProfile type="VideoAudio" codec="aac">
       <Conditions>
       <Conditions>
         <ProfileCondition condition="LessThanEqual" property="AudioChannels" value="2" isRequired="false" />
         <ProfileCondition condition="LessThanEqual" property="AudioChannels" value="2" isRequired="false" />
       </Conditions>
       </Conditions>

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

@@ -49,31 +49,31 @@
     </ContainerProfile>
     </ContainerProfile>
   </ContainerProfiles>
   </ContainerProfiles>
   <CodecProfiles>
   <CodecProfiles>
-    <CodecProfile type="VideoCodec">
+    <CodecProfile type="Video">
       <Conditions>
       <Conditions>
         <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
       </Conditions>
       </Conditions>
     </CodecProfile>
     </CodecProfile>
-    <CodecProfile type="VideoCodec" codec="h264">
+    <CodecProfile type="Video" codec="h264">
       <Conditions>
       <Conditions>
         <ProfileCondition condition="LessThanEqual" property="VideoFramerate" value="30" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="VideoFramerate" value="30" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="VideoBitrate" value="20000000" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="VideoBitrate" value="20000000" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="VideoLevel" value="41" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="VideoLevel" value="41" isRequired="true" />
       </Conditions>
       </Conditions>
     </CodecProfile>
     </CodecProfile>
-    <CodecProfile type="VideoCodec" codec="mpeg2video">
+    <CodecProfile type="Video" codec="mpeg2video">
       <Conditions>
       <Conditions>
         <ProfileCondition condition="LessThanEqual" property="VideoFramerate" value="30" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="VideoFramerate" value="30" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="VideoBitrate" value="20000000" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="VideoBitrate" value="20000000" isRequired="true" />
       </Conditions>
       </Conditions>
     </CodecProfile>
     </CodecProfile>
-    <CodecProfile type="VideoAudioCodec" codec="ac3">
+    <CodecProfile type="VideoAudio" codec="ac3">
       <Conditions>
       <Conditions>
         <ProfileCondition condition="LessThanEqual" property="AudioChannels" value="6" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="AudioChannels" value="6" isRequired="true" />
       </Conditions>
       </Conditions>
     </CodecProfile>
     </CodecProfile>
-    <CodecProfile type="VideoAudioCodec" codec="aac">
+    <CodecProfile type="VideoAudio" codec="aac">
       <Conditions>
       <Conditions>
         <ProfileCondition condition="LessThanEqual" property="AudioChannels" value="2" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="AudioChannels" value="2" isRequired="true" />
         <ProfileCondition condition="NotEquals" property="AudioProfile" value="he-aac" isRequired="true" />
         <ProfileCondition condition="NotEquals" property="AudioProfile" value="he-aac" isRequired="true" />

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

@@ -52,31 +52,31 @@
     </ContainerProfile>
     </ContainerProfile>
   </ContainerProfiles>
   </ContainerProfiles>
   <CodecProfiles>
   <CodecProfiles>
-    <CodecProfile type="VideoCodec">
+    <CodecProfile type="Video">
       <Conditions>
       <Conditions>
         <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
       </Conditions>
       </Conditions>
     </CodecProfile>
     </CodecProfile>
-    <CodecProfile type="VideoCodec" codec="h264">
+    <CodecProfile type="Video" codec="h264">
       <Conditions>
       <Conditions>
         <ProfileCondition condition="LessThanEqual" property="VideoFramerate" value="30" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="VideoFramerate" value="30" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="VideoBitrate" value="20000000" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="VideoBitrate" value="20000000" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="VideoLevel" value="41" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="VideoLevel" value="41" isRequired="true" />
       </Conditions>
       </Conditions>
     </CodecProfile>
     </CodecProfile>
-    <CodecProfile type="VideoCodec" codec="mpeg2video">
+    <CodecProfile type="Video" codec="mpeg2video">
       <Conditions>
       <Conditions>
         <ProfileCondition condition="LessThanEqual" property="VideoFramerate" value="30" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="VideoFramerate" value="30" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="VideoBitrate" value="20000000" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="VideoBitrate" value="20000000" isRequired="true" />
       </Conditions>
       </Conditions>
     </CodecProfile>
     </CodecProfile>
-    <CodecProfile type="VideoAudioCodec" codec="ac3">
+    <CodecProfile type="VideoAudio" codec="ac3">
       <Conditions>
       <Conditions>
         <ProfileCondition condition="LessThanEqual" property="AudioChannels" value="6" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="AudioChannels" value="6" isRequired="true" />
       </Conditions>
       </Conditions>
     </CodecProfile>
     </CodecProfile>
-    <CodecProfile type="VideoAudioCodec" codec="aac">
+    <CodecProfile type="VideoAudio" codec="aac">
       <Conditions>
       <Conditions>
         <ProfileCondition condition="LessThanEqual" property="AudioChannels" value="2" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="AudioChannels" value="2" isRequired="true" />
         <ProfileCondition condition="NotEquals" property="AudioProfile" value="he-aac" isRequired="true" />
         <ProfileCondition condition="NotEquals" property="AudioProfile" value="he-aac" isRequired="true" />

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

@@ -54,13 +54,13 @@
     </ContainerProfile>
     </ContainerProfile>
   </ContainerProfiles>
   </ContainerProfiles>
   <CodecProfiles>
   <CodecProfiles>
-    <CodecProfile type="VideoCodec">
+    <CodecProfile type="Video">
       <Conditions>
       <Conditions>
         <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
       </Conditions>
       </Conditions>
     </CodecProfile>
     </CodecProfile>
-    <CodecProfile type="VideoAudioCodec" codec="ac3">
+    <CodecProfile type="VideoAudio" codec="ac3">
       <Conditions>
       <Conditions>
         <ProfileCondition condition="LessThanEqual" property="AudioChannels" value="6" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="AudioChannels" value="6" isRequired="true" />
       </Conditions>
       </Conditions>

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

@@ -59,7 +59,7 @@
     </ContainerProfile>
     </ContainerProfile>
   </ContainerProfiles>
   </ContainerProfiles>
   <CodecProfiles>
   <CodecProfiles>
-    <CodecProfile type="VideoCodec">
+    <CodecProfile type="Video">
       <Conditions>
       <Conditions>
         <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />

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

@@ -48,7 +48,7 @@
     </ContainerProfile>
     </ContainerProfile>
   </ContainerProfiles>
   </ContainerProfiles>
   <CodecProfiles>
   <CodecProfiles>
-    <CodecProfile type="VideoCodec" codec="h264">
+    <CodecProfile type="Video" codec="h264">
       <Conditions>
       <Conditions>
         <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
@@ -57,23 +57,23 @@
         <ProfileCondition condition="LessThanEqual" property="VideoLevel" value="41" isRequired="false" />
         <ProfileCondition condition="LessThanEqual" property="VideoLevel" value="41" isRequired="false" />
       </Conditions>
       </Conditions>
     </CodecProfile>
     </CodecProfile>
-    <CodecProfile type="VideoAudioCodec" codec="ac3">
+    <CodecProfile type="VideoAudio" codec="ac3">
       <Conditions>
       <Conditions>
         <ProfileCondition condition="LessThanEqual" property="AudioChannels" value="6" isRequired="false" />
         <ProfileCondition condition="LessThanEqual" property="AudioChannels" value="6" isRequired="false" />
         <ProfileCondition condition="LessThanEqual" property="AudioBitrate" value="640000" isRequired="false" />
         <ProfileCondition condition="LessThanEqual" property="AudioBitrate" value="640000" isRequired="false" />
       </Conditions>
       </Conditions>
     </CodecProfile>
     </CodecProfile>
-    <CodecProfile type="VideoAudioCodec" codec="wmapro">
+    <CodecProfile type="VideoAudio" codec="wmapro">
       <Conditions>
       <Conditions>
         <ProfileCondition condition="LessThanEqual" property="AudioChannels" value="2" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="AudioChannels" value="2" isRequired="true" />
       </Conditions>
       </Conditions>
     </CodecProfile>
     </CodecProfile>
-    <CodecProfile type="VideoAudioCodec" codec="aac">
+    <CodecProfile type="VideoAudio" codec="aac">
       <Conditions>
       <Conditions>
         <ProfileCondition condition="NotEquals" property="AudioProfile" value="he-aac" isRequired="false" />
         <ProfileCondition condition="NotEquals" property="AudioProfile" value="he-aac" isRequired="false" />
       </Conditions>
       </Conditions>
     </CodecProfile>
     </CodecProfile>
-    <CodecProfile type="VideoAudioCodec" codec="aac">
+    <CodecProfile type="VideoAudio" codec="aac">
       <Conditions>
       <Conditions>
         <ProfileCondition condition="LessThanEqual" property="AudioChannels" value="2" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="AudioChannels" value="2" isRequired="true" />
         <ProfileCondition condition="NotEquals" property="AudioProfile" value="he-aac" isRequired="true" />
         <ProfileCondition condition="NotEquals" property="AudioProfile" value="he-aac" isRequired="true" />

+ 2 - 2
MediaBrowser.Dlna/Profiles/Xml/WDTV Live.xml

@@ -59,14 +59,14 @@
     </ContainerProfile>
     </ContainerProfile>
   </ContainerProfiles>
   </ContainerProfiles>
   <CodecProfiles>
   <CodecProfiles>
-    <CodecProfile type="VideoCodec" codec="h264">
+    <CodecProfile type="Video" codec="h264">
       <Conditions>
       <Conditions>
         <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="VideoLevel" value="41" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="VideoLevel" value="41" isRequired="true" />
       </Conditions>
       </Conditions>
     </CodecProfile>
     </CodecProfile>
-    <CodecProfile type="VideoAudioCodec" codec="aac">
+    <CodecProfile type="VideoAudio" codec="aac">
       <Conditions>
       <Conditions>
         <ProfileCondition condition="LessThanEqual" property="AudioChannels" value="2" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="AudioChannels" value="2" isRequired="true" />
       </Conditions>
       </Conditions>

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

@@ -59,7 +59,7 @@
     </ContainerProfile>
     </ContainerProfile>
   </ContainerProfiles>
   </ContainerProfiles>
   <CodecProfiles>
   <CodecProfiles>
-    <CodecProfile type="VideoCodec" codec="mpeg4">
+    <CodecProfile type="Video" codec="mpeg4">
       <Conditions>
       <Conditions>
         <ProfileCondition condition="LessThanEqual" property="Width" value="1280" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="Width" value="1280" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="Height" value="720" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="Height" value="720" isRequired="true" />
@@ -67,7 +67,7 @@
         <ProfileCondition condition="LessThanEqual" property="VideoBitrate" value="5120000" isRequired="false" />
         <ProfileCondition condition="LessThanEqual" property="VideoBitrate" value="5120000" isRequired="false" />
       </Conditions>
       </Conditions>
     </CodecProfile>
     </CodecProfile>
-    <CodecProfile type="VideoCodec" codec="h264">
+    <CodecProfile type="Video" codec="h264">
       <Conditions>
       <Conditions>
         <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
@@ -75,7 +75,7 @@
         <ProfileCondition condition="LessThanEqual" property="VideoBitrate" value="10240000" isRequired="false" />
         <ProfileCondition condition="LessThanEqual" property="VideoBitrate" value="10240000" isRequired="false" />
       </Conditions>
       </Conditions>
     </CodecProfile>
     </CodecProfile>
-    <CodecProfile type="VideoCodec" codec="wmv2,wmv3,vc1">
+    <CodecProfile type="Video" codec="wmv2,wmv3,vc1">
       <Conditions>
       <Conditions>
         <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="Width" value="1920" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
         <ProfileCondition condition="LessThanEqual" property="Height" value="1080" isRequired="true" />
@@ -83,12 +83,12 @@
         <ProfileCondition condition="LessThanEqual" property="VideoBitrate" value="15360000" isRequired="false" />
         <ProfileCondition condition="LessThanEqual" property="VideoBitrate" value="15360000" isRequired="false" />
       </Conditions>
       </Conditions>
     </CodecProfile>
     </CodecProfile>
-    <CodecProfile type="VideoAudioCodec" codec="ac3,wmav2,wmapro">
+    <CodecProfile type="VideoAudio" codec="ac3,wmav2,wmapro">
       <Conditions>
       <Conditions>
         <ProfileCondition condition="LessThanEqual" property="AudioChannels" value="6" isRequired="false" />
         <ProfileCondition condition="LessThanEqual" property="AudioChannels" value="6" isRequired="false" />
       </Conditions>
       </Conditions>
     </CodecProfile>
     </CodecProfile>
-    <CodecProfile type="VideoAudioCodec" codec="aac">
+    <CodecProfile type="VideoAudio" codec="aac">
       <Conditions>
       <Conditions>
         <ProfileCondition condition="LessThanEqual" property="AudioChannels" value="2" isRequired="false" />
         <ProfileCondition condition="LessThanEqual" property="AudioChannels" value="2" isRequired="false" />
         <ProfileCondition condition="Equals" property="AudioProfile" value="lc" isRequired="false" />
         <ProfileCondition condition="Equals" property="AudioProfile" value="lc" isRequired="false" />

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

@@ -32,6 +32,7 @@
     </TranscodingProfile>
     </TranscodingProfile>
   </TranscodingProfiles>
   </TranscodingProfiles>
   <ContainerProfiles />
   <ContainerProfiles />
+  <CodecProfiles />
   <MediaProfiles>
   <MediaProfiles>
     <MediaProfile container="avi" type="Video" mimeType="video/x-msvideo">
     <MediaProfile container="avi" type="Video" mimeType="video/x-msvideo">
       <Conditions />
       <Conditions />

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

@@ -36,5 +36,6 @@
     </TranscodingProfile>
     </TranscodingProfile>
   </TranscodingProfiles>
   </TranscodingProfiles>
   <ContainerProfiles />
   <ContainerProfiles />
+  <CodecProfiles />
   <MediaProfiles />
   <MediaProfiles />
 </Profile>
 </Profile>

+ 3 - 0
MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj

@@ -428,6 +428,9 @@
     <Compile Include="..\MediaBrowser.Model\Session\BrowseRequest.cs">
     <Compile Include="..\MediaBrowser.Model\Session\BrowseRequest.cs">
       <Link>Session\BrowseRequest.cs</Link>
       <Link>Session\BrowseRequest.cs</Link>
     </Compile>
     </Compile>
+    <Compile Include="..\MediaBrowser.Model\Session\GenericCommand.cs">
+      <Link>Session\GenericCommand.cs</Link>
+    </Compile>
     <Compile Include="..\MediaBrowser.Model\Session\MessageCommand.cs">
     <Compile Include="..\MediaBrowser.Model\Session\MessageCommand.cs">
       <Link>Session\MessageCommand.cs</Link>
       <Link>Session\MessageCommand.cs</Link>
     </Compile>
     </Compile>

+ 3 - 0
MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj

@@ -415,6 +415,9 @@
     <Compile Include="..\MediaBrowser.Model\Session\BrowseRequest.cs">
     <Compile Include="..\MediaBrowser.Model\Session\BrowseRequest.cs">
       <Link>Session\BrowseRequest.cs</Link>
       <Link>Session\BrowseRequest.cs</Link>
     </Compile>
     </Compile>
+    <Compile Include="..\MediaBrowser.Model\Session\GenericCommand.cs">
+      <Link>Session\GenericCommand.cs</Link>
+    </Compile>
     <Compile Include="..\MediaBrowser.Model\Session\MessageCommand.cs">
     <Compile Include="..\MediaBrowser.Model\Session\MessageCommand.cs">
       <Link>Session\MessageCommand.cs</Link>
       <Link>Session\MessageCommand.cs</Link>
     </Compile>
     </Compile>

+ 8 - 0
MediaBrowser.Model/ApiClient/IApiClient.cs

@@ -589,6 +589,14 @@ namespace MediaBrowser.Model.ApiClient
         /// request</exception>
         /// request</exception>
         Task SendPlayCommandAsync(string sessionId, PlayRequest request);
         Task SendPlayCommandAsync(string sessionId, PlayRequest request);
 
 
+        /// <summary>
+        /// Sends the command asynchronous.
+        /// </summary>
+        /// <param name="sessionId">The session identifier.</param>
+        /// <param name="request">The request.</param>
+        /// <returns>Task.</returns>
+        Task SendCommandAsync(string sessionId, GenericCommand request);
+        
         /// <summary>
         /// <summary>
         /// Sends a system command to the client
         /// Sends a system command to the client
         /// </summary>
         /// </summary>

+ 1 - 0
MediaBrowser.Model/MediaBrowser.Model.csproj

@@ -132,6 +132,7 @@
     <Compile Include="Querying\UserQuery.cs" />
     <Compile Include="Querying\UserQuery.cs" />
     <Compile Include="Search\SearchQuery.cs" />
     <Compile Include="Search\SearchQuery.cs" />
     <Compile Include="Session\BrowseRequest.cs" />
     <Compile Include="Session\BrowseRequest.cs" />
+    <Compile Include="Session\GenericCommand.cs" />
     <Compile Include="Session\MessageCommand.cs" />
     <Compile Include="Session\MessageCommand.cs" />
     <Compile Include="Session\PlaybackReports.cs" />
     <Compile Include="Session\PlaybackReports.cs" />
     <Compile Include="Session\PlayRequest.cs" />
     <Compile Include="Session\PlayRequest.cs" />

+ 48 - 0
MediaBrowser.Model/Session/GenericCommand.cs

@@ -0,0 +1,48 @@
+using System;
+using System.Collections.Generic;
+
+namespace MediaBrowser.Model.Session
+{
+    public class GenericCommand
+    {
+        public string Name { get; set; }
+
+        public string ControllingUserId { get; set; }
+
+        public Dictionary<string, string> Arguments { get; set; }
+
+        public GenericCommand()
+        {
+            Arguments = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
+        }
+    }
+
+    /// <summary>
+    /// This exists simply to identify a set of known commands.
+    /// </summary>
+    public enum CoreGenericCommand
+    {
+        MoveUp = 0,
+        MoveDown = 1,
+        MoveLeft = 2,
+        MoveRight = 3,
+        PageUp = 4,
+        PageDown = 5,
+        PreviousLetter = 6,
+        NextLetter = 7,
+        ToggleOsd = 8,
+        ToggleContextMenu = 9,
+        Select = 10,
+        Back = 11,
+        TakeScreenshot = 12,
+        SendKey = 13,
+        SendString = 14,
+        GoHome = 15,
+        GoToSettings = 16,
+        VolumeUp = 17,
+        VolumeDown = 18,
+        Mute = 19,
+        Unmute = 20,
+        ToggleMute = 21
+    }
+}

+ 9 - 1
MediaBrowser.Model/Session/PlaystateCommand.cs

@@ -33,7 +33,15 @@ namespace MediaBrowser.Model.Session
         /// <summary>
         /// <summary>
         /// The fullscreen
         /// The fullscreen
         /// </summary>
         /// </summary>
-        Fullscreen
+        Fullscreen,
+        /// <summary>
+        /// The rewind
+        /// </summary>
+        Rewind,
+        /// <summary>
+        /// The fast forward
+        /// </summary>
+        FastForward
     }
     }
 
 
     public class PlaystateRequest
     public class PlaystateRequest

+ 11 - 0
MediaBrowser.Server.Implementations/Roku/RokuSessionController.cs

@@ -146,5 +146,16 @@ namespace MediaBrowser.Server.Implementations.Roku
                 RequestContentType = "application/json"
                 RequestContentType = "application/json"
             });
             });
         }
         }
+
+
+        public Task SendGenericCommand(GenericCommand command, CancellationToken cancellationToken)
+        {
+            return SendCommand(new WebSocketMessage<GenericCommand>
+            {
+                MessageType = "Command",
+                Data = command
+
+            }, cancellationToken);
+        }
     }
     }
 }
 }

+ 12 - 0
MediaBrowser.Server.Implementations/Session/WebSocketController.cs

@@ -198,5 +198,17 @@ namespace MediaBrowser.Server.Implementations.Session
 
 
             }, cancellationToken);
             }, cancellationToken);
         }
         }
+
+        public Task SendGenericCommand(GenericCommand command, CancellationToken cancellationToken)
+        {
+            var socket = GetActiveSocket();
+
+            return socket.SendAsync(new WebSocketMessage<GenericCommand>
+            {
+                MessageType = "Command",
+                Data = command
+
+            }, cancellationToken);
+        }
     }
     }
 }
 }

+ 2 - 3
MediaBrowser.ServerApplication/MainStartup.cs

@@ -1,12 +1,11 @@
 using MediaBrowser.Common.Configuration;
 using MediaBrowser.Common.Configuration;
 using MediaBrowser.Common.Constants;
 using MediaBrowser.Common.Constants;
 using MediaBrowser.Common.Implementations.Logging;
 using MediaBrowser.Common.Implementations.Logging;
-using MediaBrowser.Common.Implementations.Updates;
-using MediaBrowser.Controller;
 using MediaBrowser.Model.Logging;
 using MediaBrowser.Model.Logging;
 using MediaBrowser.Server.Implementations;
 using MediaBrowser.Server.Implementations;
 using MediaBrowser.ServerApplication.Native;
 using MediaBrowser.ServerApplication.Native;
 using MediaBrowser.ServerApplication.Splash;
 using MediaBrowser.ServerApplication.Splash;
+using MediaBrowser.ServerApplication.Updates;
 using Microsoft.Win32;
 using Microsoft.Win32;
 using System;
 using System;
 using System.Configuration.Install;
 using System.Configuration.Install;
@@ -490,7 +489,7 @@ namespace MediaBrowser.ServerApplication
                 try
                 try
                 {
                 {
                     var serviceName = _isRunningAsService ? BackgroundService.Name : string.Empty;
                     var serviceName = _isRunningAsService ? BackgroundService.Name : string.Empty;
-                    new ApplicationUpdater().UpdateApplication(MBApplication.MBServer, appPaths, updateArchive, logger, serviceName);
+                    new ApplicationUpdater().UpdateApplication(appPaths, updateArchive, logger, serviceName);
 
 
                     // And just let the app exit so it can update
                     // And just let the app exit so it can update
                     return true;
                     return true;

+ 1 - 0
MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj

@@ -145,6 +145,7 @@
     <Compile Include="Splash\SplashForm.Designer.cs">
     <Compile Include="Splash\SplashForm.Designer.cs">
       <DependentUpon>SplashForm.cs</DependentUpon>
       <DependentUpon>SplashForm.cs</DependentUpon>
     </Compile>
     </Compile>
+    <Compile Include="Updates\ApplicationUpdater.cs" />
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
     <None Include="App.config" />
     <None Include="App.config" />

+ 3 - 9
MediaBrowser.Common.Implementations/Updates/ApplicationUpdater.cs → MediaBrowser.ServerApplication/Updates/ApplicationUpdater.cs

@@ -3,14 +3,8 @@ using MediaBrowser.Model.Logging;
 using System.Diagnostics;
 using System.Diagnostics;
 using System.IO;
 using System.IO;
 
 
-namespace MediaBrowser.Common.Implementations.Updates
+namespace MediaBrowser.ServerApplication.Updates
 {
 {
-    public enum MBApplication
-    {
-        MBServer,
-        MBTheater
-    }
-
     /// <summary>
     /// <summary>
     /// Update the specified application using the specified archive
     /// Update the specified application using the specified archive
     /// </summary>
     /// </summary>
@@ -18,7 +12,7 @@ namespace MediaBrowser.Common.Implementations.Updates
     {
     {
         private const string UpdaterExe = "Mediabrowser.Updater.exe";
         private const string UpdaterExe = "Mediabrowser.Updater.exe";
         private const string UpdaterDll = "Mediabrowser.InstallUtil.dll";
         private const string UpdaterDll = "Mediabrowser.InstallUtil.dll";
-        public void UpdateApplication(MBApplication app, IApplicationPaths appPaths, string archive, ILogger logger, string restartServiceName)
+        public void UpdateApplication(IApplicationPaths appPaths, string archive, ILogger logger, string restartServiceName)
         {
         {
             // First see if there is a version file and read that in
             // First see if there is a version file and read that in
             var version = "Unknown";
             var version = "Unknown";
@@ -39,7 +33,7 @@ namespace MediaBrowser.Common.Implementations.Updates
 
 
             logger.Info("Copying updater dependencies to temporary location");
             logger.Info("Copying updater dependencies to temporary location");
             File.Copy(source, tempUpdaterDll, true);
             File.Copy(source, tempUpdaterDll, true);
-            var product = app == MBApplication.MBTheater ? "mbt" : "server";
+            const string product = "server";
             // Our updater needs SS and ionic
             // Our updater needs SS and ionic
             source = Path.Combine(appPaths.ProgramSystemPath, "ServiceStack.Text.dll");
             source = Path.Combine(appPaths.ProgramSystemPath, "ServiceStack.Text.dll");
             File.Copy(source, Path.Combine(Path.GetTempPath(), "ServiceStack.Text.dll"), true);
             File.Copy(source, Path.Combine(Path.GetTempPath(), "ServiceStack.Text.dll"), true);

+ 2 - 2
Nuget/MediaBrowser.Common.Internal.nuspec

@@ -2,7 +2,7 @@
 <package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
 <package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
     <metadata>
     <metadata>
         <id>MediaBrowser.Common.Internal</id>
         <id>MediaBrowser.Common.Internal</id>
-        <version>3.0.345</version>
+        <version>3.0.346</version>
         <title>MediaBrowser.Common.Internal</title>
         <title>MediaBrowser.Common.Internal</title>
         <authors>Luke</authors>
         <authors>Luke</authors>
         <owners>ebr,Luke,scottisafool</owners>
         <owners>ebr,Luke,scottisafool</owners>
@@ -12,7 +12,7 @@
         <description>Contains common components shared by Media Browser Theater and Media Browser Server. Not intended for plugin developer consumption.</description>
         <description>Contains common components shared by Media Browser Theater and Media Browser Server. Not intended for plugin developer consumption.</description>
         <copyright>Copyright © Media Browser 2013</copyright>
         <copyright>Copyright © Media Browser 2013</copyright>
         <dependencies>
         <dependencies>
-            <dependency id="MediaBrowser.Common" version="3.0.345" />
+            <dependency id="MediaBrowser.Common" version="3.0.346" />
             <dependency id="NLog" version="2.1.0" />
             <dependency id="NLog" version="2.1.0" />
             <dependency id="SimpleInjector" version="2.4.1" />
             <dependency id="SimpleInjector" version="2.4.1" />
             <dependency id="sharpcompress" version="0.10.2" />
             <dependency id="sharpcompress" version="0.10.2" />

+ 1 - 1
Nuget/MediaBrowser.Common.nuspec

@@ -2,7 +2,7 @@
 <package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
 <package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
     <metadata>
     <metadata>
         <id>MediaBrowser.Common</id>
         <id>MediaBrowser.Common</id>
-        <version>3.0.345</version>
+        <version>3.0.346</version>
         <title>MediaBrowser.Common</title>
         <title>MediaBrowser.Common</title>
         <authors>Media Browser Team</authors>
         <authors>Media Browser Team</authors>
         <owners>ebr,Luke,scottisafool</owners>
         <owners>ebr,Luke,scottisafool</owners>

+ 2 - 2
Nuget/MediaBrowser.Server.Core.nuspec

@@ -2,7 +2,7 @@
 <package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
 <package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
     <metadata>
     <metadata>
         <id>MediaBrowser.Server.Core</id>
         <id>MediaBrowser.Server.Core</id>
-        <version>3.0.345</version>
+        <version>3.0.346</version>
         <title>Media Browser.Server.Core</title>
         <title>Media Browser.Server.Core</title>
         <authors>Media Browser Team</authors>
         <authors>Media Browser Team</authors>
         <owners>ebr,Luke,scottisafool</owners>
         <owners>ebr,Luke,scottisafool</owners>
@@ -12,7 +12,7 @@
         <description>Contains core components required to build plugins for Media Browser Server.</description>
         <description>Contains core components required to build plugins for Media Browser Server.</description>
         <copyright>Copyright © Media Browser 2013</copyright>
         <copyright>Copyright © Media Browser 2013</copyright>
         <dependencies>
         <dependencies>
-            <dependency id="MediaBrowser.Common" version="3.0.345" />
+            <dependency id="MediaBrowser.Common" version="3.0.346" />
         </dependencies>
         </dependencies>
     </metadata>
     </metadata>
     <files>
     <files>