我需要一个音频转换库。 已经拉着我hair..I后已经放弃了这一事实,有没有这样的音频库出库there..every在那里有一些或其他问题。
剩下的唯一选择是ffmpeg的是最好的,但不幸的是你不能在asp.net中使用它(不直接我的意思)。 该网站,将转换文件上的每个用户; 将推出一个exe ?; 我想我会很快打出服务器最大内存。
底线:我会尝试使用ffmpeg.exe,看看它有多少用户可以同时支持。
我去ffmpeg的网站,并在该窗口的下载部分,我发现3种不同的版本; 静态的,共享和DEV。
是否有任何人知道这将是最好的? 在一个exe文件都收拾好了(静态)或DLL的separely和EXE较小,asp.net中使用它WRT?
PS:任何一个有一个好的图书馆出来there..would是巨大的,如果你可以分享。
静态生成提供每个节目(FFMPEG,ffprobe,ffplay)一个自包含的.exe文件。
共享建立提供每个库作为单独的.dll文件(avcodec中,avdevice,avfilter等),和.exe文件依赖于这些库的每个节目
开发包提供给使用其他程序的.dll文件要求的报头和.LIB / .dll.a文件。
FFmpeg的是我用什么在那里最好的图书馆,但我不建议尝试直接从asp.net调用它。
我所做的,被接受的上载,存储在服务器上,或S3在我的情况,然后有一个工作者角色(如果使用类似天青)和连续的外观和新的文件监控转换的过程。
如果你需要像解决方案的实时,你可以在你的数据库更新标志,并有一个AJAX的解决方案,以轮询数据库来提供进度更新,然后下载链接,一旦转换完成。
我个人的做法是
- Azure的Web角色
- Azure的工作者角色
- ServiceBus
所述WorkerRole启动并正在监视ServiceBus队列中的消息。
然后,如果需要,ASP.NET站点上传和文件存储在S3或Azure中的ASP.NET网站在DB的记录信息,并发送一条消息给ServiceBus队列。
该WorkerRole发现这一点,并将其转换。
如果你想有一个实时监控解决方案AJAX将需要在ASP.NET站点。 否则,如果需要完成时,你可以发送电子邮件。
使用排队过程还可以帮助您与负载当你在重负载下的人只是等待一段时间因为它不磨一切停止。 另外,作为需要平衡负载,你可以扩展你的工人角色,它应该成为有史以来太多的一台服务器。
这里是我从C#运行的ffmpeg(您将需要更改参数的要求)
String params = string.Format("-i {0} -s 640x360 {1}", input.Path, "C:\\FilePath\\file.mp4");
RunProcess(params);
private string RunProcess(string Parameters)
{
//create a process info
ProcessStartInfo oInfo = new ProcessStartInfo(this._ffExe, Parameters);
oInfo.UseShellExecute = false;
oInfo.CreateNoWindow = true;
oInfo.RedirectStandardOutput = true;
oInfo.RedirectStandardError = true;
//Create the output and streamreader to get the output
string output = null; StreamReader srOutput = null;
//try the process
try
{
//run the process
Process proc = System.Diagnostics.Process.Start(oInfo);
proc.ErrorDataReceived += new DataReceivedEventHandler(proc_ErrorDataReceived);
proc.OutputDataReceived += new DataReceivedEventHandler(proc_OutputDataReceived);
proc.BeginOutputReadLine();
proc.BeginErrorReadLine();
proc.WaitForExit();
proc.Close();
proc.Dispose();
}
catch (Exception)
{
// Capture Error
}
finally
{
//now, if we succeeded, close out the streamreader
if (srOutput != null)
{
srOutput.Close();
srOutput.Dispose();
}
}
return output;
}