diff options
| author | LukePulverenti Luke Pulverenti luke pulverenti <LukePulverenti Luke Pulverenti luke.pulverenti@gmail.com> | 2012-08-20 09:36:18 -0400 |
|---|---|---|
| committer | LukePulverenti Luke Pulverenti luke pulverenti <LukePulverenti Luke Pulverenti luke.pulverenti@gmail.com> | 2012-08-20 09:36:18 -0400 |
| commit | 19a4dd83c21db931edf14a0ef547219ef93cdc84 (patch) | |
| tree | 1b968aa7478d1cb13292b222aabe988121a9ab4f | |
| parent | 1187222842d880aa8c6dcd2f4ca13ad5ccd31381 (diff) | |
Extract ffmpeg during init
| -rw-r--r-- | MediaBrowser.Controller/Configuration/ServerApplicationPaths.cs | 39 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Kernel.cs | 38 |
2 files changed, 39 insertions, 38 deletions
diff --git a/MediaBrowser.Controller/Configuration/ServerApplicationPaths.cs b/MediaBrowser.Controller/Configuration/ServerApplicationPaths.cs index b0c4904c9..874e97aed 100644 --- a/MediaBrowser.Controller/Configuration/ServerApplicationPaths.cs +++ b/MediaBrowser.Controller/Configuration/ServerApplicationPaths.cs @@ -1,5 +1,4 @@ using System.IO;
-using System.Reflection;
using MediaBrowser.Common.Configuration;
namespace MediaBrowser.Controller.Configuration
@@ -227,24 +226,7 @@ namespace MediaBrowser.Controller.Configuration {
if (_FFMpegPath == null)
{
- string filename = "ffmpeg.exe";
-
- _FFMpegPath = Path.Combine(FFMpegDirectory, filename);
-
- // Always re-extract the first time to handle new versions
- if (File.Exists(_FFMpegPath))
- {
- File.Delete(_FFMpegPath);
- }
-
- // Extract exe
- using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("MediaBrowser.Controller.FFMpeg." + filename))
- {
- using (FileStream fileStream = new FileStream(_FFMpegPath, FileMode.Create))
- {
- stream.CopyTo(fileStream);
- }
- }
+ _FFMpegPath = Path.Combine(FFMpegDirectory, "ffmpeg.exe");
}
return _FFMpegPath;
@@ -261,24 +243,7 @@ namespace MediaBrowser.Controller.Configuration {
if (_FFProbePath == null)
{
- string filename = "ffprobe.exe";
-
- _FFProbePath = Path.Combine(FFMpegDirectory, filename);
-
- /*// Always re-extract the first time to handle new versions
- if (File.Exists(_FFProbePath))
- {
- File.Delete(_FFProbePath);
- }
-
- // Extract exe
- using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("MediaBrowser.Controller.FFMpeg." + filename))
- {
- using (FileStream fileStream = new FileStream(_FFProbePath, FileMode.Create))
- {
- stream.CopyTo(fileStream);
- }
- }*/
+ _FFProbePath = Path.Combine(FFMpegDirectory, "ffprobe.exe");
}
return _FFProbePath;
diff --git a/MediaBrowser.Controller/Kernel.cs b/MediaBrowser.Controller/Kernel.cs index a6a728698..da0263f6f 100644 --- a/MediaBrowser.Controller/Kernel.cs +++ b/MediaBrowser.Controller/Kernel.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.ComponentModel.Composition;
using System.IO;
using System.Linq;
+using System.Reflection;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
@@ -73,7 +74,10 @@ namespace MediaBrowser.Controller progress.Report(new TaskProgress() { Description = "Loading Users", PercentComplete = 15 });
ReloadUsers();
- progress.Report(new TaskProgress() { Description = "Loading Media Library", PercentComplete = 20 });
+ progress.Report(new TaskProgress() { Description = "Extracting FFMpeg", PercentComplete = 20 });
+ await ExtractFFMpeg();
+
+ progress.Report(new TaskProgress() { Description = "Loading Media Library", PercentComplete = 25 });
await ReloadRoot();
progress.Report(new TaskProgress() { Description = "Loading Complete", PercentComplete = 100 });
@@ -252,8 +256,12 @@ namespace MediaBrowser.Controller return list;
}
+ /// <summary>
+ /// Runs all metadata providers for an entity
+ /// </summary>
internal async Task ExecuteMetadataProviders(BaseEntity item, ItemResolveEventArgs args)
{
+ // Get all supported providers
var supportedProviders = Kernel.Instance.MetadataProviders.Where(i => i.Supports(item));
// Start with non-internet providers. Run them sequentially
@@ -273,6 +281,34 @@ namespace MediaBrowser.Controller }
}
+ /// <summary>
+ /// Run these during Init.
+ /// Can't run do this on-demand because there will be multiple workers accessing them at once and we'd have to lock them
+ /// </summary>
+ private async Task ExtractFFMpeg()
+ {
+ // FFMpeg.exe
+ await ExtractFFMpeg(ApplicationPaths.FFMpegPath);
+ await ExtractFFMpeg(ApplicationPaths.FFProbePath);
+ }
+
+ private async Task ExtractFFMpeg(string exe)
+ {
+ if (File.Exists(exe))
+ {
+ File.Delete(exe);
+ }
+
+ // Extract exe
+ using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("MediaBrowser.Controller.FFMpeg." + Path.GetFileName(exe)))
+ {
+ using (FileStream fileStream = new FileStream(exe, FileMode.Create))
+ {
+ await stream.CopyToAsync(fileStream);
+ }
+ }
+ }
+
protected override void DisposeComposableParts()
{
base.DisposeComposableParts();
|
