Browse Source

Merge pull request #1509 from MediaBrowser/dev

Dev
Luke 9 năm trước cách đây
mục cha
commit
6aa4015e03
37 tập tin đã thay đổi với 146 bổ sung115 xóa
  1. 1 2
      MediaBrowser.Dlna/PlayTo/PlayToManager.cs
  2. 2 2
      MediaBrowser.Dlna/Profiles/DefaultProfile.cs
  3. 2 2
      MediaBrowser.Dlna/Profiles/Xml/BubbleUPnp.xml
  4. 2 2
      MediaBrowser.Dlna/Profiles/Xml/Default.xml
  5. 2 2
      MediaBrowser.Dlna/Profiles/Xml/Denon AVR.xml
  6. 2 2
      MediaBrowser.Dlna/Profiles/Xml/DirecTV HD-DVR.xml
  7. 2 2
      MediaBrowser.Dlna/Profiles/Xml/Dish Hopper-Joey.xml
  8. 2 2
      MediaBrowser.Dlna/Profiles/Xml/LG Smart TV.xml
  9. 2 2
      MediaBrowser.Dlna/Profiles/Xml/Linksys DMA2100.xml
  10. 2 2
      MediaBrowser.Dlna/Profiles/Xml/MediaMonkey.xml
  11. 2 2
      MediaBrowser.Dlna/Profiles/Xml/Panasonic Viera.xml
  12. 2 2
      MediaBrowser.Dlna/Profiles/Xml/Popcorn Hour.xml
  13. 2 2
      MediaBrowser.Dlna/Profiles/Xml/Samsung Smart TV.xml
  14. 2 2
      MediaBrowser.Dlna/Profiles/Xml/Sony Blu-ray Player 2013.xml
  15. 2 2
      MediaBrowser.Dlna/Profiles/Xml/Sony Blu-ray Player.xml
  16. 2 2
      MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2010).xml
  17. 2 2
      MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2011).xml
  18. 2 2
      MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2012).xml
  19. 2 2
      MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2013).xml
  20. 2 2
      MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2014).xml
  21. 2 2
      MediaBrowser.Dlna/Profiles/Xml/Sony PlayStation 3.xml
  22. 2 2
      MediaBrowser.Dlna/Profiles/Xml/Sony PlayStation 4.xml
  23. 2 2
      MediaBrowser.Dlna/Profiles/Xml/Vlc.xml
  24. 2 2
      MediaBrowser.Dlna/Profiles/Xml/WDTV Live.xml
  25. 2 2
      MediaBrowser.Dlna/Profiles/Xml/Xbox 360.xml
  26. 2 2
      MediaBrowser.Dlna/Profiles/Xml/Xbox One.xml
  27. 2 2
      MediaBrowser.Dlna/Profiles/Xml/foobar2000.xml
  28. 6 22
      MediaBrowser.Dlna/Ssdp/SsdpHandler.cs
  29. 5 2
      MediaBrowser.Server.Implementations/LiveTv/EmbyTV/DirectRecorder.cs
  30. 47 22
      MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs
  31. 5 5
      MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EncodedRecorder.cs
  32. 10 1
      MediaBrowser.Server.Implementations/LiveTv/EmbyTV/IRecorder.cs
  33. 5 5
      MediaBrowser.Server.Implementations/LiveTv/EmbyTV/RecordingHelper.cs
  34. 5 0
      MediaBrowser.Server.Implementations/LiveTv/Listings/SchedulesDirect.cs
  35. 5 1
      MediaBrowser.Server.Implementations/Persistence/CleanDatabaseScheduledTask.cs
  36. 5 0
      MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs
  37. 0 3
      MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj

+ 1 - 2
MediaBrowser.Dlna/PlayTo/PlayToManager.cs

@@ -85,8 +85,6 @@ namespace MediaBrowser.Dlna.PlayTo
 
             try
             {
-                var uri = new Uri(location);
-
                 lock (_nonRendererUrls)
                 {
                     if ((DateTime.UtcNow - _lastRendererClear).TotalMinutes >= 10)
@@ -101,6 +99,7 @@ namespace MediaBrowser.Dlna.PlayTo
                     }
                 }
 
+                var uri = new Uri(location);
                 var device = await Device.CreateuPnpDeviceAsync(uri, _httpClient, _config, _logger).ConfigureAwait(false);
 
                 if (device.RendererCommands == null)

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

@@ -31,8 +31,8 @@ namespace MediaBrowser.Dlna.Profiles
             MaxIconWidth = 48;
             MaxIconHeight = 48;
 
-            MaxStreamingBitrate = 10000000;
-            MaxStaticBitrate = 10000000;
+            MaxStreamingBitrate = 12000000;
+            MaxStaticBitrate = 12000000;
             MusicStreamingTranscodingBitrate = 128000;
             MusicSyncBitrate = 128000;
 

+ 2 - 2
MediaBrowser.Dlna/Profiles/Xml/BubbleUPnp.xml

@@ -23,8 +23,8 @@
   <MaxAlbumArtHeight>480</MaxAlbumArtHeight>
   <MaxIconWidth>48</MaxIconWidth>
   <MaxIconHeight>48</MaxIconHeight>
-  <MaxStreamingBitrate>10000000</MaxStreamingBitrate>
-  <MaxStaticBitrate>10000000</MaxStaticBitrate>
+  <MaxStreamingBitrate>12000000</MaxStreamingBitrate>
+  <MaxStaticBitrate>12000000</MaxStaticBitrate>
   <MusicStreamingTranscodingBitrate>128000</MusicStreamingTranscodingBitrate>
   <MusicSyncBitrate>128000</MusicSyncBitrate>
   <XDlnaDoc>DMS-1.50</XDlnaDoc>

+ 2 - 2
MediaBrowser.Dlna/Profiles/Xml/Default.xml

@@ -17,8 +17,8 @@
   <MaxAlbumArtHeight>480</MaxAlbumArtHeight>
   <MaxIconWidth>48</MaxIconWidth>
   <MaxIconHeight>48</MaxIconHeight>
-  <MaxStreamingBitrate>10000000</MaxStreamingBitrate>
-  <MaxStaticBitrate>10000000</MaxStaticBitrate>
+  <MaxStreamingBitrate>12000000</MaxStreamingBitrate>
+  <MaxStaticBitrate>12000000</MaxStaticBitrate>
   <MusicStreamingTranscodingBitrate>128000</MusicStreamingTranscodingBitrate>
   <MusicSyncBitrate>128000</MusicSyncBitrate>
   <XDlnaDoc>DMS-1.50</XDlnaDoc>

+ 2 - 2
MediaBrowser.Dlna/Profiles/Xml/Denon AVR.xml

@@ -22,8 +22,8 @@
   <MaxAlbumArtHeight>480</MaxAlbumArtHeight>
   <MaxIconWidth>48</MaxIconWidth>
   <MaxIconHeight>48</MaxIconHeight>
-  <MaxStreamingBitrate>10000000</MaxStreamingBitrate>
-  <MaxStaticBitrate>10000000</MaxStaticBitrate>
+  <MaxStreamingBitrate>12000000</MaxStreamingBitrate>
+  <MaxStaticBitrate>12000000</MaxStaticBitrate>
   <MusicStreamingTranscodingBitrate>128000</MusicStreamingTranscodingBitrate>
   <MusicSyncBitrate>128000</MusicSyncBitrate>
   <XDlnaDoc>DMS-1.50</XDlnaDoc>

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

@@ -23,8 +23,8 @@
   <MaxAlbumArtHeight>480</MaxAlbumArtHeight>
   <MaxIconWidth>48</MaxIconWidth>
   <MaxIconHeight>48</MaxIconHeight>
-  <MaxStreamingBitrate>10000000</MaxStreamingBitrate>
-  <MaxStaticBitrate>10000000</MaxStaticBitrate>
+  <MaxStreamingBitrate>12000000</MaxStreamingBitrate>
+  <MaxStaticBitrate>12000000</MaxStaticBitrate>
   <MusicStreamingTranscodingBitrate>128000</MusicStreamingTranscodingBitrate>
   <MusicSyncBitrate>128000</MusicSyncBitrate>
   <XDlnaDoc>DMS-1.50</XDlnaDoc>

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

@@ -24,8 +24,8 @@
   <MaxAlbumArtHeight>480</MaxAlbumArtHeight>
   <MaxIconWidth>48</MaxIconWidth>
   <MaxIconHeight>48</MaxIconHeight>
-  <MaxStreamingBitrate>10000000</MaxStreamingBitrate>
-  <MaxStaticBitrate>10000000</MaxStaticBitrate>
+  <MaxStreamingBitrate>12000000</MaxStreamingBitrate>
+  <MaxStaticBitrate>12000000</MaxStaticBitrate>
   <MusicStreamingTranscodingBitrate>128000</MusicStreamingTranscodingBitrate>
   <MusicSyncBitrate>128000</MusicSyncBitrate>
   <XDlnaDoc>DMS-1.50</XDlnaDoc>

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

@@ -23,8 +23,8 @@
   <MaxAlbumArtHeight>480</MaxAlbumArtHeight>
   <MaxIconWidth>48</MaxIconWidth>
   <MaxIconHeight>48</MaxIconHeight>
-  <MaxStreamingBitrate>10000000</MaxStreamingBitrate>
-  <MaxStaticBitrate>10000000</MaxStaticBitrate>
+  <MaxStreamingBitrate>12000000</MaxStreamingBitrate>
+  <MaxStaticBitrate>12000000</MaxStaticBitrate>
   <MusicStreamingTranscodingBitrate>128000</MusicStreamingTranscodingBitrate>
   <MusicSyncBitrate>128000</MusicSyncBitrate>
   <XDlnaDoc>DMS-1.50</XDlnaDoc>

+ 2 - 2
MediaBrowser.Dlna/Profiles/Xml/Linksys DMA2100.xml

@@ -21,8 +21,8 @@
   <MaxAlbumArtHeight>480</MaxAlbumArtHeight>
   <MaxIconWidth>48</MaxIconWidth>
   <MaxIconHeight>48</MaxIconHeight>
-  <MaxStreamingBitrate>10000000</MaxStreamingBitrate>
-  <MaxStaticBitrate>10000000</MaxStaticBitrate>
+  <MaxStreamingBitrate>12000000</MaxStreamingBitrate>
+  <MaxStaticBitrate>12000000</MaxStaticBitrate>
   <MusicStreamingTranscodingBitrate>128000</MusicStreamingTranscodingBitrate>
   <MusicSyncBitrate>128000</MusicSyncBitrate>
   <XDlnaDoc>DMS-1.50</XDlnaDoc>

+ 2 - 2
MediaBrowser.Dlna/Profiles/Xml/MediaMonkey.xml

@@ -23,8 +23,8 @@
   <MaxAlbumArtHeight>480</MaxAlbumArtHeight>
   <MaxIconWidth>48</MaxIconWidth>
   <MaxIconHeight>48</MaxIconHeight>
-  <MaxStreamingBitrate>10000000</MaxStreamingBitrate>
-  <MaxStaticBitrate>10000000</MaxStaticBitrate>
+  <MaxStreamingBitrate>12000000</MaxStreamingBitrate>
+  <MaxStaticBitrate>12000000</MaxStaticBitrate>
   <MusicStreamingTranscodingBitrate>128000</MusicStreamingTranscodingBitrate>
   <MusicSyncBitrate>128000</MusicSyncBitrate>
   <XDlnaDoc>DMS-1.50</XDlnaDoc>

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

@@ -24,8 +24,8 @@
   <MaxAlbumArtHeight>480</MaxAlbumArtHeight>
   <MaxIconWidth>48</MaxIconWidth>
   <MaxIconHeight>48</MaxIconHeight>
-  <MaxStreamingBitrate>10000000</MaxStreamingBitrate>
-  <MaxStaticBitrate>10000000</MaxStaticBitrate>
+  <MaxStreamingBitrate>12000000</MaxStreamingBitrate>
+  <MaxStaticBitrate>12000000</MaxStaticBitrate>
   <MusicStreamingTranscodingBitrate>128000</MusicStreamingTranscodingBitrate>
   <MusicSyncBitrate>128000</MusicSyncBitrate>
   <XDlnaDoc>DMS-1.50</XDlnaDoc>

+ 2 - 2
MediaBrowser.Dlna/Profiles/Xml/Popcorn Hour.xml

@@ -17,8 +17,8 @@
   <MaxAlbumArtHeight>480</MaxAlbumArtHeight>
   <MaxIconWidth>48</MaxIconWidth>
   <MaxIconHeight>48</MaxIconHeight>
-  <MaxStreamingBitrate>10000000</MaxStreamingBitrate>
-  <MaxStaticBitrate>10000000</MaxStaticBitrate>
+  <MaxStreamingBitrate>12000000</MaxStreamingBitrate>
+  <MaxStaticBitrate>12000000</MaxStaticBitrate>
   <MusicStreamingTranscodingBitrate>128000</MusicStreamingTranscodingBitrate>
   <MusicSyncBitrate>128000</MusicSyncBitrate>
   <XDlnaDoc>DMS-1.50</XDlnaDoc>

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

@@ -23,8 +23,8 @@
   <MaxAlbumArtHeight>480</MaxAlbumArtHeight>
   <MaxIconWidth>48</MaxIconWidth>
   <MaxIconHeight>48</MaxIconHeight>
-  <MaxStreamingBitrate>10000000</MaxStreamingBitrate>
-  <MaxStaticBitrate>10000000</MaxStaticBitrate>
+  <MaxStreamingBitrate>12000000</MaxStreamingBitrate>
+  <MaxStaticBitrate>12000000</MaxStaticBitrate>
   <MusicStreamingTranscodingBitrate>128000</MusicStreamingTranscodingBitrate>
   <MusicSyncBitrate>128000</MusicSyncBitrate>
   <XDlnaDoc>DMS-1.50</XDlnaDoc>

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

@@ -23,8 +23,8 @@
   <MaxAlbumArtHeight>480</MaxAlbumArtHeight>
   <MaxIconWidth>48</MaxIconWidth>
   <MaxIconHeight>48</MaxIconHeight>
-  <MaxStreamingBitrate>10000000</MaxStreamingBitrate>
-  <MaxStaticBitrate>10000000</MaxStaticBitrate>
+  <MaxStreamingBitrate>12000000</MaxStreamingBitrate>
+  <MaxStaticBitrate>12000000</MaxStaticBitrate>
   <MusicStreamingTranscodingBitrate>128000</MusicStreamingTranscodingBitrate>
   <MusicSyncBitrate>128000</MusicSyncBitrate>
   <XDlnaDoc>DMS-1.50</XDlnaDoc>

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

@@ -25,8 +25,8 @@
   <MaxAlbumArtHeight>480</MaxAlbumArtHeight>
   <MaxIconWidth>48</MaxIconWidth>
   <MaxIconHeight>48</MaxIconHeight>
-  <MaxStreamingBitrate>10000000</MaxStreamingBitrate>
-  <MaxStaticBitrate>10000000</MaxStaticBitrate>
+  <MaxStreamingBitrate>12000000</MaxStreamingBitrate>
+  <MaxStaticBitrate>12000000</MaxStaticBitrate>
   <MusicStreamingTranscodingBitrate>128000</MusicStreamingTranscodingBitrate>
   <MusicSyncBitrate>128000</MusicSyncBitrate>
   <XDlnaDoc>DMS-1.50</XDlnaDoc>

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

@@ -24,8 +24,8 @@
   <MaxAlbumArtHeight>480</MaxAlbumArtHeight>
   <MaxIconWidth>48</MaxIconWidth>
   <MaxIconHeight>48</MaxIconHeight>
-  <MaxStreamingBitrate>10000000</MaxStreamingBitrate>
-  <MaxStaticBitrate>10000000</MaxStaticBitrate>
+  <MaxStreamingBitrate>12000000</MaxStreamingBitrate>
+  <MaxStaticBitrate>12000000</MaxStaticBitrate>
   <MusicStreamingTranscodingBitrate>128000</MusicStreamingTranscodingBitrate>
   <MusicSyncBitrate>128000</MusicSyncBitrate>
   <XDlnaDoc>DMS-1.50</XDlnaDoc>

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

@@ -24,8 +24,8 @@
   <MaxAlbumArtHeight>480</MaxAlbumArtHeight>
   <MaxIconWidth>48</MaxIconWidth>
   <MaxIconHeight>48</MaxIconHeight>
-  <MaxStreamingBitrate>10000000</MaxStreamingBitrate>
-  <MaxStaticBitrate>10000000</MaxStaticBitrate>
+  <MaxStreamingBitrate>12000000</MaxStreamingBitrate>
+  <MaxStaticBitrate>12000000</MaxStaticBitrate>
   <MusicStreamingTranscodingBitrate>128000</MusicStreamingTranscodingBitrate>
   <MusicSyncBitrate>128000</MusicSyncBitrate>
   <XDlnaDoc>DMS-1.50</XDlnaDoc>

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

@@ -24,8 +24,8 @@
   <MaxAlbumArtHeight>480</MaxAlbumArtHeight>
   <MaxIconWidth>48</MaxIconWidth>
   <MaxIconHeight>48</MaxIconHeight>
-  <MaxStreamingBitrate>10000000</MaxStreamingBitrate>
-  <MaxStaticBitrate>10000000</MaxStaticBitrate>
+  <MaxStreamingBitrate>12000000</MaxStreamingBitrate>
+  <MaxStaticBitrate>12000000</MaxStaticBitrate>
   <MusicStreamingTranscodingBitrate>128000</MusicStreamingTranscodingBitrate>
   <MusicSyncBitrate>128000</MusicSyncBitrate>
   <XDlnaDoc>DMS-1.50</XDlnaDoc>

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

@@ -24,8 +24,8 @@
   <MaxAlbumArtHeight>480</MaxAlbumArtHeight>
   <MaxIconWidth>48</MaxIconWidth>
   <MaxIconHeight>48</MaxIconHeight>
-  <MaxStreamingBitrate>10000000</MaxStreamingBitrate>
-  <MaxStaticBitrate>10000000</MaxStaticBitrate>
+  <MaxStreamingBitrate>12000000</MaxStreamingBitrate>
+  <MaxStaticBitrate>12000000</MaxStaticBitrate>
   <MusicStreamingTranscodingBitrate>128000</MusicStreamingTranscodingBitrate>
   <MusicSyncBitrate>128000</MusicSyncBitrate>
   <XDlnaDoc>DMS-1.50</XDlnaDoc>

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

@@ -24,8 +24,8 @@
   <MaxAlbumArtHeight>480</MaxAlbumArtHeight>
   <MaxIconWidth>48</MaxIconWidth>
   <MaxIconHeight>48</MaxIconHeight>
-  <MaxStreamingBitrate>10000000</MaxStreamingBitrate>
-  <MaxStaticBitrate>10000000</MaxStaticBitrate>
+  <MaxStreamingBitrate>12000000</MaxStreamingBitrate>
+  <MaxStaticBitrate>12000000</MaxStaticBitrate>
   <MusicStreamingTranscodingBitrate>128000</MusicStreamingTranscodingBitrate>
   <MusicSyncBitrate>128000</MusicSyncBitrate>
   <XDlnaDoc>DMS-1.50</XDlnaDoc>

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

@@ -24,8 +24,8 @@
   <MaxAlbumArtHeight>480</MaxAlbumArtHeight>
   <MaxIconWidth>48</MaxIconWidth>
   <MaxIconHeight>48</MaxIconHeight>
-  <MaxStreamingBitrate>10000000</MaxStreamingBitrate>
-  <MaxStaticBitrate>10000000</MaxStaticBitrate>
+  <MaxStreamingBitrate>12000000</MaxStreamingBitrate>
+  <MaxStaticBitrate>12000000</MaxStaticBitrate>
   <MusicStreamingTranscodingBitrate>128000</MusicStreamingTranscodingBitrate>
   <MusicSyncBitrate>128000</MusicSyncBitrate>
   <XDlnaDoc>DMS-1.50</XDlnaDoc>

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

@@ -24,8 +24,8 @@
   <MaxAlbumArtHeight>480</MaxAlbumArtHeight>
   <MaxIconWidth>48</MaxIconWidth>
   <MaxIconHeight>48</MaxIconHeight>
-  <MaxStreamingBitrate>10000000</MaxStreamingBitrate>
-  <MaxStaticBitrate>10000000</MaxStaticBitrate>
+  <MaxStreamingBitrate>12000000</MaxStreamingBitrate>
+  <MaxStaticBitrate>12000000</MaxStaticBitrate>
   <MusicStreamingTranscodingBitrate>128000</MusicStreamingTranscodingBitrate>
   <MusicSyncBitrate>128000</MusicSyncBitrate>
   <XDlnaDoc>DMS-1.50</XDlnaDoc>

+ 2 - 2
MediaBrowser.Dlna/Profiles/Xml/Vlc.xml

@@ -23,8 +23,8 @@
   <MaxAlbumArtHeight>480</MaxAlbumArtHeight>
   <MaxIconWidth>48</MaxIconWidth>
   <MaxIconHeight>48</MaxIconHeight>
-  <MaxStreamingBitrate>10000000</MaxStreamingBitrate>
-  <MaxStaticBitrate>10000000</MaxStaticBitrate>
+  <MaxStreamingBitrate>12000000</MaxStreamingBitrate>
+  <MaxStaticBitrate>12000000</MaxStaticBitrate>
   <MusicStreamingTranscodingBitrate>128000</MusicStreamingTranscodingBitrate>
   <MusicSyncBitrate>128000</MusicSyncBitrate>
   <XDlnaDoc>DMS-1.50</XDlnaDoc>

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

@@ -24,8 +24,8 @@
   <MaxAlbumArtHeight>480</MaxAlbumArtHeight>
   <MaxIconWidth>48</MaxIconWidth>
   <MaxIconHeight>48</MaxIconHeight>
-  <MaxStreamingBitrate>10000000</MaxStreamingBitrate>
-  <MaxStaticBitrate>10000000</MaxStaticBitrate>
+  <MaxStreamingBitrate>12000000</MaxStreamingBitrate>
+  <MaxStaticBitrate>12000000</MaxStaticBitrate>
   <MusicStreamingTranscodingBitrate>128000</MusicStreamingTranscodingBitrate>
   <MusicSyncBitrate>128000</MusicSyncBitrate>
   <XDlnaDoc>DMS-1.50</XDlnaDoc>

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

@@ -24,8 +24,8 @@
   <MaxAlbumArtHeight>480</MaxAlbumArtHeight>
   <MaxIconWidth>48</MaxIconWidth>
   <MaxIconHeight>48</MaxIconHeight>
-  <MaxStreamingBitrate>10000000</MaxStreamingBitrate>
-  <MaxStaticBitrate>10000000</MaxStaticBitrate>
+  <MaxStreamingBitrate>12000000</MaxStreamingBitrate>
+  <MaxStaticBitrate>12000000</MaxStaticBitrate>
   <MusicStreamingTranscodingBitrate>128000</MusicStreamingTranscodingBitrate>
   <MusicSyncBitrate>128000</MusicSyncBitrate>
   <XDlnaDoc>DMS-1.50</XDlnaDoc>

+ 2 - 2
MediaBrowser.Dlna/Profiles/Xml/Xbox One.xml

@@ -24,8 +24,8 @@
   <MaxAlbumArtHeight>480</MaxAlbumArtHeight>
   <MaxIconWidth>48</MaxIconWidth>
   <MaxIconHeight>48</MaxIconHeight>
-  <MaxStreamingBitrate>10000000</MaxStreamingBitrate>
-  <MaxStaticBitrate>10000000</MaxStaticBitrate>
+  <MaxStreamingBitrate>12000000</MaxStreamingBitrate>
+  <MaxStaticBitrate>12000000</MaxStaticBitrate>
   <MusicStreamingTranscodingBitrate>128000</MusicStreamingTranscodingBitrate>
   <MusicSyncBitrate>128000</MusicSyncBitrate>
   <XDlnaDoc>DMS-1.50</XDlnaDoc>

+ 2 - 2
MediaBrowser.Dlna/Profiles/Xml/foobar2000.xml

@@ -23,8 +23,8 @@
   <MaxAlbumArtHeight>480</MaxAlbumArtHeight>
   <MaxIconWidth>48</MaxIconWidth>
   <MaxIconHeight>48</MaxIconHeight>
-  <MaxStreamingBitrate>10000000</MaxStreamingBitrate>
-  <MaxStaticBitrate>10000000</MaxStaticBitrate>
+  <MaxStreamingBitrate>12000000</MaxStreamingBitrate>
+  <MaxStaticBitrate>12000000</MaxStaticBitrate>
   <MusicStreamingTranscodingBitrate>128000</MusicStreamingTranscodingBitrate>
   <MusicSyncBitrate>128000</MusicSyncBitrate>
   <XDlnaDoc>DMS-1.50</XDlnaDoc>

+ 6 - 22
MediaBrowser.Dlna/Ssdp/SsdpHandler.cs

@@ -132,11 +132,6 @@ namespace MediaBrowser.Dlna.Ssdp
 
         internal bool IgnoreMessage(SsdpMessageEventArgs args, bool isMulticast)
         {
-            if (!isMulticast)
-            {
-                return false;
-            }
-
             string usn;
             if (args.Headers.TryGetValue("USN", out usn))
             {
@@ -243,7 +238,7 @@ namespace MediaBrowser.Dlna.Ssdp
             {
                 if (i > 0)
                 {
-                    await Task.Delay(200).ConfigureAwait(false);
+                    await Task.Delay(500).ConfigureAwait(false);
                 }
 
                 var dgram = new Datagram(endpoint, localAddress, _logger, msg, isBroadcast, enableDebugLogging);
@@ -308,17 +303,9 @@ namespace MediaBrowser.Dlna.Ssdp
 
                     var msg = new SsdpMessageBuilder().BuildMessage(header, values);
 
-                    var ipEndPoint = endpoint as IPEndPoint;
-                    if (ipEndPoint != null)
-                    {
-                        SendUnicastRequest(msg, ipEndPoint);
-                    }
-                    else
-                    {
-                        SendDatagram(msg, endpoint, null, false, 2);
-                        SendDatagram(msg, endpoint, new IPEndPoint(d.Address, 0), false, 2);
-                        //SendDatagram(header, values, endpoint, null, true);
-                    }
+                    SendDatagram(msg, endpoint, null, false, 2);
+                    SendDatagram(msg, endpoint, new IPEndPoint(d.Address, 0), false, 2);
+                    //SendDatagram(header, values, endpoint, null, true);
 
                     if (enableDebugLogging)
                     {
@@ -481,7 +468,6 @@ namespace MediaBrowser.Dlna.Ssdp
             values["NTS"] = "ssdp:" + type;
             values["NT"] = dev.Type;
             values["USN"] = dev.USN;
-            values["X-EMBY-SERVERID"] = _appHost.SystemId;
 
             if (logMessage)
             {
@@ -490,7 +476,7 @@ namespace MediaBrowser.Dlna.Ssdp
 
             var msg = new SsdpMessageBuilder().BuildMessage(header, values);
 
-            SendDatagram(msg, _ssdpEndp, new IPEndPoint(dev.Address, 0), true);
+            SendDatagram(msg, _ssdpEndp, new IPEndPoint(dev.Address, 0), true, 1);
             //SendUnicastRequest(msg, 1);
         }
 
@@ -612,8 +598,6 @@ namespace MediaBrowser.Dlna.Ssdp
                 return;
             }
 
-            _logger.Debug("Sending unicast search request");
-
             var ipSsdp = IPAddress.Parse(SSDPAddr);
             var ipTxEnd = new IPEndPoint(ipSsdp, SSDPPort);
 
@@ -627,7 +611,7 @@ namespace MediaBrowser.Dlna.Ssdp
                 return;
             }
 
-            _logger.Debug("Sending unicast search request");
+            //_logger.Debug("Sending unicast request");
 
             byte[] req = Encoding.ASCII.GetBytes(request);
 

+ 5 - 2
MediaBrowser.Server.Implementations/LiveTv/EmbyTV/DirectRecorder.cs

@@ -23,7 +23,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
             _fileSystem = fileSystem;
         }
 
-        public async Task Record(MediaSourceInfo mediaSource, string targetFile, Action onStarted, CancellationToken cancellationToken)
+        public async Task Record(MediaSourceInfo mediaSource, string targetFile, TimeSpan duration, Action onStarted, CancellationToken cancellationToken)
         {
             var httpRequestOptions = new HttpRequestOptions()
             {
@@ -42,7 +42,10 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
 
                     _logger.Info("Copying recording stream to file stream");
 
-                    await response.Content.CopyToAsync(output, StreamDefaults.DefaultCopyToBufferSize, cancellationToken).ConfigureAwait(false);
+                    var durationToken = new CancellationTokenSource(duration);
+                    var linkedToken = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken, durationToken.Token).Token;
+
+                    await response.Content.CopyToAsync(output, StreamDefaults.DefaultCopyToBufferSize, linkedToken).ConfigureAwait(false);
                 }
             }
         }

+ 47 - 22
MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs

@@ -103,8 +103,8 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
 
         public event EventHandler<RecordingStatusChangedEventArgs> RecordingStatusChanged;
 
-        private readonly ConcurrentDictionary<string, CancellationTokenSource> _activeRecordings =
-            new ConcurrentDictionary<string, CancellationTokenSource>(StringComparer.OrdinalIgnoreCase);
+        private readonly ConcurrentDictionary<string, ActiveRecordingInfo> _activeRecordings =
+            new ConcurrentDictionary<string, ActiveRecordingInfo>(StringComparer.OrdinalIgnoreCase);
 
         public string Name
         {
@@ -268,11 +268,11 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
             {
                 _timerProvider.Delete(remove);
             }
-            CancellationTokenSource cancellationTokenSource;
+            ActiveRecordingInfo activeRecordingInfo;
 
-            if (_activeRecordings.TryGetValue(timerId, out cancellationTokenSource))
+            if (_activeRecordings.TryGetValue(timerId, out activeRecordingInfo))
             {
-                cancellationTokenSource.Cancel();
+                activeRecordingInfo.CancellationTokenSource.Cancel();
             }
         }
 
@@ -653,11 +653,15 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
                     return;
                 }
 
-                var cancellationTokenSource = new CancellationTokenSource();
+                var activeRecordingInfo = new ActiveRecordingInfo
+                {
+                    CancellationTokenSource = new CancellationTokenSource(),
+                    TimerId = timer.Id
+                };
 
-                if (_activeRecordings.TryAdd(timer.Id, cancellationTokenSource))
+                if (_activeRecordings.TryAdd(timer.Id, activeRecordingInfo))
                 {
-                    await RecordStream(timer, recordingEndDate, cancellationTokenSource.Token).ConfigureAwait(false);
+                    await RecordStream(timer, recordingEndDate, activeRecordingInfo, activeRecordingInfo.CancellationTokenSource.Token).ConfigureAwait(false);
                 }
                 else
                 {
@@ -674,7 +678,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
             }
         }
 
-        private async Task RecordStream(TimerInfo timer, DateTime recordingEndDate, CancellationToken cancellationToken)
+        private async Task RecordStream(TimerInfo timer, DateTime recordingEndDate, ActiveRecordingInfo activeRecordingInfo, CancellationToken cancellationToken)
         {
             if (timer == null)
             {
@@ -729,8 +733,6 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
             var recordingFileName = _fileSystem.GetValidFilename(RecordingHelper.GetRecordingName(timer, info)).Trim() + ".ts";
 
             recordPath = Path.Combine(recordPath, recordingFileName);
-            recordPath = EnsureFileUnique(recordPath);
-            _fileSystem.CreateDirectory(Path.GetDirectoryName(recordPath));
 
             var recordingId = info.Id.GetMD5().ToString("N");
             var recording = _recordingProvider.GetAll().FirstOrDefault(x => string.Equals(x.Id, recordingId, StringComparison.OrdinalIgnoreCase));
@@ -788,6 +790,9 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
                     {
                         recordPath = Path.ChangeExtension(recordPath, ".mp4");
                     }
+                    recordPath = EnsureFileUnique(recordPath, timer.Id);
+                    _fileSystem.CreateDirectory(Path.GetDirectoryName(recordPath));
+                    activeRecordingInfo.Path = recordPath;
 
                     _libraryMonitor.ReportFileSystemChangeBeginning(recordPath);
 
@@ -798,9 +803,6 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
 
                     _logger.Info("Beginning recording. Will record for {0} minutes.", duration.TotalMinutes.ToString(CultureInfo.InvariantCulture));
 
-                    var durationToken = new CancellationTokenSource(duration);
-                    var linkedToken = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken, durationToken.Token).Token;
-
                     _logger.Info("Writing file to path: " + recordPath);
                     _logger.Info("Opening recording stream from tuner provider");
 
@@ -810,10 +812,10 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
                         isResourceOpen = false;
                     };
 
-                    await recorder.Record(mediaStreamInfo, recordPath, onStarted, linkedToken).ConfigureAwait(false);
+                    await recorder.Record(mediaStreamInfo, recordPath, duration, onStarted, cancellationToken).ConfigureAwait(false);
 
                     recording.Status = RecordingStatus.Completed;
-                    _logger.Info("Recording completed");
+                    _logger.Info("Recording completed: {0}", recordPath);
                 }
                 finally
                 {
@@ -827,17 +829,17 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
             }
             catch (OperationCanceledException)
             {
-                _logger.Info("Recording stopped");
+                _logger.Info("Recording stopped: {0}", recordPath);
                 recording.Status = RecordingStatus.Completed;
             }
             catch (Exception ex)
             {
-                _logger.ErrorException("Error recording", ex);
+                _logger.ErrorException("Error recording to {0}", ex, recordPath);
                 recording.Status = RecordingStatus.Error;
             }
             finally
             {
-                CancellationTokenSource removed;
+                ActiveRecordingInfo removed;
                 _activeRecordings.TryRemove(timer.Id, out removed);
             }
 
@@ -863,12 +865,12 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
             }
         }
 
-        private string EnsureFileUnique(string path)
+        private string EnsureFileUnique(string path, string timerId)
         {
             var originalPath = path;
             var index = 1;
 
-            while (_fileSystem.FileExists(path))
+            while (FileExists(path, timerId))
             {
                 var parent = Path.GetDirectoryName(originalPath);
                 var name = Path.GetFileNameWithoutExtension(originalPath);
@@ -881,6 +883,22 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
             return path;
         }
 
+        private bool FileExists(string path, string timerId)
+        {
+            if (_fileSystem.FileExists(path))
+            {
+                return true;
+            }
+
+            var hasRecordingAtPath = _activeRecordings.Values.ToList().Any(i => string.Equals(i.Path, path, StringComparison.OrdinalIgnoreCase) && !string.Equals(i.TimerId, timerId, StringComparison.OrdinalIgnoreCase));
+
+            if (hasRecordingAtPath)
+            {
+                return true;
+            }
+            return false;
+        }
+
         private async Task<IRecorder> GetRecorder()
         {
             if (GetConfiguration().EnableRecordingEncoding)
@@ -1064,7 +1082,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
         {
             foreach (var pair in _activeRecordings.ToList())
             {
-                pair.Value.Cancel();
+                pair.Value.CancellationTokenSource.Cancel();
             }
         }
 
@@ -1081,5 +1099,12 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
                 IsRegistered = true
             });
         }
+
+        class ActiveRecordingInfo
+        {
+            public string Path { get; set; }
+            public string TimerId { get; set; }
+            public CancellationTokenSource CancellationTokenSource { get; set; }
+        }
     }
 }

+ 5 - 5
MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EncodedRecorder.cs

@@ -38,7 +38,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
             _json = json;
         }
 
-        public async Task Record(MediaSourceInfo mediaSource, string targetFile, Action onStarted, CancellationToken cancellationToken)
+        public async Task Record(MediaSourceInfo mediaSource, string targetFile, TimeSpan duration, Action onStarted, CancellationToken cancellationToken)
         {
             _targetPath = targetFile;
             _fileSystem.CreateDirectory(Path.GetDirectoryName(targetFile));
@@ -56,7 +56,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
                     RedirectStandardInput = true,
 
                     FileName = _mediaEncoder.EncoderPath,
-                    Arguments = GetCommandLineArgs(mediaSource, targetFile),
+                    Arguments = GetCommandLineArgs(mediaSource, targetFile, duration),
 
                     WindowStyle = ProcessWindowStyle.Hidden,
                     ErrorDialog = false
@@ -100,7 +100,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
             }
         }
 
-        private string GetCommandLineArgs(MediaSourceInfo mediaSource, string targetFile)
+        private string GetCommandLineArgs(MediaSourceInfo mediaSource, string targetFile, TimeSpan duration)
         {
             string videoArgs;
             if (EncodeVideo(mediaSource))
@@ -116,14 +116,14 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
                 videoArgs = "-codec:v:0 copy";
             }
 
-            var commandLineArgs = "-fflags +genpts -async 1 -vsync -1 -i \"{0}\" -sn {2} -map_metadata -1 -threads 0 {3} -y \"{1}\"";
+            var commandLineArgs = "-fflags +genpts -async 1 -vsync -1 -i \"{0}\" -t {4} -sn {2} -map_metadata -1 -threads 0 {3} -y \"{1}\"";
 
             if (mediaSource.ReadAtNativeFramerate)
             {
                 commandLineArgs = "-re " + commandLineArgs;
             }
 
-            commandLineArgs = string.Format(commandLineArgs, mediaSource.Path, targetFile, videoArgs, GetAudioArgs(mediaSource));
+            commandLineArgs = string.Format(commandLineArgs, mediaSource.Path, targetFile, videoArgs, GetAudioArgs(mediaSource), _mediaEncoder.GetTimeParameter(duration.Ticks));
 
             return commandLineArgs;
         }

+ 10 - 1
MediaBrowser.Server.Implementations/LiveTv/EmbyTV/IRecorder.cs

@@ -7,6 +7,15 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
 {
     public interface IRecorder
     {
-        Task Record(MediaSourceInfo mediaSource, string targetFile, Action onStarted, CancellationToken cancellationToken);
+        /// <summary>
+        /// Records the specified media source.
+        /// </summary>
+        /// <param name="mediaSource">The media source.</param>
+        /// <param name="targetFile">The target file.</param>
+        /// <param name="duration">The duration.</param>
+        /// <param name="onStarted">The on started.</param>
+        /// <param name="cancellationToken">The cancellation token.</param>
+        /// <returns>Task.</returns>
+        Task Record(MediaSourceInfo mediaSource, string targetFile, TimeSpan duration, Action onStarted, CancellationToken cancellationToken);
     }
 }

+ 5 - 5
MediaBrowser.Server.Implementations/LiveTv/EmbyTV/RecordingHelper.cs

@@ -56,13 +56,13 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
                     name += " " + info.OriginalAirDate.Value.ToString("yyyy-MM-dd");
                 }
 
-                if (addHyphen)
-                {
-                    name += " -";
-                }
-
                 if (!string.IsNullOrWhiteSpace(info.EpisodeTitle))
                 {
+                    if (addHyphen)
+                    {
+                        name += " -";
+                    }
+
                     name += " " + info.EpisodeTitle;
                 }
             }

+ 5 - 0
MediaBrowser.Server.Implementations/LiveTv/Listings/SchedulesDirect.cs

@@ -951,6 +951,11 @@ namespace MediaBrowser.Server.Implementations.LiveTv.Listings
                 public string stationID { get; set; }
                 public List<Program> programs { get; set; }
                 public MetadataSchedule metadata { get; set; }
+
+                public Day()
+                {
+                    programs = new List<Program>();
+                }
             }
 
             //

+ 5 - 1
MediaBrowser.Server.Implementations/Persistence/CleanDatabaseScheduledTask.cs

@@ -239,7 +239,11 @@ namespace MediaBrowser.Server.Implementations.Persistence
                     typeof(Year).Name, 
                     typeof(Channel).Name, 
                     typeof(AggregateFolder).Name, 
-                    typeof(CollectionFolder).Name
+                    typeof(CollectionFolder).Name, 
+
+                    // LiveTVManager handles recordings
+                    typeof(LiveTvAudioRecording).Name, 
+                    typeof(LiveTvVideoRecording).Name
                 }
             });
 

+ 5 - 0
MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs

@@ -308,6 +308,11 @@ namespace MediaBrowser.Server.Implementations.Sync
                     throw new ArgumentException("Unrecognized category: " + category);
             }
 
+            if (parent == null)
+            {
+                return new List<BaseItem>();
+            }
+
             query.User = user;
 
             var result = await parent.GetItems(query).ConfigureAwait(false);

+ 0 - 3
MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj

@@ -481,9 +481,6 @@
     <Content Include="dashboard-ui\photos.html">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\scripts\appsettings.js">
-      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
-    </Content>
     <Content Include="dashboard-ui\scripts\dashboardhosting.js">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>