[ad_1]
أريد التقاط الأجهزة باستخدام 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 وستكون خطوتك التالية أسهل 🙂
وآمل أن يساعد شخص ما.
[ad_2]
コメント