[英]Using ffmpeg in asp.net
我需要一个音频转换库。 在拉完头发之后..我放弃了一个事实,那就是那里没有这样的音频库。.那里的每个库都有一些或其他问题。
剩下的唯一选择是ffmpeg,这是最好的选择,但是不幸的是您不能在asp.net中使用它(我不是直接意思)。 网站上将转换文件的每个用户; 会启动一个exe吗? 我想我很快就会达到服务器内存的最大值。
底线:我将尝试使用ffmpeg.exe,看看它可以同时支持多少用户。
我去了ffmpeg网站,在Windows下载部分找到了3个不同的版本。 静态,共享和开发。
有谁知道哪个最好? 所有都打包在一个exe(静态)或dll中,而exe很小,可以在asp.net中使用它吗?
PS:任何人那里都有一个不错的图书馆..如果您能共享,那就太好了。
静态生成为每个程序(ffmpeg,ffprobe,ffplay)提供一个独立的.exe文件。
共享版本将每个库提供为单独的.dll文件(avcodec,avdevice,avfilter等)以及依赖于每个程序的那些库的.exe文件
开发包提供在其他程序中使用.dll文件所需的头文件和.lib / .dll.a文件。
ffMpeg是我使用过的最好的库,但是我不建议您尝试直接从asp.net调用它。
我所做的就是接受上传,将其存储在服务器上,或者存储在我的情况下的S3中,然后担任工作角色(如果使用的是类似Azure的角色),并且该过程不断查找和监视要转换的新文件。
如果您需要类似实时的解决方案,则可以更新数据库中的标志,并使用AJAX解决方案来轮询数据库以继续提供进度更新,然后在转换完成后提供下载链接。
我个人的方法是
WorkerRole启动并正在监视ServiceBus队列中的消息。
ASP.NET站点上载文件并将其存储在S3或Azure中。然后,如果需要,ASP.NET站点会将信息记录在您的数据库中,并将消息发送到ServiceBus队列。
WorkerRole对此进行了转换。
如果需要实时监视解决方案,则ASP.NET网站上将需要AJAX。 否则,如果需要,您可以在完成后发送电子邮件。
使用排队过程还可以减轻您的负担,因为您在重负荷下只能等待一会儿,并且不会使所有事情停顿下来。 另外,如果对于一台服务器而言,负载过大,您可以根据需要扩展工作人员角色以平衡负载。
这是我从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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.