mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-03-06 10:16:18 +00:00
make media encoding project portable
This commit is contained in:
@@ -7,15 +7,13 @@ using MediaBrowser.Model.Logging;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using MediaBrowser.Common.IO;
|
||||
using MediaBrowser.Controller.IO;
|
||||
using MediaBrowser.Model.IO;
|
||||
using MediaBrowser.Model.Diagnostics;
|
||||
|
||||
namespace MediaBrowser.MediaEncoding.Encoder
|
||||
{
|
||||
public class AudioEncoder : BaseEncoder
|
||||
{
|
||||
public AudioEncoder(MediaEncoder mediaEncoder, ILogger logger, IServerConfigurationManager configurationManager, IFileSystem fileSystem, IIsoManager isoManager, ILibraryManager libraryManager, ISessionManager sessionManager, ISubtitleEncoder subtitleEncoder, IMediaSourceManager mediaSourceManager) : base(mediaEncoder, logger, configurationManager, fileSystem, isoManager, libraryManager, sessionManager, subtitleEncoder, mediaSourceManager)
|
||||
public AudioEncoder(MediaEncoder mediaEncoder, ILogger logger, IServerConfigurationManager configurationManager, IFileSystem fileSystem, IIsoManager isoManager, ILibraryManager libraryManager, ISessionManager sessionManager, ISubtitleEncoder subtitleEncoder, IMediaSourceManager mediaSourceManager, IProcessFactory processFactory) : base(mediaEncoder, logger, configurationManager, fileSystem, isoManager, libraryManager, sessionManager, subtitleEncoder, mediaSourceManager, processFactory)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -116,5 +114,6 @@ namespace MediaBrowser.MediaEncoding.Encoder
|
||||
{
|
||||
get { return false; }
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,15 +11,12 @@ using MediaBrowser.Model.Logging;
|
||||
using MediaBrowser.Model.MediaInfo;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using MediaBrowser.Common.IO;
|
||||
using MediaBrowser.Controller.IO;
|
||||
using MediaBrowser.Model.IO;
|
||||
using MediaBrowser.Model.Diagnostics;
|
||||
using MediaBrowser.Model.Dlna;
|
||||
|
||||
namespace MediaBrowser.MediaEncoding.Encoder
|
||||
@@ -35,6 +32,7 @@ namespace MediaBrowser.MediaEncoding.Encoder
|
||||
protected readonly ISessionManager SessionManager;
|
||||
protected readonly ISubtitleEncoder SubtitleEncoder;
|
||||
protected readonly IMediaSourceManager MediaSourceManager;
|
||||
protected IProcessFactory ProcessFactory;
|
||||
|
||||
protected readonly CultureInfo UsCulture = new CultureInfo("en-US");
|
||||
|
||||
@@ -46,7 +44,7 @@ namespace MediaBrowser.MediaEncoding.Encoder
|
||||
ILibraryManager libraryManager,
|
||||
ISessionManager sessionManager,
|
||||
ISubtitleEncoder subtitleEncoder,
|
||||
IMediaSourceManager mediaSourceManager)
|
||||
IMediaSourceManager mediaSourceManager, IProcessFactory processFactory)
|
||||
{
|
||||
MediaEncoder = mediaEncoder;
|
||||
Logger = logger;
|
||||
@@ -57,6 +55,7 @@ namespace MediaBrowser.MediaEncoding.Encoder
|
||||
SessionManager = sessionManager;
|
||||
SubtitleEncoder = subtitleEncoder;
|
||||
MediaSourceManager = mediaSourceManager;
|
||||
ProcessFactory = processFactory;
|
||||
}
|
||||
|
||||
public async Task<EncodingJob> Start(EncodingJobOptions options,
|
||||
@@ -75,27 +74,23 @@ namespace MediaBrowser.MediaEncoding.Encoder
|
||||
|
||||
var commandLineArgs = await GetCommandLineArguments(encodingJob).ConfigureAwait(false);
|
||||
|
||||
var process = new Process
|
||||
var process = ProcessFactory.Create(new ProcessOptions
|
||||
{
|
||||
StartInfo = new ProcessStartInfo
|
||||
{
|
||||
CreateNoWindow = true,
|
||||
UseShellExecute = false,
|
||||
CreateNoWindow = true,
|
||||
UseShellExecute = false,
|
||||
|
||||
// Must consume both stdout and stderr or deadlocks may occur
|
||||
//RedirectStandardOutput = true,
|
||||
RedirectStandardError = true,
|
||||
RedirectStandardInput = true,
|
||||
// Must consume both stdout and stderr or deadlocks may occur
|
||||
//RedirectStandardOutput = true,
|
||||
RedirectStandardError = true,
|
||||
RedirectStandardInput = true,
|
||||
|
||||
FileName = MediaEncoder.EncoderPath,
|
||||
Arguments = commandLineArgs,
|
||||
|
||||
WindowStyle = ProcessWindowStyle.Hidden,
|
||||
ErrorDialog = false
|
||||
},
|
||||
FileName = MediaEncoder.EncoderPath,
|
||||
Arguments = commandLineArgs,
|
||||
|
||||
IsHidden = true,
|
||||
ErrorDialog = false,
|
||||
EnableRaisingEvents = true
|
||||
};
|
||||
});
|
||||
|
||||
var workingDirectory = GetWorkingDirectory(options);
|
||||
if (!string.IsNullOrWhiteSpace(workingDirectory))
|
||||
@@ -149,7 +144,7 @@ namespace MediaBrowser.MediaEncoding.Encoder
|
||||
return encodingJob;
|
||||
}
|
||||
|
||||
private void Cancel(Process process, EncodingJob job)
|
||||
private void Cancel(IProcess process, EncodingJob job)
|
||||
{
|
||||
Logger.Info("Killing ffmpeg process for {0}", job.OutputFilePath);
|
||||
|
||||
@@ -164,7 +159,7 @@ namespace MediaBrowser.MediaEncoding.Encoder
|
||||
/// </summary>
|
||||
/// <param name="process">The process.</param>
|
||||
/// <param name="job">The job.</param>
|
||||
private void OnFfMpegProcessExited(Process process, EncodingJob job)
|
||||
private void OnFfMpegProcessExited(IProcess process, EncodingJob job)
|
||||
{
|
||||
job.HasExited = true;
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using MediaBrowser.Model.Diagnostics;
|
||||
using MediaBrowser.Model.Logging;
|
||||
|
||||
namespace MediaBrowser.MediaEncoding.Encoder
|
||||
@@ -8,10 +9,12 @@ namespace MediaBrowser.MediaEncoding.Encoder
|
||||
public class EncoderValidator
|
||||
{
|
||||
private readonly ILogger _logger;
|
||||
private readonly IProcessFactory _processFactory;
|
||||
|
||||
public EncoderValidator(ILogger logger)
|
||||
public EncoderValidator(ILogger logger, IProcessFactory processFactory)
|
||||
{
|
||||
_logger = logger;
|
||||
_processFactory = processFactory;
|
||||
}
|
||||
|
||||
public Tuple<List<string>, List<string>> Validate(string encoderPath)
|
||||
@@ -145,19 +148,16 @@ namespace MediaBrowser.MediaEncoding.Encoder
|
||||
|
||||
private string GetProcessOutput(string path, string arguments)
|
||||
{
|
||||
var process = new Process
|
||||
var process = _processFactory.Create(new ProcessOptions
|
||||
{
|
||||
StartInfo = new ProcessStartInfo
|
||||
{
|
||||
CreateNoWindow = true,
|
||||
UseShellExecute = false,
|
||||
FileName = path,
|
||||
Arguments = arguments,
|
||||
WindowStyle = ProcessWindowStyle.Hidden,
|
||||
ErrorDialog = false,
|
||||
RedirectStandardOutput = true
|
||||
}
|
||||
};
|
||||
CreateNoWindow = true,
|
||||
UseShellExecute = false,
|
||||
FileName = path,
|
||||
Arguments = arguments,
|
||||
IsHidden = true,
|
||||
ErrorDialog = false,
|
||||
RedirectStandardOutput = true
|
||||
});
|
||||
|
||||
_logger.Info("Running {0} {1}", path, arguments);
|
||||
|
||||
|
||||
@@ -88,9 +88,9 @@ namespace MediaBrowser.MediaEncoding.Encoder
|
||||
/// <returns>Task.</returns>
|
||||
private async Task DownloadFontFile(string fontsDirectory, string fontFilename, IProgress<double> progress)
|
||||
{
|
||||
var existingFile = Directory
|
||||
.EnumerateFiles(_appPaths.ProgramDataPath, fontFilename, SearchOption.AllDirectories)
|
||||
.FirstOrDefault();
|
||||
var existingFile = _fileSystem
|
||||
.GetFilePaths(_appPaths.ProgramDataPath, true)
|
||||
.FirstOrDefault(i => string.Equals(fontFilename, Path.GetFileName(i), StringComparison.OrdinalIgnoreCase));
|
||||
|
||||
if (existingFile != null)
|
||||
{
|
||||
|
||||
@@ -14,19 +14,16 @@ using MediaBrowser.Model.MediaInfo;
|
||||
using MediaBrowser.Model.Serialization;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using MediaBrowser.Model.IO;
|
||||
using MediaBrowser.Model.Configuration;
|
||||
using MediaBrowser.Common.Configuration;
|
||||
using MediaBrowser.Common.Extensions;
|
||||
using MediaBrowser.Common.IO;
|
||||
using MediaBrowser.Common.Net;
|
||||
using MediaBrowser.Controller.IO;
|
||||
using MediaBrowser.Model.Diagnostics;
|
||||
|
||||
namespace MediaBrowser.MediaEncoding.Encoder
|
||||
{
|
||||
@@ -81,14 +78,19 @@ namespace MediaBrowser.MediaEncoding.Encoder
|
||||
protected readonly Func<IMediaSourceManager> MediaSourceManager;
|
||||
private readonly IHttpClient _httpClient;
|
||||
private readonly IZipClient _zipClient;
|
||||
private readonly IProcessFactory _processFactory;
|
||||
private readonly IMemoryStreamProvider _memoryStreamProvider;
|
||||
|
||||
private readonly List<ProcessWrapper> _runningProcesses = new List<ProcessWrapper>();
|
||||
private readonly bool _hasExternalEncoder;
|
||||
private string _originalFFMpegPath;
|
||||
private string _originalFFProbePath;
|
||||
private readonly string _originalFFMpegPath;
|
||||
private readonly string _originalFFProbePath;
|
||||
private readonly int DefaultImageExtractionTimeoutMs;
|
||||
private readonly bool EnableEncoderFontFile;
|
||||
|
||||
public MediaEncoder(ILogger logger, IJsonSerializer jsonSerializer, string ffMpegPath, string ffProbePath, bool hasExternalEncoder, IServerConfigurationManager configurationManager, IFileSystem fileSystem, ILiveTvManager liveTvManager, IIsoManager isoManager, ILibraryManager libraryManager, IChannelManager channelManager, ISessionManager sessionManager, Func<ISubtitleEncoder> subtitleEncoder, Func<IMediaSourceManager> mediaSourceManager, IHttpClient httpClient, IZipClient zipClient, IMemoryStreamProvider memoryStreamProvider)
|
||||
public MediaEncoder(ILogger logger, IJsonSerializer jsonSerializer, string ffMpegPath, string ffProbePath, bool hasExternalEncoder, IServerConfigurationManager configurationManager, IFileSystem fileSystem, ILiveTvManager liveTvManager, IIsoManager isoManager, ILibraryManager libraryManager, IChannelManager channelManager, ISessionManager sessionManager, Func<ISubtitleEncoder> subtitleEncoder, Func<IMediaSourceManager> mediaSourceManager, IHttpClient httpClient, IZipClient zipClient, IMemoryStreamProvider memoryStreamProvider, IProcessFactory processFactory,
|
||||
int defaultImageExtractionTimeoutMs,
|
||||
bool enableEncoderFontFile)
|
||||
{
|
||||
_logger = logger;
|
||||
_jsonSerializer = jsonSerializer;
|
||||
@@ -104,6 +106,9 @@ namespace MediaBrowser.MediaEncoding.Encoder
|
||||
_httpClient = httpClient;
|
||||
_zipClient = zipClient;
|
||||
_memoryStreamProvider = memoryStreamProvider;
|
||||
_processFactory = processFactory;
|
||||
DefaultImageExtractionTimeoutMs = defaultImageExtractionTimeoutMs;
|
||||
EnableEncoderFontFile = enableEncoderFontFile;
|
||||
FFProbePath = ffProbePath;
|
||||
FFMpegPath = ffMpegPath;
|
||||
_originalFFProbePath = ffProbePath;
|
||||
@@ -158,12 +163,12 @@ namespace MediaBrowser.MediaEncoding.Encoder
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(FFMpegPath))
|
||||
{
|
||||
var result = new EncoderValidator(_logger).Validate(FFMpegPath);
|
||||
var result = new EncoderValidator(_logger, _processFactory).Validate(FFMpegPath);
|
||||
|
||||
SetAvailableDecoders(result.Item1);
|
||||
SetAvailableEncoders(result.Item2);
|
||||
|
||||
if (Environment.OSVersion.Platform == PlatformID.Win32NT)
|
||||
if (EnableEncoderFontFile)
|
||||
{
|
||||
var directory = Path.GetDirectoryName(FFMpegPath);
|
||||
|
||||
@@ -255,7 +260,7 @@ namespace MediaBrowser.MediaEncoding.Encoder
|
||||
|
||||
private bool ValidateVersion(string path, bool logOutput)
|
||||
{
|
||||
return new EncoderValidator(_logger).ValidateVersion(path, logOutput);
|
||||
return new EncoderValidator(_logger, _processFactory).ValidateVersion(path, logOutput);
|
||||
}
|
||||
|
||||
private void ConfigureEncoderPaths()
|
||||
@@ -509,27 +514,22 @@ namespace MediaBrowser.MediaEncoding.Encoder
|
||||
? "{0} -i {1} -threads 0 -v info -print_format json -show_streams -show_chapters -show_format"
|
||||
: "{0} -i {1} -threads 0 -v info -print_format json -show_streams -show_format";
|
||||
|
||||
var process = new Process
|
||||
var process = _processFactory.Create(new ProcessOptions
|
||||
{
|
||||
StartInfo = new ProcessStartInfo
|
||||
{
|
||||
CreateNoWindow = true,
|
||||
UseShellExecute = false,
|
||||
CreateNoWindow = true,
|
||||
UseShellExecute = false,
|
||||
|
||||
// Must consume both or ffmpeg may hang due to deadlocks. See comments below.
|
||||
RedirectStandardOutput = true,
|
||||
//RedirectStandardError = true,
|
||||
RedirectStandardInput = false,
|
||||
FileName = FFProbePath,
|
||||
Arguments = string.Format(args,
|
||||
probeSizeArgument, inputPath).Trim(),
|
||||
|
||||
WindowStyle = ProcessWindowStyle.Hidden,
|
||||
ErrorDialog = false
|
||||
},
|
||||
// Must consume both or ffmpeg may hang due to deadlocks. See comments below.
|
||||
RedirectStandardOutput = true,
|
||||
//RedirectStandardError = true,
|
||||
RedirectStandardInput = false,
|
||||
FileName = FFProbePath,
|
||||
Arguments = string.Format(args, probeSizeArgument, inputPath).Trim(),
|
||||
|
||||
IsHidden = true,
|
||||
ErrorDialog = false,
|
||||
EnableRaisingEvents = true
|
||||
};
|
||||
});
|
||||
|
||||
_logger.Debug("{0} {1}", process.StartInfo.FileName, process.StartInfo.Arguments);
|
||||
|
||||
@@ -644,26 +644,22 @@ namespace MediaBrowser.MediaEncoding.Encoder
|
||||
|
||||
var args = "{0} -i {1} -map 0:v:{2} -an -filter:v idet -frames:v 500 -an -f null /dev/null";
|
||||
|
||||
var process = new Process
|
||||
var process = _processFactory.Create(new ProcessOptions
|
||||
{
|
||||
StartInfo = new ProcessStartInfo
|
||||
{
|
||||
CreateNoWindow = true,
|
||||
UseShellExecute = false,
|
||||
CreateNoWindow = true,
|
||||
UseShellExecute = false,
|
||||
|
||||
// Must consume both or ffmpeg may hang due to deadlocks. See comments below.
|
||||
//RedirectStandardOutput = true,
|
||||
RedirectStandardError = true,
|
||||
RedirectStandardInput = false,
|
||||
FileName = FFMpegPath,
|
||||
Arguments = string.Format(args, probeSizeArgument, inputPath, videoStream.Index.ToString(CultureInfo.InvariantCulture)).Trim(),
|
||||
|
||||
WindowStyle = ProcessWindowStyle.Hidden,
|
||||
ErrorDialog = false
|
||||
},
|
||||
// Must consume both or ffmpeg may hang due to deadlocks. See comments below.
|
||||
//RedirectStandardOutput = true,
|
||||
RedirectStandardError = true,
|
||||
RedirectStandardInput = false,
|
||||
FileName = FFMpegPath,
|
||||
Arguments = string.Format(args, probeSizeArgument, inputPath, videoStream.Index.ToString(CultureInfo.InvariantCulture)).Trim(),
|
||||
|
||||
IsHidden = true,
|
||||
ErrorDialog = false,
|
||||
EnableRaisingEvents = true
|
||||
};
|
||||
});
|
||||
|
||||
_logger.Debug("{0} {1}", process.StartInfo.FileName, process.StartInfo.Arguments);
|
||||
var idetFoundInterlaced = false;
|
||||
@@ -916,18 +912,15 @@ namespace MediaBrowser.MediaEncoding.Encoder
|
||||
args = string.Format("-ss {0} ", GetTimeParameter(offset.Value)) + args;
|
||||
}
|
||||
|
||||
var process = new Process
|
||||
var process = _processFactory.Create(new ProcessOptions
|
||||
{
|
||||
StartInfo = new ProcessStartInfo
|
||||
{
|
||||
CreateNoWindow = true,
|
||||
UseShellExecute = false,
|
||||
FileName = FFMpegPath,
|
||||
Arguments = args,
|
||||
WindowStyle = ProcessWindowStyle.Hidden,
|
||||
ErrorDialog = false
|
||||
}
|
||||
};
|
||||
CreateNoWindow = true,
|
||||
UseShellExecute = false,
|
||||
FileName = FFMpegPath,
|
||||
Arguments = args,
|
||||
IsHidden = true,
|
||||
ErrorDialog = false
|
||||
});
|
||||
|
||||
_logger.Debug("{0} {1}", process.StartInfo.FileName, process.StartInfo.Arguments);
|
||||
|
||||
@@ -944,7 +937,7 @@ namespace MediaBrowser.MediaEncoding.Encoder
|
||||
var timeoutMs = ConfigurationManager.Configuration.ImageExtractionTimeoutMs;
|
||||
if (timeoutMs <= 0)
|
||||
{
|
||||
timeoutMs = Environment.Is64BitOperatingSystem ? (Environment.ProcessorCount > 2 ? 14000 : 20000) : 40000;
|
||||
timeoutMs = DefaultImageExtractionTimeoutMs;
|
||||
}
|
||||
|
||||
ranToCompletion = process.WaitForExit(timeoutMs);
|
||||
@@ -1022,19 +1015,16 @@ namespace MediaBrowser.MediaEncoding.Encoder
|
||||
args = probeSize + " " + args;
|
||||
}
|
||||
|
||||
var process = new Process
|
||||
var process = _processFactory.Create(new ProcessOptions
|
||||
{
|
||||
StartInfo = new ProcessStartInfo
|
||||
{
|
||||
CreateNoWindow = true,
|
||||
UseShellExecute = false,
|
||||
FileName = FFMpegPath,
|
||||
Arguments = args,
|
||||
WindowStyle = ProcessWindowStyle.Hidden,
|
||||
ErrorDialog = false,
|
||||
RedirectStandardInput = true
|
||||
}
|
||||
};
|
||||
CreateNoWindow = true,
|
||||
UseShellExecute = false,
|
||||
FileName = FFMpegPath,
|
||||
Arguments = args,
|
||||
IsHidden = true,
|
||||
ErrorDialog = false,
|
||||
RedirectStandardInput = true
|
||||
});
|
||||
|
||||
_logger.Info(process.StartInfo.FileName + " " + process.StartInfo.Arguments);
|
||||
|
||||
@@ -1107,7 +1097,8 @@ namespace MediaBrowser.MediaEncoding.Encoder
|
||||
LibraryManager,
|
||||
SessionManager,
|
||||
SubtitleEncoder(),
|
||||
MediaSourceManager())
|
||||
MediaSourceManager(),
|
||||
_processFactory)
|
||||
.Start(options, progress, cancellationToken).ConfigureAwait(false);
|
||||
|
||||
await job.TaskCompletionSource.Task.ConfigureAwait(false);
|
||||
@@ -1127,7 +1118,8 @@ namespace MediaBrowser.MediaEncoding.Encoder
|
||||
LibraryManager,
|
||||
SessionManager,
|
||||
SubtitleEncoder(),
|
||||
MediaSourceManager())
|
||||
MediaSourceManager(),
|
||||
_processFactory)
|
||||
.Start(options, progress, cancellationToken).ConfigureAwait(false);
|
||||
|
||||
await job.TaskCompletionSource.Task.ConfigureAwait(false);
|
||||
@@ -1231,14 +1223,14 @@ namespace MediaBrowser.MediaEncoding.Encoder
|
||||
|
||||
private class ProcessWrapper : IDisposable
|
||||
{
|
||||
public readonly Process Process;
|
||||
public readonly IProcess Process;
|
||||
public bool HasExited;
|
||||
public int? ExitCode;
|
||||
private readonly MediaEncoder _mediaEncoder;
|
||||
private readonly ILogger _logger;
|
||||
public bool IsRedirectingStdin { get; private set; }
|
||||
|
||||
public ProcessWrapper(Process process, MediaEncoder mediaEncoder, ILogger logger, bool isRedirectingStdin)
|
||||
public ProcessWrapper(IProcess process, MediaEncoder mediaEncoder, ILogger logger, bool isRedirectingStdin)
|
||||
{
|
||||
Process = process;
|
||||
_mediaEncoder = mediaEncoder;
|
||||
@@ -1249,7 +1241,7 @@ namespace MediaBrowser.MediaEncoding.Encoder
|
||||
|
||||
void Process_Exited(object sender, EventArgs e)
|
||||
{
|
||||
var process = (Process)sender;
|
||||
var process = (IProcess)sender;
|
||||
|
||||
HasExited = true;
|
||||
|
||||
@@ -1269,7 +1261,7 @@ namespace MediaBrowser.MediaEncoding.Encoder
|
||||
DisposeProcess(process);
|
||||
}
|
||||
|
||||
private void DisposeProcess(Process process)
|
||||
private void DisposeProcess(IProcess process)
|
||||
{
|
||||
try
|
||||
{
|
||||
|
||||
@@ -8,15 +8,13 @@ using MediaBrowser.Model.Logging;
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Threading.Tasks;
|
||||
using MediaBrowser.Common.IO;
|
||||
using MediaBrowser.Controller.IO;
|
||||
using MediaBrowser.Model.IO;
|
||||
using MediaBrowser.Model.Diagnostics;
|
||||
|
||||
namespace MediaBrowser.MediaEncoding.Encoder
|
||||
{
|
||||
public class VideoEncoder : BaseEncoder
|
||||
{
|
||||
public VideoEncoder(MediaEncoder mediaEncoder, ILogger logger, IServerConfigurationManager configurationManager, IFileSystem fileSystem, IIsoManager isoManager, ILibraryManager libraryManager, ISessionManager sessionManager, ISubtitleEncoder subtitleEncoder, IMediaSourceManager mediaSourceManager) : base(mediaEncoder, logger, configurationManager, fileSystem, isoManager, libraryManager, sessionManager, subtitleEncoder, mediaSourceManager)
|
||||
public VideoEncoder(MediaEncoder mediaEncoder, ILogger logger, IServerConfigurationManager configurationManager, IFileSystem fileSystem, IIsoManager isoManager, ILibraryManager libraryManager, ISessionManager sessionManager, ISubtitleEncoder subtitleEncoder, IMediaSourceManager mediaSourceManager, IProcessFactory processFactory) : base(mediaEncoder, logger, configurationManager, fileSystem, isoManager, libraryManager, sessionManager, subtitleEncoder, mediaSourceManager, processFactory)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -193,5 +191,6 @@ namespace MediaBrowser.MediaEncoding.Encoder
|
||||
{
|
||||
get { return true; }
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user