aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Api/Playback/BaseStreamingService.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Api/Playback/BaseStreamingService.cs')
-rw-r--r--MediaBrowser.Api/Playback/BaseStreamingService.cs63
1 files changed, 52 insertions, 11 deletions
diff --git a/MediaBrowser.Api/Playback/BaseStreamingService.cs b/MediaBrowser.Api/Playback/BaseStreamingService.cs
index 6c12452fc..a1c32dc63 100644
--- a/MediaBrowser.Api/Playback/BaseStreamingService.cs
+++ b/MediaBrowser.Api/Playback/BaseStreamingService.cs
@@ -1,8 +1,10 @@
using MediaBrowser.Common.Extensions;
using MediaBrowser.Common.IO;
+using MediaBrowser.Common.MediaInfo;
using MediaBrowser.Controller;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Library;
+using MediaBrowser.Controller.Providers.MediaInfo;
using MediaBrowser.Model.Drawing;
using MediaBrowser.Model.Dto;
using MediaBrowser.Model.Entities;
@@ -47,18 +49,26 @@ namespace MediaBrowser.Api.Playback
protected IIsoManager IsoManager { get; set; }
/// <summary>
+ /// Gets or sets the media encoder.
+ /// </summary>
+ /// <value>The media encoder.</value>
+ protected IMediaEncoder MediaEncoder { get; set; }
+
+ /// <summary>
/// Initializes a new instance of the <see cref="BaseStreamingService" /> class.
/// </summary>
/// <param name="appPaths">The app paths.</param>
/// <param name="userManager">The user manager.</param>
/// <param name="libraryManager">The library manager.</param>
/// <param name="isoManager">The iso manager.</param>
- protected BaseStreamingService(IServerApplicationPaths appPaths, IUserManager userManager, ILibraryManager libraryManager, IIsoManager isoManager)
+ /// <param name="mediaEncoder">The media encoder.</param>
+ protected BaseStreamingService(IServerApplicationPaths appPaths, IUserManager userManager, ILibraryManager libraryManager, IIsoManager isoManager, IMediaEncoder mediaEncoder)
{
ApplicationPaths = appPaths;
UserManager = userManager;
LibraryManager = libraryManager;
IsoManager = isoManager;
+ MediaEncoder = mediaEncoder;
}
/// <summary>
@@ -309,9 +319,17 @@ namespace MediaBrowser.Api.Playback
if (!File.Exists(path))
{
- var success = Kernel.Instance.FFMpegManager.ExtractTextSubtitle(video, subtitleStream.Index, path, CancellationToken.None).Result;
+ InputType type;
+
+ var inputPath = MediaEncoderHelpers.GetInputArgument(video, null, out type);
- if (!success)
+ try
+ {
+ var task = MediaEncoder.ExtractTextSubtitle(inputPath, type, subtitleStream.Index, path, CancellationToken.None);
+
+ Task.WaitAll(task);
+ }
+ catch
{
return null;
}
@@ -332,9 +350,13 @@ namespace MediaBrowser.Api.Playback
if (!File.Exists(path))
{
- var success = Kernel.Instance.FFMpegManager.ConvertTextSubtitle(subtitleStream, path, CancellationToken.None).Result;
+ try
+ {
+ var task = MediaEncoder.ConvertTextSubtitleToAss(subtitleStream.Path, path, CancellationToken.None);
- if (!success)
+ Task.WaitAll(task);
+ }
+ catch
{
return null;
}
@@ -366,6 +388,16 @@ namespace MediaBrowser.Api.Playback
}
/// <summary>
+ /// Gets the probe size argument.
+ /// </summary>
+ /// <param name="item">The item.</param>
+ /// <returns>System.String.</returns>
+ protected string GetProbeSizeArgument(BaseItem item)
+ {
+ return MediaEncoder.GetProbeSizeArgument(MediaEncoderHelpers.GetInputType(item));
+ }
+
+ /// <summary>
/// Gets the number of audio channels to specify on the command line
/// </summary>
/// <param name="request">The request.</param>
@@ -477,9 +509,18 @@ namespace MediaBrowser.Api.Playback
/// <returns>System.String.</returns>
protected string GetInputArgument(BaseItem item, IIsoMount isoMount)
{
- return isoMount == null ?
- Kernel.Instance.FFMpegManager.GetInputArgument(item) :
- Kernel.Instance.FFMpegManager.GetInputArgument(item as Video, isoMount);
+ var type = InputType.AudioFile;
+
+ var inputPath = new[] { item.Path };
+
+ var video = item as Video;
+
+ if (video != null)
+ {
+ inputPath = MediaEncoderHelpers.GetInputArgument(video, isoMount, out type);
+ }
+
+ return MediaEncoder.GetInputArgument(inputPath, type);
}
/// <summary>
@@ -508,8 +549,8 @@ namespace MediaBrowser.Api.Playback
RedirectStandardOutput = true,
RedirectStandardError = true,
- FileName = Kernel.Instance.FFMpegManager.FFMpegPath,
- WorkingDirectory = Path.GetDirectoryName(Kernel.Instance.FFMpegManager.FFMpegPath),
+ FileName = MediaEncoder.EncoderPath,
+ WorkingDirectory = Path.GetDirectoryName(MediaEncoder.EncoderPath),
Arguments = GetCommandLineArguments(outputPath, state),
WindowStyle = ProcessWindowStyle.Hidden,
@@ -655,7 +696,7 @@ namespace MediaBrowser.Api.Playback
}
state.AudioStream = GetMediaStream(media.MediaStreams, null, MediaStreamType.Audio, true);
-
+
return state;
}