ソースを参照

Merge pull request #1904 from MediaBrowser/beta

Beta
Luke 9 年 前
コミット
7031a6ef87
35 ファイル変更207 行追加344 行削除
  1. 10 9
      MediaBrowser.Api/Playback/BaseStreamingService.cs
  2. 8 1
      MediaBrowser.Api/Playback/StreamState.cs
  3. 1 0
      MediaBrowser.Common.Implementations/Configuration/BaseConfigurationManager.cs
  4. 2 0
      MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs
  5. 1 0
      MediaBrowser.Common.Implementations/Serialization/XmlSerializer.cs
  6. 1 0
      MediaBrowser.Common.Implementations/Updates/InstallationManager.cs
  7. 3 3
      MediaBrowser.Controller/MediaEncoding/IMediaEncoder.cs
  8. 6 6
      MediaBrowser.MediaEncoding/Encoder/BaseEncoder.cs
  9. 7 8
      MediaBrowser.MediaEncoding/Encoder/EncoderValidator.cs
  10. 2 2
      MediaBrowser.MediaEncoding/Encoder/EncodingJobFactory.cs
  11. 13 24
      MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs
  12. 1 1
      MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs
  13. 10 5
      MediaBrowser.Providers/MediaInfo/AudioImageProvider.cs
  14. 5 4
      MediaBrowser.Providers/MediaInfo/VideoImageProvider.cs
  15. 8 2
      MediaBrowser.Server.Implementations/Localization/LocalizationManager.cs
  16. 9 5
      MediaBrowser.Server.Implementations/MediaEncoder/EncodingManager.cs
  17. 1 1
      MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs
  18. 1 1
      MediaBrowser.Server.Mono/Networking/CertificateGenerator.cs
  19. 2 7
      MediaBrowser.Server.Mono/Security/ASN1.cs
  20. 2 8
      MediaBrowser.Server.Mono/Security/ASN1Convert.cs
  21. 1 1
      MediaBrowser.Server.Mono/Security/BitConverterLE.cs
  22. 69 79
      MediaBrowser.Server.Mono/Security/CryptoConvert.cs
  23. 2 7
      MediaBrowser.Server.Mono/Security/PKCS1.cs
  24. 6 74
      MediaBrowser.Server.Mono/Security/PKCS12.cs
  25. 2 9
      MediaBrowser.Server.Mono/Security/PKCS7.cs
  26. 11 22
      MediaBrowser.Server.Mono/Security/PKCS8.cs
  27. 2 10
      MediaBrowser.Server.Mono/Security/X501Name.cs
  28. 1 3
      MediaBrowser.Server.Mono/Security/X509Builder.cs
  29. 9 14
      MediaBrowser.Server.Mono/Security/X509Certificate.cs
  30. 1 1
      MediaBrowser.Server.Mono/Security/X509CertificateBuilder.cs
  31. 2 7
      MediaBrowser.Server.Mono/Security/X509CertificateCollection.cs
  32. 2 9
      MediaBrowser.Server.Mono/Security/X509Extension.cs
  33. 2 9
      MediaBrowser.Server.Mono/Security/X509Extensions.cs
  34. 2 10
      MediaBrowser.Server.Mono/Security/X520Attributes.cs
  35. 2 2
      MediaBrowser.Server.Startup.Common/ApplicationHost.cs

+ 10 - 9
MediaBrowser.Api/Playback/BaseStreamingService.cs

@@ -292,9 +292,9 @@ namespace MediaBrowser.Api.Playback
                 return "h264_qsv";
             }
 
-            if (string.Equals(ApiEntryPoint.Instance.GetEncodingOptions().HardwareAccelerationType, "libnvenc", StringComparison.OrdinalIgnoreCase))
+            if (string.Equals(ApiEntryPoint.Instance.GetEncodingOptions().HardwareAccelerationType, "nvenc", StringComparison.OrdinalIgnoreCase))
             {
-                return "libnvenc";
+                return "h264_nvenc";
             }
             if (string.Equals(ApiEntryPoint.Instance.GetEncodingOptions().HardwareAccelerationType, "h264_omx", StringComparison.OrdinalIgnoreCase))
             {
@@ -338,8 +338,8 @@ namespace MediaBrowser.Api.Playback
 
             }
 
-            // h264 (libnvenc)
-            else if (string.Equals(videoCodec, "libnvenc", StringComparison.OrdinalIgnoreCase))
+            // h264 (h264_nvenc)
+            else if (string.Equals(videoCodec, "h264_nvenc", StringComparison.OrdinalIgnoreCase))
             {
                 param = "-preset high-performance";
             }
@@ -412,9 +412,9 @@ namespace MediaBrowser.Api.Playback
 
             if (!string.IsNullOrEmpty(state.VideoRequest.Level))
             {
-                // h264_qsv and libnvenc expect levels to be expressed as a decimal. libx264 supports decimal and non-decimal format
+                // h264_qsv and h264_nvenc expect levels to be expressed as a decimal. libx264 supports decimal and non-decimal format
                 if (string.Equals(videoCodec, "h264_qsv", StringComparison.OrdinalIgnoreCase) ||
-                    string.Equals(videoCodec, "libnvenc", StringComparison.OrdinalIgnoreCase))
+                    string.Equals(videoCodec, "h264_nvenc", StringComparison.OrdinalIgnoreCase))
                 {
                     switch (state.VideoRequest.Level)
                     {
@@ -458,7 +458,7 @@ namespace MediaBrowser.Api.Playback
 
             if (!string.Equals(videoCodec, "h264_omx", StringComparison.OrdinalIgnoreCase) &&
                 !string.Equals(videoCodec, "h264_qsv", StringComparison.OrdinalIgnoreCase) &&
-                !string.Equals(videoCodec, "libnvenc", StringComparison.OrdinalIgnoreCase))
+                !string.Equals(videoCodec, "h264_nvenc", StringComparison.OrdinalIgnoreCase))
             {
                 param = "-pix_fmt yuv420p " + param;
             }
@@ -1645,9 +1645,10 @@ namespace MediaBrowser.Api.Playback
             var state = new StreamState(MediaSourceManager, Logger)
             {
                 Request = request,
-                RequestedUrl = url
+                RequestedUrl = url,
+                UserAgent = Request.UserAgent
             };
-
+            
             //if ((Request.UserAgent ?? string.Empty).IndexOf("iphone", StringComparison.OrdinalIgnoreCase) != -1 ||
             //    (Request.UserAgent ?? string.Empty).IndexOf("ipad", StringComparison.OrdinalIgnoreCase) != -1 ||
             //    (Request.UserAgent ?? string.Empty).IndexOf("ipod", StringComparison.OrdinalIgnoreCase) != -1)

+ 8 - 1
MediaBrowser.Api/Playback/StreamState.cs

@@ -75,7 +75,13 @@ namespace MediaBrowser.Api.Playback
             {
                 if (string.Equals(OutputVideoCodec, "copy", StringComparison.OrdinalIgnoreCase))
                 {
-                    return 10;
+                    var userAgent = UserAgent ?? string.Empty;
+                    if (userAgent.IndexOf("AppleTV", StringComparison.OrdinalIgnoreCase) != -1)
+                    {
+                        return 10;
+                    }
+
+                    return 6;
                 }
 
                 return 3;
@@ -99,6 +105,7 @@ namespace MediaBrowser.Api.Playback
         public string OutputVideoSync = "-1";
 
         public List<string> SupportedAudioCodecs { get; set; }
+        public string UserAgent { get; set; }
 
         public StreamState(IMediaSourceManager mediaSourceManager, ILogger logger)
         {

+ 1 - 0
MediaBrowser.Common.Implementations/Configuration/BaseConfigurationManager.cs

@@ -123,6 +123,7 @@ namespace MediaBrowser.Common.Implementations.Configuration
         /// </summary>
         public void SaveConfiguration()
         {
+            Logger.Info("Saving system configuration");
             var path = CommonApplicationPaths.SystemConfigurationFilePath;
 
             Directory.CreateDirectory(Path.GetDirectoryName(path));

+ 2 - 0
MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs

@@ -296,6 +296,8 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager
 
         private async Task<HttpResponseInfo> GetCachedResponse(string responseCachePath, TimeSpan cacheLength, string url)
         {
+            _logger.Info("Checking for cache file {0}", responseCachePath);
+
             try
             {
                 if (_fileSystem.GetLastWriteTimeUtc(responseCachePath).Add(cacheLength) > DateTime.UtcNow)

+ 1 - 0
MediaBrowser.Common.Implementations/Serialization/XmlSerializer.cs

@@ -80,6 +80,7 @@ namespace MediaBrowser.Common.Implementations.Serialization
         /// <param name="file">The file.</param>
         public void SerializeToFile(object obj, string file)
         {
+            _logger.Debug("Serializing to file {0}", file);
             using (var stream = new FileStream(file, FileMode.Create))
             {
                 SerializeToStream(obj, stream);

+ 1 - 0
MediaBrowser.Common.Implementations/Updates/InstallationManager.cs

@@ -193,6 +193,7 @@ namespace MediaBrowser.Common.Implementations.Updates
         /// <returns>Task{List{PackageInfo}}.</returns>
         public async Task<IEnumerable<PackageInfo>> GetAvailablePackagesWithoutRegistrationInfo(CancellationToken cancellationToken)
         {
+            _logger.Info("Opening {0}", PackageCachePath);
             try
             {
                 using (var stream = _fileSystem.OpenRead(PackageCachePath))

+ 3 - 3
MediaBrowser.Controller/MediaEncoding/IMediaEncoder.cs

@@ -35,7 +35,7 @@ namespace MediaBrowser.Controller.MediaEncoding
         /// <param name="imageStreamIndex">Index of the image stream.</param>
         /// <param name="cancellationToken">The cancellation token.</param>
         /// <returns>Task{Stream}.</returns>
-        Task<Stream> ExtractAudioImage(string path, int? imageStreamIndex, CancellationToken cancellationToken);
+        Task<string> ExtractAudioImage(string path, int? imageStreamIndex, CancellationToken cancellationToken);
 
         /// <summary>
         /// Extracts the video image.
@@ -46,9 +46,9 @@ namespace MediaBrowser.Controller.MediaEncoding
         /// <param name="offset">The offset.</param>
         /// <param name="cancellationToken">The cancellation token.</param>
         /// <returns>Task{Stream}.</returns>
-        Task<Stream> ExtractVideoImage(string[] inputFiles, MediaProtocol protocol, Video3DFormat? threedFormat, TimeSpan? offset, CancellationToken cancellationToken);
+        Task<string> ExtractVideoImage(string[] inputFiles, MediaProtocol protocol, Video3DFormat? threedFormat, TimeSpan? offset, CancellationToken cancellationToken);
 
-        Task<Stream> ExtractVideoImage(string[] inputFiles, MediaProtocol protocol, int? imageStreamIndex, CancellationToken cancellationToken);
+        Task<string> ExtractVideoImage(string[] inputFiles, MediaProtocol protocol, int? imageStreamIndex, CancellationToken cancellationToken);
 
         /// <summary>
         /// Extracts the video images on interval.

+ 6 - 6
MediaBrowser.MediaEncoding/Encoder/BaseEncoder.cs

@@ -607,10 +607,10 @@ namespace MediaBrowser.MediaEncoding.Encoder
 
             }
 
-            // h264 (libnvenc)
-            else if (string.Equals(videoCodec, "libnvenc", StringComparison.OrdinalIgnoreCase))
+            // h264 (h264_nvenc)
+            else if (string.Equals(videoCodec, "h264_nvenc", StringComparison.OrdinalIgnoreCase))
             {
-                param = "-preset high-performance";
+                param = "-preset llhq";
             }
 
             // webm
@@ -683,9 +683,9 @@ namespace MediaBrowser.MediaEncoding.Encoder
 
             if (!string.IsNullOrEmpty(levelString))
             {
-                // h264_qsv and libnvenc expect levels to be expressed as a decimal. libx264 supports decimal and non-decimal format
+                // h264_qsv and h264_nvenc expect levels to be expressed as a decimal. libx264 supports decimal and non-decimal format
                 if (string.Equals(videoCodec, "h264_qsv", StringComparison.OrdinalIgnoreCase) ||
-                    string.Equals(videoCodec, "libnvenc", StringComparison.OrdinalIgnoreCase))
+                    string.Equals(videoCodec, "h264_nvenc", StringComparison.OrdinalIgnoreCase))
                 {
                     switch (levelString)
                     {
@@ -729,7 +729,7 @@ namespace MediaBrowser.MediaEncoding.Encoder
 
             if (!string.Equals(videoCodec, "h264_omx", StringComparison.OrdinalIgnoreCase) &&
                 !string.Equals(videoCodec, "h264_qsv", StringComparison.OrdinalIgnoreCase) &&
-                !string.Equals(videoCodec, "libnvenc", StringComparison.OrdinalIgnoreCase))
+                !string.Equals(videoCodec, "h264_nvenc", StringComparison.OrdinalIgnoreCase))
             {
                 param = "-pix_fmt yuv420p " + param;
             }

+ 7 - 8
MediaBrowser.MediaEncoding/Encoder/EncoderValidator.cs

@@ -78,17 +78,19 @@ namespace MediaBrowser.MediaEncoding.Encoder
                 "libx265",
                 "mpeg4",
                 "msmpeg4",
-                //"libvpx",
-                //"libvpx-vp9",
+                "libvpx",
+                "libvpx-vp9",
                 "aac",
                 "libmp3lame",
                 "libopus",
-                //"libvorbis",
+                "libvorbis",
                 "srt",
-                "libnvenc",
+                "h264_nvenc",
                 "h264_qsv"
             };
 
+            output = output ?? string.Empty;
+
             foreach (var codec in required)
             {
                 var srch = " " + codec + "  ";
@@ -115,8 +117,7 @@ namespace MediaBrowser.MediaEncoding.Encoder
                     Arguments = arguments,
                     WindowStyle = ProcessWindowStyle.Hidden,
                     ErrorDialog = false,
-                    RedirectStandardOutput = true,
-                    RedirectStandardError = true
+                    RedirectStandardOutput = true
                 }
             };
 
@@ -126,8 +127,6 @@ namespace MediaBrowser.MediaEncoding.Encoder
 
                 try
                 {
-                    process.BeginErrorReadLine();
-
                     return process.StandardOutput.ReadToEnd();
                 }
                 catch

+ 2 - 2
MediaBrowser.MediaEncoding/Encoder/EncodingJobFactory.cs

@@ -562,9 +562,9 @@ namespace MediaBrowser.MediaEncoding.Encoder
                 return "h264_qsv";
             }
 
-            if (string.Equals(options.HardwareAccelerationType, "libnvenc", StringComparison.OrdinalIgnoreCase))
+            if (string.Equals(options.HardwareAccelerationType, "nvenc", StringComparison.OrdinalIgnoreCase))
             {
-                return "libnvenc";
+                return "h264_nvenc";
             }
             if (string.Equals(options.HardwareAccelerationType, "h264_omx", StringComparison.OrdinalIgnoreCase))
             {

+ 13 - 24
MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs

@@ -767,22 +767,22 @@ namespace MediaBrowser.MediaEncoding.Encoder
         /// </summary>
         protected readonly CultureInfo UsCulture = new CultureInfo("en-US");
 
-        public Task<Stream> ExtractAudioImage(string path, int? imageStreamIndex, CancellationToken cancellationToken)
+        public Task<string> ExtractAudioImage(string path, int? imageStreamIndex, CancellationToken cancellationToken)
         {
             return ExtractImage(new[] { path }, imageStreamIndex, MediaProtocol.File, true, null, null, cancellationToken);
         }
 
-        public Task<Stream> ExtractVideoImage(string[] inputFiles, MediaProtocol protocol, Video3DFormat? threedFormat, TimeSpan? offset, CancellationToken cancellationToken)
+        public Task<string> ExtractVideoImage(string[] inputFiles, MediaProtocol protocol, Video3DFormat? threedFormat, TimeSpan? offset, CancellationToken cancellationToken)
         {
             return ExtractImage(inputFiles, null, protocol, false, threedFormat, offset, cancellationToken);
         }
 
-        public Task<Stream> ExtractVideoImage(string[] inputFiles, MediaProtocol protocol, int? imageStreamIndex, CancellationToken cancellationToken)
+        public Task<string> ExtractVideoImage(string[] inputFiles, MediaProtocol protocol, int? imageStreamIndex, CancellationToken cancellationToken)
         {
             return ExtractImage(inputFiles, imageStreamIndex, protocol, false, null, null, cancellationToken);
         }
 
-        private async Task<Stream> ExtractImage(string[] inputFiles, int? imageStreamIndex, MediaProtocol protocol, bool isAudio,
+        private async Task<string> ExtractImage(string[] inputFiles, int? imageStreamIndex, MediaProtocol protocol, bool isAudio,
             Video3DFormat? threedFormat, TimeSpan? offset, CancellationToken cancellationToken)
         {
             var resourcePool = isAudio ? _audioImageResourcePool : _videoImageResourcePool;
@@ -816,13 +816,16 @@ namespace MediaBrowser.MediaEncoding.Encoder
             return await ExtractImageInternal(inputArgument, imageStreamIndex, protocol, threedFormat, offset, false, resourcePool, cancellationToken).ConfigureAwait(false);
         }
 
-        private async Task<Stream> ExtractImageInternal(string inputPath, int? imageStreamIndex, MediaProtocol protocol, Video3DFormat? threedFormat, TimeSpan? offset, bool useIFrame, SemaphoreSlim resourcePool, CancellationToken cancellationToken)
+        private async Task<string> ExtractImageInternal(string inputPath, int? imageStreamIndex, MediaProtocol protocol, Video3DFormat? threedFormat, TimeSpan? offset, bool useIFrame, SemaphoreSlim resourcePool, CancellationToken cancellationToken)
         {
             if (string.IsNullOrEmpty(inputPath))
             {
                 throw new ArgumentNullException("inputPath");
             }
 
+            var tempExtractPath = Path.Combine(ConfigurationManager.ApplicationPaths.TempDirectory, Guid.NewGuid() + ".jpg");
+            Directory.CreateDirectory(Path.GetDirectoryName(tempExtractPath));
+
             // apply some filters to thumbnail extracted below (below) crop any black lines that we made and get the correct ar then scale to width 600. 
             // This filter chain may have adverse effects on recorded tv thumbnails if ar changes during presentation ex. commercials @ diff ar
             var vf = "scale=600:trunc(600/dar/2)*2";
@@ -855,8 +858,8 @@ namespace MediaBrowser.MediaEncoding.Encoder
             var mapArg = imageStreamIndex.HasValue ? (" -map 0:v:" + imageStreamIndex.Value.ToString(CultureInfo.InvariantCulture)) : string.Empty;
 
             // Use ffmpeg to sample 100 (we can drop this if required using thumbnail=50 for 50 frames) frames and pick the best thumbnail. Have a fall back just in case.
-            var args = useIFrame ? string.Format("-i {0}{3} -threads 1 -v quiet -vframes 1 -vf \"{2},thumbnail=30\" -f image2 \"{1}\"", inputPath, "-", vf, mapArg) :
-                string.Format("-i {0}{3} -threads 1 -v quiet -vframes 1 -vf \"{2}\" -f image2 \"{1}\"", inputPath, "-", vf, mapArg);
+            var args = useIFrame ? string.Format("-i {0}{3} -threads 1 -v quiet -vframes 1 -vf \"{2},thumbnail=30\" -f image2 \"{1}\"", inputPath, tempExtractPath, vf, mapArg) :
+                string.Format("-i {0}{3} -threads 1 -v quiet -vframes 1 -vf \"{2}\" -f image2 \"{1}\"", inputPath, tempExtractPath, vf, mapArg);
 
             var probeSize = GetProbeSizeArgument(new[] { inputPath }, protocol);
 
@@ -880,8 +883,6 @@ namespace MediaBrowser.MediaEncoding.Encoder
                     Arguments = args,
                     WindowStyle = ProcessWindowStyle.Hidden,
                     ErrorDialog = false,
-                    RedirectStandardOutput = true,
-                    RedirectStandardError = true,
                     RedirectStandardInput = true
                 }
             };
@@ -894,20 +895,10 @@ namespace MediaBrowser.MediaEncoding.Encoder
 
                 bool ranToCompletion;
 
-                var memoryStream = new MemoryStream();
-
                 try
                 {
                     StartProcess(processWrapper);
 
-#pragma warning disable 4014
-                    // Important - don't await the log task or we won't be able to kill ffmpeg when the user stops playback
-                    process.StandardOutput.BaseStream.CopyToAsync(memoryStream);
-#pragma warning restore 4014
-
-                    // MUST read both stdout and stderr asynchronously or a deadlock may occurr
-                    process.BeginErrorReadLine();
-
                     ranToCompletion = process.WaitForExit(10000);
 
                     if (!ranToCompletion)
@@ -922,11 +913,10 @@ namespace MediaBrowser.MediaEncoding.Encoder
                 }
 
                 var exitCode = ranToCompletion ? processWrapper.ExitCode ?? 0 : -1;
+                var file = new FileInfo(tempExtractPath);
 
-                if (exitCode == -1 || memoryStream.Length == 0)
+                if (exitCode == -1 || !file.Exists || file.Length == 0)
                 {
-                    memoryStream.Dispose();
-
                     var msg = string.Format("ffmpeg image extraction failed for {0}", inputPath);
 
                     _logger.Error(msg);
@@ -934,8 +924,7 @@ namespace MediaBrowser.MediaEncoding.Encoder
                     throw new ApplicationException(msg);
                 }
 
-                memoryStream.Position = 0;
-                return memoryStream;
+                return tempExtractPath;
             }
         }
 

+ 1 - 1
MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs

@@ -455,7 +455,7 @@ namespace MediaBrowser.MediaEncoding.Subtitles
 
                 throw;
             }
-
+            
             var logTask = process.StandardError.BaseStream.CopyToAsync(logFileStream);
 
             var ranToCompletion = process.WaitForExit(60000);

+ 10 - 5
MediaBrowser.Providers/MediaInfo/AudioImageProvider.cs

@@ -83,12 +83,17 @@ namespace MediaBrowser.Providers.MediaInfo
 
                         var imageStreamIndex = imageStream == null ? (int?)null : imageStream.Index;
 
-                        using (var stream = await _mediaEncoder.ExtractAudioImage(item.Path, imageStreamIndex, cancellationToken).ConfigureAwait(false))
+                        var tempFile = await _mediaEncoder.ExtractAudioImage(item.Path, imageStreamIndex, cancellationToken).ConfigureAwait(false);
+
+                        File.Copy(tempFile, path, true);
+
+                        try
                         {
-                            using (var fileStream = _fileSystem.GetFileStream(path, FileMode.Create, FileAccess.Write, FileShare.Read, true))
-                            {
-                                await stream.CopyToAsync(fileStream).ConfigureAwait(false);
-                            }
+                            File.Delete(tempFile);
+                        }
+                        catch
+                        {
+
                         }
                     }
                 }

+ 5 - 4
MediaBrowser.Providers/MediaInfo/VideoImageProvider.cs

@@ -116,7 +116,7 @@ namespace MediaBrowser.Providers.MediaInfo
                     imageStreams.FirstOrDefault(i => (i.Comment ?? string.Empty).IndexOf("cover", StringComparison.OrdinalIgnoreCase) != -1) ??
                     imageStreams.FirstOrDefault();
 
-                Stream stream;
+                string extractedImagePath;
 
                 if (imageStream != null)
                 {
@@ -135,7 +135,7 @@ namespace MediaBrowser.Providers.MediaInfo
                         }
                     }
 
-                    stream = await _mediaEncoder.ExtractVideoImage(inputPath, protocol, videoIndex, cancellationToken).ConfigureAwait(false);
+                    extractedImagePath = await _mediaEncoder.ExtractVideoImage(inputPath, protocol, videoIndex, cancellationToken).ConfigureAwait(false);
                 }
                 else
                 {
@@ -146,14 +146,15 @@ namespace MediaBrowser.Providers.MediaInfo
                                           ? TimeSpan.FromTicks(Convert.ToInt64(item.RunTimeTicks.Value * .1))
                                           : TimeSpan.FromSeconds(10);
 
-                    stream = await _mediaEncoder.ExtractVideoImage(inputPath, protocol, item.Video3DFormat, imageOffset, cancellationToken).ConfigureAwait(false);
+                    extractedImagePath = await _mediaEncoder.ExtractVideoImage(inputPath, protocol, item.Video3DFormat, imageOffset, cancellationToken).ConfigureAwait(false);
                 }
 
                 return new DynamicImageResponse
                 {
                     Format = ImageFormat.Jpg,
                     HasImage = true,
-                    Stream = stream
+                    Path = extractedImagePath,
+                    Protocol = MediaProtocol.File
                 };
             }
             finally

+ 8 - 2
MediaBrowser.Server.Implementations/Localization/LocalizationManager.cs

@@ -12,6 +12,7 @@ using System.IO;
 using System.Linq;
 using System.Reflection;
 using CommonIO;
+using MediaBrowser.Model.Logging;
 
 namespace MediaBrowser.Server.Implementations.Localization
 {
@@ -35,6 +36,7 @@ namespace MediaBrowser.Server.Implementations.Localization
 
         private readonly IFileSystem _fileSystem;
         private readonly IJsonSerializer _jsonSerializer;
+        private readonly ILogger _logger;
 
         /// <summary>
         /// Initializes a new instance of the <see cref="LocalizationManager" /> class.
@@ -42,11 +44,12 @@ namespace MediaBrowser.Server.Implementations.Localization
         /// <param name="configurationManager">The configuration manager.</param>
         /// <param name="fileSystem">The file system.</param>
         /// <param name="jsonSerializer">The json serializer.</param>
-        public LocalizationManager(IServerConfigurationManager configurationManager, IFileSystem fileSystem, IJsonSerializer jsonSerializer)
+        public LocalizationManager(IServerConfigurationManager configurationManager, IFileSystem fileSystem, IJsonSerializer jsonSerializer, ILogger logger)
         {
             _configurationManager = configurationManager;
             _fileSystem = fileSystem;
             _jsonSerializer = jsonSerializer;
+            _logger = logger;
 
             ExtractAll();
         }
@@ -75,7 +78,10 @@ namespace MediaBrowser.Server.Implementations.Localization
                 {
                     using (var stream = type.Assembly.GetManifestResourceStream(resource))
                     {
-                        using (var fs = _fileSystem.GetFileStream(Path.Combine(localizationPath, filename), FileMode.Create, FileAccess.Write, FileShare.Read))
+                        var target = Path.Combine(localizationPath, filename);
+                        _logger.Info("Extracting ratings to {0}", target);
+
+                        using (var fs = _fileSystem.GetFileStream(target, FileMode.Create, FileAccess.Write, FileShare.Read))
                         {
                             stream.CopyTo(fs);
                         }

+ 9 - 5
MediaBrowser.Server.Implementations/MediaEncoder/EncodingManager.cs

@@ -139,12 +139,16 @@ namespace MediaBrowser.Server.Implementations.MediaEncoder
                         {
 							_fileSystem.CreateDirectory(Path.GetDirectoryName(path));
 
-                            using (var stream = await _encoder.ExtractVideoImage(inputPath, protocol, video.Video3DFormat, time, cancellationToken).ConfigureAwait(false))
+                            var tempFile = await _encoder.ExtractVideoImage(inputPath, protocol, video.Video3DFormat, time, cancellationToken).ConfigureAwait(false);
+                            File.Copy(tempFile, path, true);
+
+                            try
+                            {
+                                File.Delete(tempFile);
+                            }
+                            catch
                             {
-                                using (var fileStream = _fileSystem.GetFileStream(path, FileMode.Create, FileAccess.Write, FileShare.Read, true))
-                                {
-                                    await stream.CopyToAsync(fileStream).ConfigureAwait(false);
-                                }
+                                
                             }
 
                             chapter.ImagePath = path;

+ 1 - 1
MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs

@@ -3862,7 +3862,7 @@ namespace MediaBrowser.Server.Implementations.Persistence
                     ? (CommandBehavior.SequentialAccess | CommandBehavior.SingleResult)
                     : CommandBehavior.SequentialAccess;
 
-                Logger.Debug("GetItemValues: " + cmd.CommandText);
+                //Logger.Debug("GetItemValues: " + cmd.CommandText);
 
                 using (var reader = cmd.ExecuteReader(commandBehavior))
                 {

+ 1 - 1
MediaBrowser.Server.Mono/Networking/CertificateGenerator.cs

@@ -1,8 +1,8 @@
 using MediaBrowser.Model.Logging;
-using Mono.Security.X509;
 using System;
 using System.Collections;
 using System.Security.Cryptography;
+using MediaBrowser.Server.Mono.Security;
 
 namespace MediaBrowser.Server.Mono.Networking
 {

+ 2 - 7
MediaBrowser.Server.Mono/Security/ASN1.cs

@@ -34,18 +34,13 @@ using System.Collections;
 using System.IO;
 using System.Text;
 
-namespace Mono.Security {
+namespace MediaBrowser.Server.Mono.Security {
 
 	// References:
 	// a.	ITU ASN.1 standards (free download)
 	//	http://www.itu.int/ITU-T/studygroups/com17/languages/
 
-#if INSIDE_CORLIB
-	internal
-#else
-	public
-#endif
-	class ASN1 {
+    public class ASN1 {
 
 		private byte m_nTag;
 		private byte[] m_aValue;

+ 2 - 8
MediaBrowser.Server.Mono/Security/ASN1Convert.cs

@@ -30,23 +30,17 @@
 //
 
 using System;
-using System.Collections;
 using System.Globalization;
 using System.Security.Cryptography;
 using System.Text;
 
-namespace Mono.Security {
+namespace MediaBrowser.Server.Mono.Security {
 
 	// References:
 	// a.	ITU ASN.1 standards (free download)
 	//	http://www.itu.int/ITU-T/studygroups/com17/languages/
 
-#if INSIDE_CORLIB
-	internal
-#else
-	public
-#endif
-	static class ASN1Convert {
+    public static class ASN1Convert {
 		// RFC3280, section 4.2.1.5
 		// CAs conforming to this profile MUST always encode certificate
 		// validity dates through the year 2049 as UTCTime; certificate validity

+ 1 - 1
MediaBrowser.Server.Mono/Security/BitConverterLE.cs

@@ -29,7 +29,7 @@
 
 using System;
 
-namespace Mono.Security
+namespace MediaBrowser.Server.Mono.Security
 {
 	internal sealed class BitConverterLE
 	{

+ 69 - 79
MediaBrowser.Server.Mono/Security/CryptoConvert.cs

@@ -32,14 +32,9 @@ using System.Globalization;
 using System.Security.Cryptography;
 using System.Text;
 
-namespace Mono.Security.Cryptography {
+namespace MediaBrowser.Server.Mono.Security {
 
-#if INSIDE_CORLIB
-	internal
-#else
-	public
-#endif
-	sealed class CryptoConvert {
+    public sealed class CryptoConvert {
 
 		private CryptoConvert () 
 		{
@@ -166,32 +161,31 @@ namespace Mono.Security.Cryptography {
 				throw new CryptographicException ("Invalid blob.", e);
 			}
 
-#if INSIDE_CORLIB && MOBILE
-			RSA rsa = RSA.Create ();
-			rsa.ImportParameters (rsap);
-#else
-			RSA rsa = null;
-			try {
-				rsa = RSA.Create ();
-				rsa.ImportParameters (rsap);
-			}
-			catch (CryptographicException ce) {
-				// this may cause problem when this code is run under
-				// the SYSTEM identity on Windows (e.g. ASP.NET). See
-				// http://bugzilla.ximian.com/show_bug.cgi?id=77559
-				try {
-					CspParameters csp = new CspParameters ();
-					csp.Flags = CspProviderFlags.UseMachineKeyStore;
-					rsa = new RSACryptoServiceProvider (csp);
-					rsa.ImportParameters (rsap);
-				}
-				catch {
-					// rethrow original, not the later, exception if this fails
-					throw ce;
-				}
-			}
-#endif
-			return rsa;
+            RSA rsa = null;
+            try
+            {
+                rsa = RSA.Create();
+                rsa.ImportParameters(rsap);
+            }
+            catch (CryptographicException ce)
+            {
+                // this may cause problem when this code is run under
+                // the SYSTEM identity on Windows (e.g. ASP.NET). See
+                // http://bugzilla.ximian.com/show_bug.cgi?id=77559
+                try
+                {
+                    CspParameters csp = new CspParameters();
+                    csp.Flags = CspProviderFlags.UseMachineKeyStore;
+                    rsa = new RSACryptoServiceProvider(csp);
+                    rsa.ImportParameters(rsap);
+                }
+                catch
+                {
+                    // rethrow original, not the later, exception if this fails
+                    throw ce;
+                }
+            }
+            return rsa;
 		}
 
 		static public DSA FromCapiPrivateKeyBlobDSA (byte[] blob)
@@ -251,32 +245,31 @@ namespace Mono.Security.Cryptography {
 				throw new CryptographicException ("Invalid blob.", e);
 			}
 
-#if INSIDE_CORLIB && MOBILE
-			DSA dsa = (DSA)DSA.Create ();
-			dsa.ImportParameters (dsap);
-#else
-			DSA dsa = null;
-			try {
-				dsa = (DSA)DSA.Create ();
-				dsa.ImportParameters (dsap);
-			}
-			catch (CryptographicException ce) {
-				// this may cause problem when this code is run under
-				// the SYSTEM identity on Windows (e.g. ASP.NET). See
-				// http://bugzilla.ximian.com/show_bug.cgi?id=77559
-				try {
-					CspParameters csp = new CspParameters ();
-					csp.Flags = CspProviderFlags.UseMachineKeyStore;
-					dsa = new DSACryptoServiceProvider (csp);
-					dsa.ImportParameters (dsap);
-				}
-				catch {
-					// rethrow original, not the later, exception if this fails
-					throw ce;
-				}
-			}
-#endif
-			return dsa;
+            DSA dsa = null;
+            try
+            {
+                dsa = (DSA)DSA.Create();
+                dsa.ImportParameters(dsap);
+            }
+            catch (CryptographicException ce)
+            {
+                // this may cause problem when this code is run under
+                // the SYSTEM identity on Windows (e.g. ASP.NET). See
+                // http://bugzilla.ximian.com/show_bug.cgi?id=77559
+                try
+                {
+                    CspParameters csp = new CspParameters();
+                    csp.Flags = CspProviderFlags.UseMachineKeyStore;
+                    dsa = new DSACryptoServiceProvider(csp);
+                    dsa.ImportParameters(dsap);
+                }
+                catch
+                {
+                    // rethrow original, not the later, exception if this fails
+                    throw ce;
+                }
+            }
+            return dsa;
 		}
 
 		static public byte[] ToCapiPrivateKeyBlob (RSA rsa) 
@@ -444,26 +437,23 @@ namespace Mono.Security.Cryptography {
 				rsap.Modulus = new byte [byteLen];
 				Buffer.BlockCopy (blob, pos, rsap.Modulus, 0, byteLen);
 				Array.Reverse (rsap.Modulus);
-#if INSIDE_CORLIB && MOBILE
-				RSA rsa = RSA.Create ();
-				rsa.ImportParameters (rsap);
-#else
-				RSA rsa = null;
-				try {
-					rsa = RSA.Create ();
-					rsa.ImportParameters (rsap);
-				}
-				catch (CryptographicException) {
-					// this may cause problem when this code is run under
-					// the SYSTEM identity on Windows (e.g. ASP.NET). See
-					// http://bugzilla.ximian.com/show_bug.cgi?id=77559
-					CspParameters csp = new CspParameters ();
-					csp.Flags = CspProviderFlags.UseMachineKeyStore;
-					rsa = new RSACryptoServiceProvider (csp);
-					rsa.ImportParameters (rsap);
-				}
-#endif
-				return rsa;
+                RSA rsa = null;
+                try
+                {
+                    rsa = RSA.Create();
+                    rsa.ImportParameters(rsap);
+                }
+                catch (CryptographicException)
+                {
+                    // this may cause problem when this code is run under
+                    // the SYSTEM identity on Windows (e.g. ASP.NET). See
+                    // http://bugzilla.ximian.com/show_bug.cgi?id=77559
+                    CspParameters csp = new CspParameters();
+                    csp.Flags = CspProviderFlags.UseMachineKeyStore;
+                    rsa = new RSACryptoServiceProvider(csp);
+                    rsa.ImportParameters(rsap);
+                }
+                return rsa;
 			}
 			catch (Exception e) {
 				throw new CryptographicException ("Invalid blob.", e);

+ 2 - 7
MediaBrowser.Server.Mono/Security/PKCS1.cs

@@ -31,18 +31,13 @@
 using System;
 using System.Security.Cryptography;
 
-namespace Mono.Security.Cryptography { 
+namespace MediaBrowser.Server.Mono.Security { 
 
 	// References:
 	// a.	PKCS#1: RSA Cryptography Standard 
 	//	http://www.rsasecurity.com/rsalabs/pkcs/pkcs-1/index.html
 	
-#if INSIDE_CORLIB
-	internal
-#else
-	public
-#endif
-	sealed class PKCS1 {
+    public sealed class PKCS1 {
 
 		private PKCS1 () 
 		{

+ 6 - 74
MediaBrowser.Server.Mono/Security/PKCS12.cs

@@ -37,17 +37,9 @@ using System.IO;
 using System.Security.Cryptography;
 using System.Text;
 
-using Mono.Security;
-using Mono.Security.Cryptography;
+namespace MediaBrowser.Server.Mono.Security {
 
-namespace Mono.Security.X509 {
-
-#if INSIDE_CORLIB
-	internal
-#else
-	public 
-#endif
-	class PKCS5 {
+    public class PKCS5 {
 
 		public const string pbeWithMD2AndDESCBC = "1.2.840.113549.1.5.1";
 		public const string pbeWithMD5AndDESCBC = "1.2.840.113549.1.5.3";
@@ -59,12 +51,7 @@ namespace Mono.Security.X509 {
 		public PKCS5 () {}
 	}
 
-#if INSIDE_CORLIB
-	internal
-#else
-	public 
-#endif
-	class PKCS9 {
+    public class PKCS9 {
 
 		public const string friendlyName = "1.2.840.113549.1.9.20";
 		public const string localKeyId = "1.2.840.113549.1.9.21";
@@ -92,12 +79,7 @@ namespace Mono.Security.X509 {
 	}
 
 
-#if INSIDE_CORLIB
-	internal
-#else
-	public 
-#endif
-	class PKCS12 : ICloneable {
+    public class PKCS12 : ICloneable {
 
 		public const string pbeWithSHAAnd128BitRC4 = "1.2.840.113549.1.12.1.1";
 		public const string pbeWithSHAAnd40BitRC4 = "1.2.840.113549.1.12.1.2";
@@ -657,29 +639,8 @@ namespace Mono.Security.X509 {
 			}
 
 			SymmetricAlgorithm sa = null;
-#if INSIDE_CORLIB && FULL_AOT_RUNTIME
-			// we do not want CryptoConfig to bring the whole crypto stack
-			// in particular Rijndael which is not supported by CommonCrypto
-			switch (algorithm) {
-			case "DES":
-				sa = DES.Create ();
-				break;
-			case "RC2":
-				sa = RC2.Create ();
-				break;
-			case "TripleDES":
-				sa = TripleDES.Create ();
-				break;
-			case "RC4":
-				sa = RC4.Create ();
-				break;
-			default:
-				throw new NotSupportedException (algorithm);
-			}
-#else
-			sa = SymmetricAlgorithm.Create (algorithm);
-#endif
-			sa.Key = pd.DeriveKey (keyLength);
+            sa = SymmetricAlgorithm.Create(algorithm);
+            sa.Key = pd.DeriveKey (keyLength);
 			// IV required only for block ciphers (not stream ciphers)
 			if (ivLength > 0) {
 				sa.IV = pd.DeriveIV (ivLength);
@@ -1968,34 +1929,5 @@ namespace Mono.Security.X509 {
 				password_max_length = value;
 			}
 		}
-
-		// static methods
-
-		static private byte[] LoadFile (string filename) 
-		{
-			byte[] data = null;
-			using (FileStream fs = File.OpenRead (filename)) {
-				data = new byte [fs.Length];
-				fs.Read (data, 0, data.Length);
-				fs.Close ();
-			}
-			return data;
-		}
-
-		static public PKCS12 LoadFromFile (string filename) 
-		{
-			if (filename == null)
-				throw new ArgumentNullException ("filename");
-
-			return new PKCS12 (LoadFile (filename));
-		}
-
-		static public PKCS12 LoadFromFile (string filename, string password) 
-		{
-			if (filename == null)
-				throw new ArgumentNullException ("filename");
-
-			return new PKCS12 (LoadFile (filename), password);
-		}
 	}
 }

+ 2 - 9
MediaBrowser.Server.Mono/Security/PKCS7.cs

@@ -33,16 +33,9 @@ using System;
 using System.Collections;
 using System.Security.Cryptography;
 
-using Mono.Security.X509;
+namespace MediaBrowser.Server.Mono.Security {
 
-namespace Mono.Security {
-
-#if INSIDE_CORLIB
-	internal
-#else
-	public
-#endif
-	sealed class PKCS7 {
+    public sealed class PKCS7 {
 
 		public class Oid {
 			// pkcs 1

+ 11 - 22
MediaBrowser.Server.Mono/Security/PKCS8.cs

@@ -33,14 +33,9 @@ using System;
 using System.Collections;
 using System.Security.Cryptography;
 
-using Mono.Security.X509;
+namespace MediaBrowser.Server.Mono.Security {
 
-namespace Mono.Security.Cryptography {
-
-#if !INSIDE_CORLIB
-	public 
-#endif
-	sealed class PKCS8 {
+    public sealed class PKCS8 {
 
 		public enum KeyInfo {
 			PrivateKey,
@@ -277,21 +272,15 @@ namespace Mono.Security.Cryptography {
 					rsa.ImportParameters (param);
 				}
 				catch (CryptographicException) {
-#if MONOTOUCH
-					// there's no machine-wide store available for iOS so we can drop the dependency on
-					// CspParameters (which drops other things, like XML key persistance, unless used elsewhere)
-					throw;
-#else
-					// this may cause problem when this code is run under
-					// the SYSTEM identity on Windows (e.g. ASP.NET). See
-					// http://bugzilla.ximian.com/show_bug.cgi?id=77559
-					CspParameters csp = new CspParameters ();
-					csp.Flags = CspProviderFlags.UseMachineKeyStore;
-					rsa = new RSACryptoServiceProvider (csp);
-					rsa.ImportParameters (param);
-#endif
-				}
-				return rsa;
+                    // this may cause problem when this code is run under
+                    // the SYSTEM identity on Windows (e.g. ASP.NET). See
+                    // http://bugzilla.ximian.com/show_bug.cgi?id=77559
+                    CspParameters csp = new CspParameters();
+                    csp.Flags = CspProviderFlags.UseMachineKeyStore;
+                    rsa = new RSACryptoServiceProvider(csp);
+                    rsa.ImportParameters(param);
+                }
+                return rsa;
 			}
 
 			/*

+ 2 - 10
MediaBrowser.Server.Mono/Security/X501Name.cs

@@ -31,10 +31,7 @@ using System;
 using System.Globalization;
 using System.Text;
 
-using Mono.Security;
-using Mono.Security.Cryptography;
-
-namespace Mono.Security.X509 {
+namespace MediaBrowser.Server.Mono.Security {
 
 	// References:
 	// 1.	Information technology - Open Systems Interconnection - The Directory: Models
@@ -49,12 +46,7 @@ namespace Mono.Security.X509 {
 	 * 
 	 * RelativeDistinguishedName ::= SET OF AttributeTypeAndValue
 	 */
-#if INSIDE_CORLIB
-	internal
-#else
-	public 
-#endif
-	sealed class X501 {
+    public sealed class X501 {
 
 		static byte[] countryName = { 0x55, 0x04, 0x06 };
 		static byte[] organizationName = { 0x55, 0x04, 0x0A };

+ 1 - 3
MediaBrowser.Server.Mono/Security/X509Builder.cs

@@ -33,9 +33,7 @@ using System;
 using System.Globalization;
 using System.Security.Cryptography;
 
-using Mono.Security;
-
-namespace Mono.Security.X509 {
+namespace MediaBrowser.Server.Mono.Security {
 
 	public abstract class X509Builder {
 

+ 9 - 14
MediaBrowser.Server.Mono/Security/X509Certificate.cs

@@ -31,26 +31,21 @@
 using System;
 using System.Runtime.Serialization;
 using System.Security.Cryptography;
-using SSCX = System.Security.Cryptography.X509Certificates;
 using System.Security.Permissions;
 using System.Text;
-using Mono.Security.Cryptography;
 
-namespace Mono.Security.X509 {
+namespace MediaBrowser.Server.Mono.Security {
 
-	// References:
-	// a.	Internet X.509 Public Key Infrastructure Certificate and CRL Profile
-	//	http://www.ietf.org/rfc/rfc3280.txt
-	// b.	ITU ASN.1 standards (free download)
-	//	http://www.itu.int/ITU-T/studygroups/com17/languages/
+    // References:
+    // a.	Internet X.509 Public Key Infrastructure Certificate and CRL Profile
+    //	http://www.ietf.org/rfc/rfc3280.txt
+    // b.	ITU ASN.1 standards (free download)
+    //	http://www.itu.int/ITU-T/studygroups/com17/languages/
 
-#if INSIDE_CORLIB
-	internal class X509Certificate : ISerializable {
-#else
-	public class X509Certificate : ISerializable {
-#endif
+    public class X509Certificate : ISerializable
+    {
 
-		private ASN1 decoder;
+        private ASN1 decoder;
 
 		private byte[] m_encodedcert;
 		private DateTime m_from;

+ 1 - 1
MediaBrowser.Server.Mono/Security/X509CertificateBuilder.cs

@@ -32,7 +32,7 @@
 using System;
 using System.Security.Cryptography;
 
-namespace Mono.Security.X509 {
+namespace MediaBrowser.Server.Mono.Security {
 	// From RFC3280
 	/*
 	 * Certificate  ::=  SEQUENCE  {

+ 2 - 7
MediaBrowser.Server.Mono/Security/X509CertificateCollection.cs

@@ -31,15 +31,10 @@
 using System;
 using System.Collections;
 
-namespace Mono.Security.X509 {
+namespace MediaBrowser.Server.Mono.Security {
 
 	[Serializable]
-#if INSIDE_CORLIB
-	internal
-#else
-	public 
-#endif
-	class X509CertificateCollection : CollectionBase, IEnumerable {
+    public class X509CertificateCollection : CollectionBase, IEnumerable {
 		
 		public X509CertificateCollection () 
 		{

+ 2 - 9
MediaBrowser.Server.Mono/Security/X509Extension.cs

@@ -31,9 +31,7 @@ using System;
 using System.Globalization;
 using System.Text;
 
-using Mono.Security;
-
-namespace Mono.Security.X509 {
+namespace MediaBrowser.Server.Mono.Security {
 	/*
 	 * Extension  ::=  SEQUENCE  {
 	 *	extnID      OBJECT IDENTIFIER,
@@ -41,12 +39,7 @@ namespace Mono.Security.X509 {
 	 *	extnValue   OCTET STRING  
 	 * }
 	 */
-#if INSIDE_CORLIB
-	internal
-#else
-	public 
-#endif
-	class X509Extension {
+    public class X509Extension {
 
 		protected string extnOid;
 		protected bool extnCritical;

+ 2 - 9
MediaBrowser.Server.Mono/Security/X509Extensions.cs

@@ -32,20 +32,13 @@
 using System;
 using System.Collections;
 
-using Mono.Security;
-
-namespace Mono.Security.X509 {
+namespace MediaBrowser.Server.Mono.Security {
 	/*
 	 * Extensions  ::=  SEQUENCE SIZE (1..MAX) OF Extension
 	 * 
 	 * Note: 1..MAX -> There shouldn't be 0 Extensions in the ASN1 structure
 	 */
-#if INSIDE_CORLIB
-	internal
-#else
-	public 
-#endif
-	sealed class X509ExtensionCollection : CollectionBase, IEnumerable {
+    public sealed class X509ExtensionCollection : CollectionBase, IEnumerable {
 
 		private bool readOnly;
 

+ 2 - 10
MediaBrowser.Server.Mono/Security/X520Attributes.cs

@@ -28,12 +28,9 @@
 //
 
 using System;
-using System.Globalization;
 using System.Text;
 
-using Mono.Security;
-
-namespace Mono.Security.X509 {
+namespace MediaBrowser.Server.Mono.Security {
 
 	// References:
 	// 1.	Information technology - Open Systems Interconnection - The Directory: Selected attribute types 
@@ -55,12 +52,7 @@ namespace Mono.Security.X509 {
 	 * 
 	 * AttributeValue ::= ANY DEFINED BY AttributeType
 	 */
-#if INSIDE_CORLIB
-	internal
-#else
-	public 
-#endif
-	class X520 {
+    public class X520 {
 
 		public abstract class AttributeTypeAndValue {
 			private string oid;

+ 2 - 2
MediaBrowser.Server.Startup.Common/ApplicationHost.cs

@@ -418,7 +418,7 @@ namespace MediaBrowser.Server.Startup.Common
 
             RegisterSingleInstance(ServerConfigurationManager);
 
-            LocalizationManager = new LocalizationManager(ServerConfigurationManager, FileSystemManager, JsonSerializer);
+            LocalizationManager = new LocalizationManager(ServerConfigurationManager, FileSystemManager, JsonSerializer, LogManager.GetLogger("LocalizationManager"));
             RegisterSingleInstance(LocalizationManager);
 
             RegisterSingleInstance<IBlurayExaminer>(() => new BdInfoExaminer());
@@ -489,7 +489,7 @@ namespace MediaBrowser.Server.Startup.Common
             var encryptionManager = new EncryptionManager();
             RegisterSingleInstance<IEncryptionManager>(encryptionManager);
 
-            ConnectManager = new ConnectManager(LogManager.GetLogger("Connect"), ApplicationPaths, JsonSerializer, encryptionManager, HttpClient, this, ServerConfigurationManager, UserManager, ProviderManager, SecurityManager, FileSystemManager);
+            ConnectManager = new ConnectManager(LogManager.GetLogger("ConnectManager"), ApplicationPaths, JsonSerializer, encryptionManager, HttpClient, this, ServerConfigurationManager, UserManager, ProviderManager, SecurityManager, FileSystemManager);
             RegisterSingleInstance(ConnectManager);
 
             DeviceManager = new DeviceManager(new DeviceRepository(ApplicationPaths, JsonSerializer, LogManager.GetLogger("DeviceManager"), FileSystemManager), UserManager, FileSystemManager, LibraryMonitor, ServerConfigurationManager, LogManager.GetLogger("DeviceManager"), NetworkManager);