SrtWriter.cs 1.6 KB

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