Merge pull request #1509 from MediaBrowser/dev

Dev
This commit is contained in:
Luke 2016-03-01 11:20:30 -05:00
commit 6aa4015e03
37 changed files with 147 additions and 116 deletions

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -23,7 +23,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
_fileSystem = fileSystem; _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() var httpRequestOptions = new HttpRequestOptions()
{ {
@ -42,7 +42,10 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
_logger.Info("Copying recording stream to file stream"); _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);
} }
} }
} }

View file

@ -103,8 +103,8 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
public event EventHandler<RecordingStatusChangedEventArgs> RecordingStatusChanged; public event EventHandler<RecordingStatusChangedEventArgs> RecordingStatusChanged;
private readonly ConcurrentDictionary<string, CancellationTokenSource> _activeRecordings = private readonly ConcurrentDictionary<string, ActiveRecordingInfo> _activeRecordings =
new ConcurrentDictionary<string, CancellationTokenSource>(StringComparer.OrdinalIgnoreCase); new ConcurrentDictionary<string, ActiveRecordingInfo>(StringComparer.OrdinalIgnoreCase);
public string Name public string Name
{ {
@ -268,11 +268,11 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
{ {
_timerProvider.Delete(remove); _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; return;
} }
var cancellationTokenSource = new CancellationTokenSource(); var activeRecordingInfo = new ActiveRecordingInfo
if (_activeRecordings.TryAdd(timer.Id, cancellationTokenSource))
{ {
await RecordStream(timer, recordingEndDate, cancellationTokenSource.Token).ConfigureAwait(false); CancellationTokenSource = new CancellationTokenSource(),
TimerId = timer.Id
};
if (_activeRecordings.TryAdd(timer.Id, activeRecordingInfo))
{
await RecordStream(timer, recordingEndDate, activeRecordingInfo, activeRecordingInfo.CancellationTokenSource.Token).ConfigureAwait(false);
} }
else 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) if (timer == null)
{ {
@ -729,8 +733,6 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
var recordingFileName = _fileSystem.GetValidFilename(RecordingHelper.GetRecordingName(timer, info)).Trim() + ".ts"; var recordingFileName = _fileSystem.GetValidFilename(RecordingHelper.GetRecordingName(timer, info)).Trim() + ".ts";
recordPath = Path.Combine(recordPath, recordingFileName); recordPath = Path.Combine(recordPath, recordingFileName);
recordPath = EnsureFileUnique(recordPath);
_fileSystem.CreateDirectory(Path.GetDirectoryName(recordPath));
var recordingId = info.Id.GetMD5().ToString("N"); var recordingId = info.Id.GetMD5().ToString("N");
var recording = _recordingProvider.GetAll().FirstOrDefault(x => string.Equals(x.Id, recordingId, StringComparison.OrdinalIgnoreCase)); 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 = Path.ChangeExtension(recordPath, ".mp4");
} }
recordPath = EnsureFileUnique(recordPath, timer.Id);
_fileSystem.CreateDirectory(Path.GetDirectoryName(recordPath));
activeRecordingInfo.Path = recordPath;
_libraryMonitor.ReportFileSystemChangeBeginning(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)); _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("Writing file to path: " + recordPath);
_logger.Info("Opening recording stream from tuner provider"); _logger.Info("Opening recording stream from tuner provider");
@ -810,10 +812,10 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
isResourceOpen = false; 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; recording.Status = RecordingStatus.Completed;
_logger.Info("Recording completed"); _logger.Info("Recording completed: {0}", recordPath);
} }
finally finally
{ {
@ -827,17 +829,17 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
} }
catch (OperationCanceledException) catch (OperationCanceledException)
{ {
_logger.Info("Recording stopped"); _logger.Info("Recording stopped: {0}", recordPath);
recording.Status = RecordingStatus.Completed; recording.Status = RecordingStatus.Completed;
} }
catch (Exception ex) catch (Exception ex)
{ {
_logger.ErrorException("Error recording", ex); _logger.ErrorException("Error recording to {0}", ex, recordPath);
recording.Status = RecordingStatus.Error; recording.Status = RecordingStatus.Error;
} }
finally finally
{ {
CancellationTokenSource removed; ActiveRecordingInfo removed;
_activeRecordings.TryRemove(timer.Id, out 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 originalPath = path;
var index = 1; var index = 1;
while (_fileSystem.FileExists(path)) while (FileExists(path, timerId))
{ {
var parent = Path.GetDirectoryName(originalPath); var parent = Path.GetDirectoryName(originalPath);
var name = Path.GetFileNameWithoutExtension(originalPath); var name = Path.GetFileNameWithoutExtension(originalPath);
@ -881,6 +883,22 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
return path; 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() private async Task<IRecorder> GetRecorder()
{ {
if (GetConfiguration().EnableRecordingEncoding) if (GetConfiguration().EnableRecordingEncoding)
@ -1064,7 +1082,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
{ {
foreach (var pair in _activeRecordings.ToList()) 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 IsRegistered = true
}); });
} }
class ActiveRecordingInfo
{
public string Path { get; set; }
public string TimerId { get; set; }
public CancellationTokenSource CancellationTokenSource { get; set; }
}
} }
} }

View file

@ -38,7 +38,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
_json = json; _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; _targetPath = targetFile;
_fileSystem.CreateDirectory(Path.GetDirectoryName(targetFile)); _fileSystem.CreateDirectory(Path.GetDirectoryName(targetFile));
@ -56,7 +56,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
RedirectStandardInput = true, RedirectStandardInput = true,
FileName = _mediaEncoder.EncoderPath, FileName = _mediaEncoder.EncoderPath,
Arguments = GetCommandLineArgs(mediaSource, targetFile), Arguments = GetCommandLineArgs(mediaSource, targetFile, duration),
WindowStyle = ProcessWindowStyle.Hidden, WindowStyle = ProcessWindowStyle.Hidden,
ErrorDialog = false 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; string videoArgs;
if (EncodeVideo(mediaSource)) if (EncodeVideo(mediaSource))
@ -116,14 +116,14 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
videoArgs = "-codec:v:0 copy"; 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) if (mediaSource.ReadAtNativeFramerate)
{ {
commandLineArgs = "-re " + commandLineArgs; 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; return commandLineArgs;
} }

View file

@ -7,6 +7,15 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
{ {
public interface IRecorder 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);
} }
} }

View file

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

View file

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

View file

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

View file

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

View file

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