aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2013-04-27 09:10:24 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2013-04-27 09:10:24 -0400
commit40c2b73d63d275d5001db96fb3bed02c15c5bd97 (patch)
tree0f973696f45fc8c3d78c8789beeed0bd2da95e83
parent921e4528ff6d971814839ebaa1314f96110fc3c2 (diff)
fixed subtitle offsets
-rw-r--r--MediaBrowser.Api/Playback/BaseStreamingService.cs23
-rw-r--r--MediaBrowser.Common/MediaInfo/IMediaEncoder.cs3
-rw-r--r--MediaBrowser.Server.Implementations/MediaEncoder/MediaEncoder.cs3
3 files changed, 14 insertions, 15 deletions
diff --git a/MediaBrowser.Api/Playback/BaseStreamingService.cs b/MediaBrowser.Api/Playback/BaseStreamingService.cs
index cddd05197..6cc0b9241 100644
--- a/MediaBrowser.Api/Playback/BaseStreamingService.cs
+++ b/MediaBrowser.Api/Playback/BaseStreamingService.cs
@@ -290,22 +290,14 @@ namespace MediaBrowser.Api.Playback
/// <returns>System.String.</returns>
protected string GetTextSubtitleParam(Video video, MediaStream subtitleStream, long? startTimeTicks)
{
- var path = subtitleStream.IsExternal ? GetConvertedAssPath(video, subtitleStream) : GetExtractedAssPath(video, subtitleStream, startTimeTicks);
+ var path = subtitleStream.IsExternal ? GetConvertedAssPath(video, subtitleStream, startTimeTicks) : GetExtractedAssPath(video, subtitleStream, startTimeTicks);
if (string.IsNullOrEmpty(path))
{
return string.Empty;
}
- var param = string.Format(",ass='{0}'", path.Replace('\\', '/').Replace(":/", "\\:/"));
-
- if (startTimeTicks.HasValue && subtitleStream.IsExternal)
- {
- var seconds = Convert.ToInt32(TimeSpan.FromTicks(startTimeTicks.Value).TotalSeconds);
- param += string.Format(",setpts=PTS-{0}/TB", seconds);
- }
-
- return param;
+ return string.Format(",ass='{0}'", path.Replace('\\', '/').Replace(":/", "\\:/"));
}
/// <summary>
@@ -347,16 +339,21 @@ namespace MediaBrowser.Api.Playback
/// </summary>
/// <param name="video">The video.</param>
/// <param name="subtitleStream">The subtitle stream.</param>
+ /// <param name="startTimeTicks">The start time ticks.</param>
/// <returns>System.String.</returns>
- private string GetConvertedAssPath(Video video, MediaStream subtitleStream)
+ private string GetConvertedAssPath(Video video, MediaStream subtitleStream, long? startTimeTicks)
{
- var path = Kernel.Instance.FFMpegManager.GetSubtitleCachePath(video, subtitleStream.Index, null, ".ass");
+ var offset = startTimeTicks.HasValue
+ ? TimeSpan.FromTicks(startTimeTicks.Value)
+ : TimeSpan.FromTicks(0);
+
+ var path = Kernel.Instance.FFMpegManager.GetSubtitleCachePath(video, subtitleStream.Index, offset, ".ass");
if (!File.Exists(path))
{
try
{
- var task = MediaEncoder.ConvertTextSubtitleToAss(subtitleStream.Path, path, CancellationToken.None);
+ var task = MediaEncoder.ConvertTextSubtitleToAss(subtitleStream.Path, path, offset, CancellationToken.None);
Task.WaitAll(task);
}
diff --git a/MediaBrowser.Common/MediaInfo/IMediaEncoder.cs b/MediaBrowser.Common/MediaInfo/IMediaEncoder.cs
index 8dc18067c..6d606e684 100644
--- a/MediaBrowser.Common/MediaInfo/IMediaEncoder.cs
+++ b/MediaBrowser.Common/MediaInfo/IMediaEncoder.cs
@@ -49,9 +49,10 @@ namespace MediaBrowser.Common.MediaInfo
/// </summary>
/// <param name="inputPath">The input path.</param>
/// <param name="outputPath">The output path.</param>
+ /// <param name="offset">The offset.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>Task.</returns>
- Task ConvertTextSubtitleToAss(string inputPath, string outputPath, CancellationToken cancellationToken);
+ Task ConvertTextSubtitleToAss(string inputPath, string outputPath, TimeSpan offset, CancellationToken cancellationToken);
/// <summary>
/// Gets the media info.
diff --git a/MediaBrowser.Server.Implementations/MediaEncoder/MediaEncoder.cs b/MediaBrowser.Server.Implementations/MediaEncoder/MediaEncoder.cs
index eda2506d1..b52b0c93c 100644
--- a/MediaBrowser.Server.Implementations/MediaEncoder/MediaEncoder.cs
+++ b/MediaBrowser.Server.Implementations/MediaEncoder/MediaEncoder.cs
@@ -535,13 +535,14 @@ namespace MediaBrowser.Server.Implementations.MediaEncoder
/// </summary>
/// <param name="inputPath">The input path.</param>
/// <param name="outputPath">The output path.</param>
+ /// <param name="offset">The offset.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>Task.</returns>
/// <exception cref="System.ArgumentNullException">inputPath
/// or
/// outputPath</exception>
/// <exception cref="System.ApplicationException"></exception>
- public async Task ConvertTextSubtitleToAss(string inputPath, string outputPath, CancellationToken cancellationToken)
+ public async Task ConvertTextSubtitleToAss(string inputPath, string outputPath, TimeSpan offset, CancellationToken cancellationToken)
{
if (string.IsNullOrEmpty(inputPath))
{