| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 | using UnityEngine;using System.Collections.Generic;//-----------------------------------------------------------------------------// Copyright 2015-2021 RenderHeads Ltd.  All rights reserved.//-----------------------------------------------------------------------------namespace RenderHeads.Media.AVProVideo{	public class Subtitle	{		public int index;		// Rich string can contain <font color=""> <u> etc		public string text;		public double timeStart, timeEnd;		public bool IsBefore(double time)		{			return (time > timeStart && time > timeEnd);		}		public bool IsTime(double time)		{			return (time >= timeStart && time < timeEnd);		}	}    public class SubtitlePlayer    {        // min time, max time        // set time        // event for change(subs added, subs removed)        // list of subs on    }    public class SubtitleUtils    {		/// <summary>		/// Parse time in format: 00:00:48,924 and convert to seconds		/// </summary>		private static double ParseTimeToSeconds(string text)		{			double result = 0.0;			string[] digits = text.Split(new char[] { ':', ',' });			if (digits.Length == 4)			{				int hours = int.Parse(digits[0]);				int minutes = int.Parse(digits[1]);				int seconds = int.Parse(digits[2]);				int milliseconds = int.Parse(digits[3]);				result = (milliseconds / 1000.0) + (seconds + (minutes + (hours * 60)) * 60);			}			return result;		}		/// <summary>		/// Parse subtitles in the SRT format and convert to a list of ordered Subtitle objects		/// </summary>		public static List<Subtitle> ParseSubtitlesSRT(string data)		{			List<Subtitle> result = null;			if (!string.IsNullOrEmpty(data))			{				data = data.Trim();				var rx = new System.Text.RegularExpressions.Regex("\n\r|\r\n|\n|\r");				string[] lines = rx.Split(data);				if (lines.Length >= 3)				{					result = new List<Subtitle>(256);					int count = 0;					int index = 0;					Subtitle subtitle = null;					for (int i = 0; i < lines.Length; i++)					{						if (index == 0)						{							subtitle = new Subtitle();							subtitle.index = count;// int.Parse(lines[i]);						}						else if (index == 1)						{							string[] times = lines[i].Split(new string[] { " --> " }, System.StringSplitOptions.RemoveEmptyEntries);							if (times.Length == 2)							{								subtitle.timeStart = ParseTimeToSeconds(times[0]);								subtitle.timeEnd = ParseTimeToSeconds(times[1]);							}							else							{								throw new System.FormatException("SRT format doesn't appear to be valid");							}						}						else						{							if (!string.IsNullOrEmpty(lines[i]))							{								if (index == 2)								{									subtitle.text = lines[i];								}								else								{									subtitle.text += "\n" + lines[i];								}							}						}						if (string.IsNullOrEmpty(lines[i]) && index > 1)						{							result.Add(subtitle);							index = 0;							count++;							subtitle = null;						}						else						{							index++;						}					}					// Handle the last one					if (subtitle != null)					{						result.Add(subtitle);						subtitle = null;					}				}				else				{					Debug.LogWarning("[AVProVideo] SRT format doesn't appear to be valid");				}			}			return result;		}	}}
 |