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
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; |
|
} |
|
} |
|
} |