如何使用c# asp.net为ffmpeg制作一个加载屏幕
本文关键字:一个 屏幕 加载 何使用 asp net ffmpeg | 更新日期: 2023-09-27 18:07:08
我有这个函数和在哪里调试。WriteLine命令是我输出值的地方。我该如何将这些数据打印到网页中,以便我可以模拟加载屏幕?我通过a *在外部调用这个函数。Ashx web服务文件。
private string ConvertToFLV(string phyicalFilePath)
{
if (Path.GetExtension(phyicalFilePath).Equals(".flv")) return phyicalFilePath;
var argument = string.Format(@"-i ""{0}"" -vcodec flv -f flv -r 29.97 -s 320x240 -aspect 4:3 -b 300k -g 160 -cmp dct -subcmp dct -mbd 2 -flags +aic+cbp+mv0+mv4 -trellis 1 -ac 1 -ar 22050 -ab 56k ""{1}""", phyicalFilePath, Path.ChangeExtension(phyicalFilePath, "flv"));
libfaac -ar 48000 -ab 128k -coder 1 -flags +loop -cmp +chroma -partitions +parti4x4+partp8x8+partb8x8 -me_method hex -subq 6 -me_range 16 -g 250 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -b_strategy 1 -threads 0 {1}", phyicalFilePath, Path.ChangeExtension(phyicalFilePath, "mp4"));
File.Delete(Path.ChangeExtension(phyicalFilePath, "flv"));
ProcessStartInfo process = new ProcessStartInfo(ffmpegPhysicalPath, argument);
Process proc = new Process();
float duration = 0.00F, current = 0.00F;
proc.StartInfo = process;
proc.EnableRaisingEvents = false;
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = true;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.RedirectStandardError = true;
proc.Start();
StreamReader d = proc.StandardError;
do
{
string s = d.ReadLine();
if (s.Contains("Duration: "))
{
Debug.WriteLine("DURATION: " + s);
}
else
{
if (s.Contains("frame="))
{
Debug.WriteLine("FRAME: " + s);
}
}
} while (!d.EndOfStream);
proc.WaitForExit();
return Path.ChangeExtension(phyicalFilePath, "flv");
你需要把你的流写到一些可以被web请求读取的数据存储中。你不能像我想的那样处理这个流。例如,将这些数据写入缓存/数据库,并让客户端不断读取。你可以尝试一些"更新"的东西,比如SignalR,并尝试将其流式传输到客户端,尽管这仍然需要从共享存储中读取它。这就是Debug。WriteLines将是一个向队列写入的方法。您的客户端将从队列中读取并删除这些消息。
如果您对实时持久连接感兴趣,请查看Scott Hanselman的帖子:
AsynchronousScalableWebApplicationsWithRealtimePersistentLongrunningConnectionsWithSignalR