103 lines
2.7 KiB
C#
103 lines
2.7 KiB
C#
using System;
|
|
using System.Diagnostics;
|
|
using System.IO;
|
|
using System.Threading;
|
|
using MediaBrowser.Common.Logging;
|
|
|
|
namespace MediaBrowser.Api.Transcoding
|
|
{
|
|
/// <summary>
|
|
/// Represents an active transcoding job
|
|
/// </summary>
|
|
public class TranscodingJob
|
|
{
|
|
public string InputFile { get; set; }
|
|
public string OutputFile { get; set; }
|
|
public string TranscoderPath { get; set; }
|
|
public string Arguments { get; set; }
|
|
|
|
public TranscoderJobStatus Status { get; private set; }
|
|
|
|
/// <summary>
|
|
/// Starts the job
|
|
/// </summary>
|
|
public void Start()
|
|
{
|
|
ApiService.AddTranscodingJob(this);
|
|
|
|
ProcessStartInfo startInfo = new ProcessStartInfo();
|
|
|
|
startInfo.CreateNoWindow = true;
|
|
|
|
startInfo.UseShellExecute = false;
|
|
|
|
startInfo.FileName = TranscoderPath;
|
|
startInfo.WorkingDirectory = Path.GetDirectoryName(TranscoderPath);
|
|
startInfo.Arguments = Arguments;
|
|
|
|
Logger.LogInfo("TranscodingJob.Start: " + TranscoderPath + " " + Arguments);
|
|
|
|
Process process = new Process();
|
|
|
|
process.StartInfo = startInfo;
|
|
|
|
process.EnableRaisingEvents = true;
|
|
|
|
process.Start();
|
|
|
|
process.Exited += process_Exited;
|
|
}
|
|
|
|
void process_Exited(object sender, EventArgs e)
|
|
{
|
|
ApiService.RemoveTranscodingJob(this);
|
|
|
|
Process process = sender as Process;
|
|
|
|
// If it terminated with an error
|
|
if (process.ExitCode != 0)
|
|
{
|
|
Status = TranscoderJobStatus.Error;
|
|
|
|
// Delete this since it won't be valid
|
|
if (File.Exists(OutputFile))
|
|
{
|
|
File.Delete(OutputFile);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Status = TranscoderJobStatus.Completed;
|
|
}
|
|
|
|
process.Dispose();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Provides a helper to wait for the job to exit
|
|
/// </summary>
|
|
public void WaitForExit()
|
|
{
|
|
while (true)
|
|
{
|
|
TranscoderJobStatus status = Status;
|
|
|
|
if (status == TranscoderJobStatus.Completed || status == TranscoderJobStatus.Error)
|
|
{
|
|
break;
|
|
}
|
|
|
|
Thread.Sleep(500);
|
|
}
|
|
}
|
|
}
|
|
|
|
public enum TranscoderJobStatus
|
|
{
|
|
Queued,
|
|
Started,
|
|
Completed,
|
|
Error
|
|
}
|
|
}
|