internal void MergeMedia()
{
if (_ffmpegProcess != null)
{
return;
}
if (!Helper.HasFeature(Enums.Features.Recording))
{
return;
}
_pbMerge = new List <FilesFile>();
_currentObject = ((Li)ddlObject.SelectedItem);
if (_currentObject.Ot == 1)
{
var vl = MainClass.GetVolumeLevel(_currentObject.ID);
_pbMerge = vl.FileList.Where(
p => p.CreatedDateTicks >= dateTimePicker1.Value.Ticks &&
p.CreatedDateTicks <= dateTimePicker2.Value.Ticks).OrderBy(p => p.CreatedDateTicks).ToList();
}
else
{
var cw = MainClass.GetCameraWindow(_currentObject.ID);
_pbMerge = cw.FileList.Where(
p => p.CreatedDateTicks >= dateTimePicker1.Value.Ticks &&
p.CreatedDateTicks <= dateTimePicker2.Value.Ticks).OrderBy(p => p.CreatedDateTicks).ToList();
}
if (_pbMerge.Count > 0)
{
var first = _pbMerge.First();
string ext = first.Filename.Substring(first.Filename.LastIndexOf(".", StringComparison.Ordinal) + 1);
var date = DateTime.Now;
_dir = Helper.GetFullPath(_currentObject.Ot, _currentObject.ID);
_outfile = _currentObject.ID + "_" +
$"Merge_{date.Year}-{Helper.ZeroPad(date.Month)}-{Helper.ZeroPad(date.Day)}_{Helper.ZeroPad(date.Hour)}-{Helper.ZeroPad(date.Minute)}-{Helper.ZeroPad(date.Second)}" + "." + ext;
string filelist = _pbMerge.Aggregate("",
(current, file) => current + ("file '" + _dir + file.Filename + "'" + Environment.NewLine));
File.WriteAllText(Program.AppDataPath + "concat.txt", filelist);
if (filelist != "")
{
var startInfo = new ProcessStartInfo
{
FileName = "\"" + Program.AppPath + "ffmpeg.exe\"",
Arguments =
"-f concat -i \"" + Program.AppDataPath + "concat.txt" +
"\" -codec copy \"" + _dir + _outfile + "\"",
RedirectStandardOutput = false,
RedirectStandardError = false,
UseShellExecute = false,
CreateNoWindow = false
};
Logger.LogMessageToFile("Merge: " + startInfo.FileName + " " + startInfo.Arguments);
_ffmpegProcess = new Process {
StartInfo = startInfo, EnableRaisingEvents = true
};
_ffmpegProcess.Exited += FfmpegMergeProcessExited;
_ffmpegProcess.ErrorDataReceived += FfmpegMergeProcessErrorDataReceived;
try
{
_ffmpegProcess.Start();
}
catch (Exception e)
{
_ffmpegProcess = null;
Logger.LogExceptionToFile(e);
}
}
button1.Enabled = false;
}
}