Browse Source

Merge pull request #2028 from MediaBrowser/dev

Dev
Luke 9 years ago
parent
commit
1c130127c1

+ 1 - 1
MediaBrowser.Api/ApiEntryPoint.cs

@@ -349,7 +349,7 @@ namespace MediaBrowser.Api
                 return;
             }
 
-            var timerDuration = 1000;
+            var timerDuration = 10000;
 
             if (job.Type != TranscodingJobType.Progressive)
             {

+ 17 - 3
MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs

@@ -142,7 +142,8 @@ namespace MediaBrowser.Api.Playback.Progressive
             var outputPath = state.OutputFilePath;
             var outputPathExists = FileSystem.FileExists(outputPath);
 
-            var isTranscodeCached = outputPathExists && !ApiEntryPoint.Instance.HasActiveTranscodingJob(outputPath, TranscodingJobType.Progressive);
+            var transcodingJob = ApiEntryPoint.Instance.GetTranscodingJob(outputPath, TranscodingJobType.Progressive);
+            var isTranscodeCached = outputPathExists && transcodingJob != null;
 
             AddDlnaHeaders(state, responseHeaders, request.Static || isTranscodeCached);
 
@@ -159,6 +160,7 @@ namespace MediaBrowser.Api.Playback.Progressive
                         ContentType = contentType,
                         IsHeadRequest = isHeadRequest,
                         Path = state.MediaPath
+
                     }).ConfigureAwait(false);
                 }
             }
@@ -170,13 +172,25 @@ namespace MediaBrowser.Api.Playback.Progressive
 
                 try
                 {
+                    if (transcodingJob != null)
+                    {
+                        ApiEntryPoint.Instance.OnTranscodeBeginRequest(transcodingJob);
+                    }
+
                     return await ResultFactory.GetStaticFileResult(Request, new StaticFileResultOptions
                     {
                         ResponseHeaders = responseHeaders,
                         ContentType = contentType,
                         IsHeadRequest = isHeadRequest,
                         Path = outputPath,
-                        FileShare = FileShare.ReadWrite
+                        FileShare = FileShare.ReadWrite,
+                        OnComplete = () =>
+                        {
+                            if (transcodingJob != null)
+                            {
+                                ApiEntryPoint.Instance.OnTranscodeEndRequest(transcodingJob);
+                            }
+                        }
 
                     }).ConfigureAwait(false);
                 }
@@ -348,7 +362,7 @@ namespace MediaBrowser.Api.Playback.Progressive
                     outputHeaders[item.Key] = item.Value;
                 }
 
-                Func<Stream,Task> streamWriter = stream => new ProgressiveFileCopier(FileSystem, job, Logger).StreamFile(outputPath, stream, CancellationToken.None);
+                Func<Stream, Task> streamWriter = stream => new ProgressiveFileCopier(FileSystem, job, Logger).StreamFile(outputPath, stream, CancellationToken.None);
 
                 return ResultFactory.GetAsyncStreamWriter(streamWriter, outputHeaders);
             }

+ 26 - 16
MediaBrowser.Api/Playback/Progressive/ProgressiveStreamWriter.cs

@@ -27,31 +27,41 @@ namespace MediaBrowser.Api.Playback.Progressive
 
         public async Task StreamFile(string path, Stream outputStream, CancellationToken cancellationToken)
         {
-            var eofCount = 0;
-
-            using (var fs = _fileSystem.GetFileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite, true))
+            try
             {
-                while (eofCount < 15)
+                var eofCount = 0;
+
+                using (var fs = _fileSystem.GetFileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite, true))
                 {
-                    var bytesRead = await CopyToAsyncInternal(fs, outputStream, BufferSize, cancellationToken).ConfigureAwait(false);
+                    while (eofCount < 15)
+                    {
+                        var bytesRead = await CopyToAsyncInternal(fs, outputStream, BufferSize, cancellationToken).ConfigureAwait(false);
 
-                    //var position = fs.Position;
-                    //_logger.Debug("Streamed {0} bytes to position {1} from file {2}", bytesRead, position, path);
+                        //var position = fs.Position;
+                        //_logger.Debug("Streamed {0} bytes to position {1} from file {2}", bytesRead, position, path);
 
-                    if (bytesRead == 0)
-                    {
-                        if (_job == null || _job.HasExited)
+                        if (bytesRead == 0)
                         {
-                            eofCount++;
+                            if (_job == null || _job.HasExited)
+                            {
+                                eofCount++;
+                            }
+                            await Task.Delay(100, cancellationToken).ConfigureAwait(false);
+                        }
+                        else
+                        {
+                            eofCount = 0;
                         }
-                        await Task.Delay(100, cancellationToken).ConfigureAwait(false);
-                    }
-                    else
-                    {
-                        eofCount = 0;
                     }
                 }
             }
+            finally
+            {
+                if (_job != null)
+                {
+                    ApiEntryPoint.Instance.OnTranscodeEndRequest(_job);
+                }
+            }
         }
 
         private async Task<int> CopyToAsyncInternal(Stream source, Stream destination, Int32 bufferSize, CancellationToken cancellationToken)

+ 23 - 22
MediaBrowser.Controller/Providers/DirectoryService.cs

@@ -100,28 +100,29 @@ namespace MediaBrowser.Controller.Providers
 
         public FileSystemMetadata GetFile(string path)
         {
-            var directory = Path.GetDirectoryName(path);
-
-            if (string.IsNullOrWhiteSpace(directory))
-            {
-                _logger.Debug("Parent path is null for {0}", path);
-                return null;
-            }
-
-            try
-            {
-                var dict = GetFileSystemDictionary(directory, false);
-
-                FileSystemMetadata entry;
-                dict.TryGetValue(path, out entry);
-
-                return entry;
-            }
-            catch (Exception ex)
-            {
-                _logger.ErrorException("Error in GetFileSystemDictionary. Directory: :{0}. Original path: {1}", ex, directory, path);
-                return null;
-            }
+            return _fileSystem.GetFileInfo(path);
+            //var directory = Path.GetDirectoryName(path);
+
+            //if (string.IsNullOrWhiteSpace(directory))
+            //{
+            //    _logger.Debug("Parent path is null for {0}", path);
+            //    return null;
+            //}
+
+            //try
+            //{
+            //    var dict = GetFileSystemDictionary(directory, false);
+
+            //    FileSystemMetadata entry;
+            //    dict.TryGetValue(path, out entry);
+
+            //    return entry;
+            //}
+            //catch (Exception ex)
+            //{
+            //    _logger.ErrorException("Error in GetFileSystemDictionary. Directory: :{0}. Original path: {1}", ex, directory, path);
+            //    return null;
+            //}
         }
 
         public IEnumerable<FileSystemMetadata> GetDirectories(string path)

+ 5 - 0
MediaBrowser.sln

@@ -13,6 +13,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
 		Performance3.psess = Performance3.psess
 		Performance4.psess = Performance4.psess
 		Performance5.psess = Performance5.psess
+		Performance6.psess = Performance6.psess
+		Performance7.psess = Performance7.psess
 	EndProjectSection
 EndProject
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget (2)", ".nuget (2)", "{E60FB157-87E2-4A41-8B04-27EA49B63B4D}"
@@ -63,6 +65,9 @@ EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Emby.Drawing", "Emby.Drawing\Emby.Drawing.csproj", "{08FFF49B-F175-4807-A2B5-73B0EBD9F716}"
 EndProject
 Global
+	GlobalSection(Performance) = preSolution
+		HasPerformanceSessions = true
+	EndGlobalSection
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
 		Debug|Mixed Platforms = Debug|Mixed Platforms