aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.MediaEncoding/Subtitles/VttWriter.cs
diff options
context:
space:
mode:
authorMathieu Velten <matmaul@gmail.com>2018-12-14 10:40:55 +0100
committerMathieu Velten <matmaul@gmail.com>2018-12-14 17:32:54 +0100
commit1d7d52ff9e42c3efb4bb2c65e82a4a82faf9decb (patch)
tree00a3f529458b5e3afa42c97ec4f46e1b65c3cf8e /MediaBrowser.MediaEncoding/Subtitles/VttWriter.cs
parent64805410c21b1e4717a7f030f619bb2e7bd33d2a (diff)
Port MediaEncoding and Api.Playback from 10e57ce8d21b4516733894075001819f3cd6db6b
Diffstat (limited to 'MediaBrowser.MediaEncoding/Subtitles/VttWriter.cs')
-rw-r--r--MediaBrowser.MediaEncoding/Subtitles/VttWriter.cs44
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 000000000..092add992
--- /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);
+ }
+ }
+ }
+ }
+}