¿Cómo puedo detectar dispositivos que usan ffmpeg y C#?

programación


Quiero detectar dispositivos que usan ffmpeg.exe. Utilicé la clase Process y el comando ffmpeg relacionado pero no tuve éxito

Lo que he probado:

¡Usé el siguiente código pero el resultado no es nada! Creo que sucede porque el proceso salió tan pronto como se ejecutó Process.start(). ¿Cómo puedo hacer eso?

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

Solución 1

¿Quieres “capturar” el resultado? Esto debería responder a tu pregunta: Capturar la salida de la consola desde una aplicación .NET (C#)[^]

Solución 2

Tuve el mismo problema. Estaba redirigiendo la salida estándar, pero FFmpeg genera mensajes de texto con el error estándar.

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

Consejo: use -hide_banner en el argumento ffmpeg y su próximo paso será más fácil 🙂

Espero que esto ayude a alguien.

コメント

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