贵港吾悦商业管理有限公司多角色网上演练(吾悦广场)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

68 lines
2.2 KiB

using System;
using UnityEngine;
namespace FFmpeg
{
/// <summary>
/// This is the Helper class to get FFmpeg operation progress.
/// </summary>
public static class FFmpegProgressParser
{
const string FORMAT = "HH:mm:ss.ff";
static readonly string[] durationSeparators = { "Duration: ", ", start:" };
static readonly string[] timeSeparators = { " time=", " bitrate=" };
static int lastDurationTokensLength;
//PUBLIC INTERFACE
//------------------------------
public static void Parse(string log, ref float durationMiniSec, ref float progress)
{
string[] durationTokens = log.Split(durationSeparators, StringSplitOptions.RemoveEmptyEntries);
if(durationTokens.Length != lastDurationTokensLength)
{
UpdateDuration(durationTokens, ref durationMiniSec);
lastDurationTokensLength = durationTokens.Length;
}
else if(durationMiniSec > 0) //When Duration is obtained
{
string timeToken = GetTimeToken(log, timeSeparators);
if(timeToken != null)
{
progress = GetMiliSec(timeToken) / durationMiniSec;
}
}
}
//------------------------------
static void UpdateDuration(string[] tokens, ref float durationMiniSec)
{
durationMiniSec = 0;
for (int t = 0; t < tokens.Length; ++t)
{
durationMiniSec += GetMiliSec(tokens[t]);
}
}
static string GetTimeToken(string log, string[] separators)
{
string[] tokens = log.Split(separators, StringSplitOptions.RemoveEmptyEntries);
if(tokens.Length > 2)
{
return tokens[tokens.Length - 2];
}
return null;
}
static float GetMiliSec(string token)
{
DateTime time;
if (DateTime.TryParseExact(token, FORMAT, null, System.Globalization.DateTimeStyles.None, out time))
{
return (float)time.TimeOfDay.TotalMilliseconds;
}
return 0;
}
}
}