oski225
(Oski225)
2 Listopad 2009 16:46
#1
Witam,
napisałem prosty program, którym konwertuje pliki w następujący sposób:
Process converter = new Process();
converter.StartInfo.FileName = "ffmpeg.exe";
converter.StartInfo.Arguments = args;
converter.StartInfo.UseShellExecute = false;
converter.StartInfo.CreateNoWindow = true;
converter.StartInfo.RedirectStandardOutput = true;
converter.Start();
converter.WaitForExit();
converter.Close();
Czy jest możliwość pobrania z ffmpeg, ile procent już przekonwertowano?
_alex
([alex])
2 Listopad 2009 17:50
#2
Proces odpal w osobnym wątku.
Przekieruj StandardOutput do strumienia.
W głównym wątku Czytaj w kółko ze strumienia i sprawdzaj co ffmpeg.exe wyprowadza na ekran.
oski225
(Oski225)
2 Listopad 2009 20:02
#3
Dziękuje Popróbuje, jakby coś było nie tak to napisze.
Fiolek
(Fiołek)
2 Listopad 2009 20:06
#4
Process uruchamia się jako osobny wątek
_alex
([alex])
2 Listopad 2009 21:00
#5
Owszem ale WaitForExit() - nie;
Fiolek
(Fiołek)
4 Listopad 2009 17:13
#6
A po co używać WaitForExit jeśli w pętli można sprawdzać, czy “process.HasExited” - jeden wątek mniej i do tego mamy zapewnioną kontrolę nad procesem bez zabawy w synchronizacje danych.
oski225
(Oski225)
11 Luty 2010 22:29
#7
Witam, dopiero teraz znalazłem czas na dokończenie ćwiczeń z ffmpeg’iem, lecz nadal mam problem.
Napisałem coś takiego:
converter.StartInfo.FileName = "ffmpeg.exe";
converter.StartInfo.Arguments = args;
converter.StartInfo.UseShellExecute = false;
converter.StartInfo.CreateNoWindow = true;
converter.StartInfo.RedirectStandardOutput = true;
converter.Start();
timer1.Start();
private void timer1_Tick(object sender, EventArgs e)
{
sr = converter.StandardOutput;
textBox2.Text += sr.ReadToEnd();
}
Niestety do strumienia nie przekazywane są żadne dane. Próbowałem już zrobić to na kilka(naście) sposobów, ale cały czas efekt jest identyczny.
Mógłby mnie ktoś wspomóc wiedzą?
Edit
Już sobie poradziłem. Okazało się, że w przypadku FFMPEG’a trzeba przechwycic standardError, a nie standardOutput.
Pozdrawiam.