Ok donc pour le moment j'ai un programme qui exécute FFmpeg en utilisant un processus dans VB.net. J'envoie les arguments du processus dans startinfo ainsi que d'autres choses comme l'emplacement du fichier. Quand je cours le code il envoie la sortie de console à la console de débogage; c'est probablement parce que j'ai le .UseShellExecute = False et processInfo.RedirectStandardOutput = VraiComment interagir avec la sortie du processus?
Ma question est: Comment puis-je faire quelque chose qui peut interpréter la sortie? Aussi avec FFmpeg, le processus est continu, donc le processus est toujours exécuté pour la plupart et ajoute constamment plus de lignes de sortie dans la console de débogage.
Le code J'utilise:
Dim process As New Process
Dim processInfo As New ProcessStartInfo
processInfo.FileName = tempPath
processInfo.Arguments = ("-r 1/.1 -i " + link + " -c copy " + saveLocation + "\" + streamerName + ".ts")
processInfo.UseShellExecute = False
processInfo.WindowStyle = ProcessWindowStyle.Hidden
processInfo.CreateNoWindow = True
processInfo.RedirectStandardOutput = True
process.StartInfo = processInfo
process.Start()
J'ai essayé sans succès.
Dim output As String
Using StreamReader As System.IO.StreamReader = process.StandardOutput
output = StreamReader.ReadToEnd().ToString
End Using
Edit: J'ai maintenant ce code:
Dim process As New Process
AddHandler process.OutputDataReceived, AddressOf CallbackProcesoAsync
AddHandler process.ErrorDataReceived, AddressOf ErrorDataReceivedAsync
Dim processInfo As New ProcessStartInfo
processInfo.FileName = tempPath
processInfo.Arguments = ("-r 1/.1 -i " + link + " -c copy " + saveLocation + "\" + streamerName + ".ts")
processInfo.UseShellExecute = False
processInfo.WindowStyle = ProcessWindowStyle.Hidden
processInfo.CreateNoWindow = False
processInfo.RedirectStandardOutput = True
processInfo.RedirectStandardError = True
process.StartInfo = processInfo
process.Start()
processes.Add(Tuple.Create(tempPath, streamerName))
Debug.WriteLine("Attempting to record " + streamerName)
Dim output As String
Using StreamReader As System.IO.StreamReader = process.StandardOutput
output = StreamReader.ReadToEnd().ToString
End Using
End If
End Sub
Private Sub CallbackProcesoAsync(sender As Object, args As System.Diagnostics.DataReceivedEventArgs)
If Not args.Data Is Nothing AndAlso Not String.IsNullOrEmpty(args.Data) Then
RichTextBox1.Text = args.Data
End If
End Sub
Private Sub ErrorDataReceivedAsync(sender As Object, args As System.Diagnostics.DataReceivedEventArgs)
If Not args.Data Is Nothing AndAlso Not String.IsNullOrEmpty(args.Data) Then
RichTextBox2.Text = args.Data
End If
End Sub
Mais j'ai pas reçu toutes les sorties aux richtextboxes?
J'ai l'impression que cela a quelque chose à voir avec streamReader alors je l'ai supprimé et ça ne fonctionnait toujours pas? Je n'ai plus d'idées de ce que ça pourrait être. Ffmpeg envoie toutes les informations de débogage à StdErr au lieu de StdOut.
Votre application ne plante-t-elle pas sur 'output = StreamReader.ReadToEnd(). ToString'? – BanForFun
Il ne plante pas, mais si je fais RichTextBox1.Text = sortie il se bloque et dit comme le filetage croisé entre les threads, car je multithread le processus principal comme 5 fois. – 1ben99
Je peux simplement invoquer la sortie et tout fonctionne, mais je veux toujours obtenir la sortie en cours en temps réel, car après avoir terminé le flux, il affiche la sortie de ce qui vient de se passer, donc je ne peux pas afficher erreur sortie en direct? – 1ben99