كيف يمكنني التقاط الأجهزة باستخدام ffmpeg وC#؟


أريد التقاط الأجهزة باستخدام ffmpeg.exe. لقد استخدمت فئة العملية والأمر ffmpeg ذي الصلة ولكن لم ينجح

ما حاولت:

لقد استخدمت الكود التالي ولكن الإخراج لا شيء !! أعتقد أن هذا يحدث بسبب إنهاء العملية بمجرد تنفيذ العملية. كيف أقوم بذلك؟

ج#
static void Main(string[] args)
    {
        ProcessStartInfo startInfo = new ProcessStartInfo();
        startInfo.CreateNoWindow = false;
        startInfo.UseShellExecute = false;
        startInfo.FileName = "ffmpeg.exe";
        startInfo.Arguments = "-list_devices true -f dshow -i dummy";
        startInfo.RedirectStandardOutput = false;


        try
        {
            using (Process process = Process.Start(startInfo))
            {
                while (!process.StandardOutput.EndOfStream)
                {
                    string line = process.StandardOutput.ReadLine();
                    Console.WriteLine(line);
                }

                process.WaitForExit();
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }

        Console.ReadKey();
    }
}

الحل 1

تريد “التقاط” الإخراج؟ وهذا ينبغي أن أجيب على سؤالك: التقاط مخرجات وحدة التحكم من تطبيق .NET (C#) – Stack Overflow[^]

الحل 2

كان لي نفس القضية. كنت أقوم بإعادة توجيه الإخراج القياسي، لكن FFmpeg يقوم بإخراج رسائل نصية إلى الخطأ القياسي.

ج#
static void Main(string[] args)
    {
        ProcessStartInfo startInfo = new ProcessStartInfo();
        startInfo.CreateNoWindow = false;
        startInfo.UseShellExecute = false;
        startInfo.FileName = "ffmpeg.exe";
        startInfo.Arguments = "-hide_banner -list_devices true -f dshow -i dummy";
        startInfo.RedirectStandardError = true;

        try
        {
            using (Process process = Process.Start(startInfo))
            {
                while (!process.StandardError.EndOfStream)
                {
                    string line = process.StandardError.ReadLine();
                    Console.WriteLine(line);
                }

                process.WaitForExit();
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }

        Console.ReadKey();
    }
}

نصيحة: استخدم -hide_banner في وسيطة ffmpeg وستكون خطوتك التالية أسهل 🙂

وآمل أن يساعد شخص ما.

コメント

タイトルとURLをコピーしました