2016-06-04 3 views
1

Est-il possible de transmettre le flux vidéo FFMPEG vers la fenêtre C#? Maintenant, il s'ouvre comme un nouveau processus dans une nouvelle fenêtre, je veux simplement le passer à mon propre SessionWindow. En ce moment, j'exécute ffplay comme ceci:Passage du flux ffmpeg dans la fenêtre C#

public void ExecuteCommandSync(String command, String args) 
{ 
    try 
    { 
     System.Diagnostics.ProcessStartInfo procStartInfo = 
     new System.Diagnostics.ProcessStartInfo("\"" + command + "\"", args); 

     procStartInfo.RedirectStandardOutput = true; 
     procStartInfo.UseShellExecute = false; 

     procStartInfo.CreateNoWindow = true; 

     System.Diagnostics.Process proc = new System.Diagnostics.Process(); 
     proc.StartInfo = procStartInfo; 
     proc.Start(); 

     string result = proc.StandardOutput.ReadToEnd(); 

     Debug.WriteLine(result); 
    } 
    catch (Exception objException) 
    { 

    } 
} 

private void button2_Click(object sender, EventArgs e) 
{ 
    String runPlay = @"C:\FFMPEG\bin\ffplay.exe"; 
    String Random = "udp://127.0.0.1:1234"; 

    this.ExecuteCommandSync(runPlay, Random); 
} 

PS. Je ne veux pas utiliser Windows Media Player car je veux que cette application ressemble et fonctionne comme un bureau à distance.

Répondre

0

Il semblerait que j'ai trouvé la réponse.

Process ProcFFplay = new Process(); 
     ProcFFplay.StartInfo.FileName = @"C:\FFMPEG\bin\ffplay.exe"; 
     ProcFFplay.StartInfo.Arguments = @"-probesize 32 udp://192.168.88.228:12340"; 
     ProcFFplay.StartInfo.CreateNoWindow = true; 
     ProcFFplay.StartInfo.RedirectStandardOutput = true; 
     ProcFFplay.StartInfo.UseShellExecute = false; 
     ProcFFplay.EnableRaisingEvents = true; 
     ProcFFplay.OutputDataReceived += (o, k) => Debug.WriteLine(k.Data ?? "NULL", "ffplay"); 
     ProcFFplay.ErrorDataReceived += (o, k) => Debug.WriteLine(k.Data ?? "NULL", "ffplay"); 
     ProcFFplay.Exited += (o, k) => Debug.WriteLine("Exited", "ffplay"); 
     ProcFFplay.Start(); 
     Thread.Sleep(4500);//this is time which you need to wait to get first frames approximately 
     SetParent(ProcFFplay.MainWindowHandle, this.panel1.Handle); 
     MoveWindow(ProcFFplay.MainWindowHandle, -5, -30, 1200, 800, true); //these parameteres may look weird but you hide top "stripe" using them. 

Profitez.