Comment puis-je capturer des appareils utilisant ffmpeg et C# ?

la programmation


Je souhaite capturer des appareils utilisant ffmpeg.exe. j’ai utilisé la classe Process et la commande ffmpeg associée mais sans succès

Ce que j’ai essayé :

j’ai utilisé le code suivant mais le résultat n’est rien !! je pense que cela se produit parce que le processus s’est terminé dès que process.start() a été exécuté. Comment puis je faire ça?

C#
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();
    }
}

Solution 1

Vous souhaitez « capturer » la sortie ? Ceci devrait répondre à votre question: Capturer la sortie de la console à partir d’une application .NET (C#)[^]

Solution 2

J’ai eu le même problème. Je redirigeais la sortie standard, mais FFmpeg génère des messages texte vers l’erreur standard.

C#
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();
    }
}

Astuce : utilisez -hide_banner dans l’argument ffmpeg et votre prochaine étape sera plus facile 🙂

J’espère que cela aide quelqu’un.

コメント

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