SrtWriter.cs 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. using System;
  2. using System.Globalization;
  3. using System.IO;
  4. using System.Text;
  5. using System.Text.RegularExpressions;
  6. using System.Threading;
  7. using MediaBrowser.Model.MediaInfo;
  8. namespace MediaBrowser.MediaEncoding.Subtitles
  9. {
  10. public class SrtWriter : ISubtitleWriter
  11. {
  12. public void Write(SubtitleTrackInfo info, Stream stream, CancellationToken cancellationToken)
  13. {
  14. using (var writer = new StreamWriter(stream, Encoding.UTF8, 1024, true))
  15. {
  16. var trackEvents = info.TrackEvents;
  17. for (int i = 0; i < trackEvents.Count; i++)
  18. {
  19. cancellationToken.ThrowIfCancellationRequested();
  20. var trackEvent = trackEvents[i];
  21. writer.WriteLine((i + 1).ToString(CultureInfo.InvariantCulture));
  22. writer.WriteLine(
  23. @"{0:hh\:mm\:ss\,fff} --> {1:hh\:mm\:ss\,fff}",
  24. TimeSpan.FromTicks(trackEvent.StartPositionTicks),
  25. TimeSpan.FromTicks(trackEvent.EndPositionTicks));
  26. var text = trackEvent.Text;
  27. // TODO: Not sure how to handle these
  28. text = Regex.Replace(text, @"\\n", " ", RegexOptions.IgnoreCase);
  29. writer.WriteLine(text);
  30. writer.WriteLine();
  31. }
  32. }
  33. }
  34. }
  35. }