diff options
Diffstat (limited to 'MediaBrowser.MediaEncoding/Subtitles/VttWriter.cs')
| -rw-r--r-- | MediaBrowser.MediaEncoding/Subtitles/VttWriter.cs | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/MediaBrowser.MediaEncoding/Subtitles/VttWriter.cs b/MediaBrowser.MediaEncoding/Subtitles/VttWriter.cs new file mode 100644 index 0000000000..092add9921 --- /dev/null +++ b/MediaBrowser.MediaEncoding/Subtitles/VttWriter.cs @@ -0,0 +1,44 @@ +using System; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading; +using MediaBrowser.Model.MediaInfo; + +namespace MediaBrowser.MediaEncoding.Subtitles +{ + public class VttWriter : ISubtitleWriter + { + public void Write(SubtitleTrackInfo info, Stream stream, CancellationToken cancellationToken) + { + using (var writer = new StreamWriter(stream, Encoding.UTF8, 1024, true)) + { + writer.WriteLine("WEBVTT"); + writer.WriteLine(string.Empty); + foreach (var trackEvent in info.TrackEvents) + { + cancellationToken.ThrowIfCancellationRequested(); + + TimeSpan startTime = TimeSpan.FromTicks(trackEvent.StartPositionTicks); + TimeSpan endTime = TimeSpan.FromTicks(trackEvent.EndPositionTicks); + + // make sure the start and end times are different and seqential + if (endTime.TotalMilliseconds <= startTime.TotalMilliseconds) + { + endTime = startTime.Add(TimeSpan.FromMilliseconds(1)); + } + + writer.WriteLine(@"{0:hh\:mm\:ss\.fff} --> {1:hh\:mm\:ss\.fff}", startTime, endTime); + + var text = trackEvent.Text; + + // TODO: Not sure how to handle these + text = Regex.Replace(text, @"\\n", " ", RegexOptions.IgnoreCase); + + writer.WriteLine(text); + writer.WriteLine(string.Empty); + } + } + } + } +} |
