ある Web サイト用のビデオ変換ツールを書いています。
次はロジック
- ユーザーがファイルをアップロード
- システムはユーザーのためにそれを変換します(もちろん、ユーザーは変換中に待つべきではありません)
私はコードをもっている:
public async void AddVideo(HotelVideosViewModel model)
{
var sourceFile = FileHandler.SaveFile(model.VideoFile);
var fullFilePath = HttpContext.Current.Server.MapPath(sourceFile);
await Task.Factory.StartNew(() => video.Convert(fullFilePath));
model.FileLocation = sourceFile;
model.IsConverted = true;
this.Add<HotelVideos>(Mapper.Map<HotelVideosViewModel, HotelVideos>(model));
}
これにより、エンコードが開始されます。
await Task.Factory.StartNew(() => video.Convert(fullFilePath));
しかし、この後のコードは決して実行されません...誰かが解決策を持っていますか?
PS: video.Conver(...) の下には次のようなものがあります:
public bool Convert(string fileLocation)
{
// do staff
}
- - アップデート - -
興味深いものを手に入れました。video.Convert(fullFilePath)
Thread.Sleep(2000)に交換する場合は、すべてが機能し始めます。したがって、問題は2番目の方法にあると思います。
だから私は次のファイルコードを追加しています(今ドラフト):
using Softpae.Media;
/// <summary>
/// TODO: Update summary.
/// </summary>
public class VideoConvertManager
{
private readonly Job2Convert jobConverter = new Job2Convert();
private readonly MediaServer mediaServer = new MediaServer();
public bool Convert(string fileLocation)
{
this.jobConverter.pszSrcFile = fileLocation;
this.jobConverter.pszDstFile = fileLocation + ".mp4";
this.jobConverter.pszDstFormat = "mp4";
this.jobConverter.pszAudioCodec = null;
this.jobConverter.pszVideoCodec = "h264";
if (this.mediaServer.ConvertFile(this.jobConverter))
{
FileHandler.DeleteFile(fileLocation);
return true;
};
FileHandler.DeleteFile(fileLocation);
return false;
}
}