diff --git a/MediaBrowser.Api/Playback/BaseStreamingService.cs b/MediaBrowser.Api/Playback/BaseStreamingService.cs index 1510dd472f..cddd051971 100644 --- a/MediaBrowser.Api/Playback/BaseStreamingService.cs +++ b/MediaBrowser.Api/Playback/BaseStreamingService.cs @@ -290,7 +290,7 @@ namespace MediaBrowser.Api.Playback /// System.String. protected string GetTextSubtitleParam(Video video, MediaStream subtitleStream, long? startTimeTicks) { - var path = subtitleStream.IsExternal ? GetConvertedAssPath(video, subtitleStream) : GetExtractedAssPath(video, subtitleStream); + var path = subtitleStream.IsExternal ? GetConvertedAssPath(video, subtitleStream) : GetExtractedAssPath(video, subtitleStream, startTimeTicks); if (string.IsNullOrEmpty(path)) { @@ -299,7 +299,7 @@ namespace MediaBrowser.Api.Playback var param = string.Format(",ass='{0}'", path.Replace('\\', '/').Replace(":/", "\\:/")); - if (startTimeTicks.HasValue) + if (startTimeTicks.HasValue && subtitleStream.IsExternal) { var seconds = Convert.ToInt32(TimeSpan.FromTicks(startTimeTicks.Value).TotalSeconds); param += string.Format(",setpts=PTS-{0}/TB", seconds); @@ -313,10 +313,13 @@ namespace MediaBrowser.Api.Playback /// /// The video. /// The subtitle stream. + /// The start time ticks. /// System.String. - private string GetExtractedAssPath(Video video, MediaStream subtitleStream) + private string GetExtractedAssPath(Video video, MediaStream subtitleStream, long? startTimeTicks) { - var path = Kernel.Instance.FFMpegManager.GetSubtitleCachePath(video, subtitleStream.Index, ".ass"); + var offset = TimeSpan.FromTicks(startTimeTicks ?? 0); + + var path = Kernel.Instance.FFMpegManager.GetSubtitleCachePath(video, subtitleStream.Index, offset, ".ass"); if (!File.Exists(path)) { @@ -326,7 +329,7 @@ namespace MediaBrowser.Api.Playback try { - var task = MediaEncoder.ExtractTextSubtitle(inputPath, type, subtitleStream.Index, path, CancellationToken.None); + var task = MediaEncoder.ExtractTextSubtitle(inputPath, type, subtitleStream.Index, offset, path, CancellationToken.None); Task.WaitAll(task); } @@ -347,7 +350,7 @@ namespace MediaBrowser.Api.Playback /// System.String. private string GetConvertedAssPath(Video video, MediaStream subtitleStream) { - var path = Kernel.Instance.FFMpegManager.GetSubtitleCachePath(video, subtitleStream.Index, ".ass"); + var path = Kernel.Instance.FFMpegManager.GetSubtitleCachePath(video, subtitleStream.Index, null, ".ass"); if (!File.Exists(path)) { diff --git a/MediaBrowser.Common/MediaInfo/IMediaEncoder.cs b/MediaBrowser.Common/MediaInfo/IMediaEncoder.cs index 56223b99cb..8dc18067c6 100644 --- a/MediaBrowser.Common/MediaInfo/IMediaEncoder.cs +++ b/MediaBrowser.Common/MediaInfo/IMediaEncoder.cs @@ -38,10 +38,11 @@ namespace MediaBrowser.Common.MediaInfo /// The input files. /// The type. /// Index of the subtitle stream. + /// The offset. /// The output path. /// The cancellation token. /// Task. - Task ExtractTextSubtitle(string[] inputFiles, InputType type, int subtitleStreamIndex, string outputPath, CancellationToken cancellationToken); + Task ExtractTextSubtitle(string[] inputFiles, InputType type, int subtitleStreamIndex, TimeSpan offset, string outputPath, CancellationToken cancellationToken); /// /// Converts the text subtitle to ass. diff --git a/MediaBrowser.Controller/MediaInfo/FFMpegManager.cs b/MediaBrowser.Controller/MediaInfo/FFMpegManager.cs index 509d1e1879..639e6e6b5c 100644 --- a/MediaBrowser.Controller/MediaInfo/FFMpegManager.cs +++ b/MediaBrowser.Controller/MediaInfo/FFMpegManager.cs @@ -30,7 +30,7 @@ namespace MediaBrowser.Controller.MediaInfo internal FileSystemRepository SubtitleCache { get; set; } private readonly ILibraryManager _libraryManager; - + private readonly IServerApplicationPaths _appPaths; private readonly IMediaEncoder _encoder; @@ -219,11 +219,14 @@ namespace MediaBrowser.Controller.MediaInfo /// /// The input. /// Index of the subtitle stream. + /// The offset. /// The output extension. /// System.String. - public string GetSubtitleCachePath(Video input, int subtitleStreamIndex, string outputExtension) + public string GetSubtitleCachePath(Video input, int subtitleStreamIndex, TimeSpan? offset, string outputExtension) { - return SubtitleCache.GetResourcePath(input.Id + "_" + subtitleStreamIndex + "_" + input.DateModified.Ticks, outputExtension); + var ticksParam = offset.HasValue ? "_" + offset.Value.Ticks : ""; + + return SubtitleCache.GetResourcePath(input.Id + "_" + subtitleStreamIndex + "_" + input.DateModified.Ticks + ticksParam, outputExtension); } } } diff --git a/MediaBrowser.Server.Implementations/Library/LuceneSearchEngine.cs b/MediaBrowser.Server.Implementations/Library/LuceneSearchEngine.cs index a8b0e0225a..a27244a574 100644 --- a/MediaBrowser.Server.Implementations/Library/LuceneSearchEngine.cs +++ b/MediaBrowser.Server.Implementations/Library/LuceneSearchEngine.cs @@ -24,15 +24,15 @@ namespace MediaBrowser.Server.Implementations.Library { public LuceneSearchEngine(IServerApplicationPaths serverPaths, ILogManager logManager) { - string luceneDbPath = serverPaths.DataPath + "\\SearchIndexDB"; - if (!System.IO.Directory.Exists(luceneDbPath)) - System.IO.Directory.CreateDirectory(luceneDbPath); - else if(File.Exists(luceneDbPath + "\\write.lock")) - File.Delete(luceneDbPath + "\\write.lock"); + //string luceneDbPath = serverPaths.DataPath + "\\SearchIndexDB"; + //if (!System.IO.Directory.Exists(luceneDbPath)) + // System.IO.Directory.CreateDirectory(luceneDbPath); + //else if(File.Exists(luceneDbPath + "\\write.lock")) + // File.Delete(luceneDbPath + "\\write.lock"); - LuceneSearch.Init(luceneDbPath, logManager.GetLogger("Lucene")); + //LuceneSearch.Init(luceneDbPath, logManager.GetLogger("Lucene")); - BaseItem.LibraryManager.LibraryChanged += LibraryChanged; + //BaseItem.LibraryManager.LibraryChanged += LibraryChanged; } public void LibraryChanged(object source, ChildrenChangedEventArgs changeInformation) @@ -75,9 +75,9 @@ namespace MediaBrowser.Server.Implementations.Library public void Dispose() { - BaseItem.LibraryManager.LibraryChanged -= LibraryChanged; + //BaseItem.LibraryManager.LibraryChanged -= LibraryChanged; - LuceneSearch.CloseAll(); + //LuceneSearch.CloseAll(); } }