如何使用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");

如何使用c# asp.net为ffmpeg制作一个加载屏幕

你需要把你的流写到一些可以被web请求读取的数据存储中。你不能像我想的那样处理这个流。例如,将这些数据写入缓存/数据库,并让客户端不断读取。你可以尝试一些"更新"的东西,比如SignalR,并尝试将其流式传输到客户端,尽管这仍然需要从共享存储中读取它。这就是Debug。WriteLines将是一个向队列写入的方法。您的客户端将从队列中读取并删除这些消息。

如果您对实时持久连接感兴趣,请查看Scott Hanselman的帖子:

AsynchronousScalableWebApplicationsWithRealtimePersistentLongrunningConnectionsWithSignalR

相关文章: