2
0

SrtWriter.cs 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  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. /// <summary>
  11. /// SRT subtitle writer.
  12. /// </summary>
  13. public class SrtWriter : ISubtitleWriter
  14. {
  15. /// <inheritdoc />
  16. public void Write(SubtitleTrackInfo info, Stream stream, CancellationToken cancellationToken)
  17. {
  18. using (var writer = new StreamWriter(stream, Encoding.UTF8, 1024, true))
  19. {
  20. var trackEvents = info.TrackEvents;
  21. for (int i = 0; i < trackEvents.Count; i++)
  22. {
  23. cancellationToken.ThrowIfCancellationRequested();
  24. var trackEvent = trackEvents[i];
  25. writer.WriteLine((i + 1).ToString(CultureInfo.InvariantCulture));
  26. writer.WriteLine(
  27. @"{0:hh\:mm\:ss\,fff} --> {1:hh\:mm\:ss\,fff}",
  28. TimeSpan.FromTicks(trackEvent.StartPositionTicks),
  29. TimeSpan.FromTicks(trackEvent.EndPositionTicks));
  30. var text = trackEvent.Text;
  31. // TODO: Not sure how to handle these
  32. text = Regex.Replace(text, @"\\n", " ", RegexOptions.IgnoreCase);
  33. writer.WriteLine(text);
  34. writer.WriteLine();
  35. }
  36. }
  37. }
  38. }
  39. }