2016-06-04 2 views
1

Возможно ли передать видеопоток FFMPEG в окно C#? Теперь он открывается как новый процесс в новом окне, я просто хочу передать его в свой собственный SessionWindow. В этот момент я выполнить ffplay так:Передача потока ffmpeg в окно 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. Я не хочу использовать Windows Media Player, так как я хочу, чтобы это приложение выглядело и работало как удаленный рабочий стол.

ответ

0

Похоже, я нашел ответ.

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. 

Наслаждайтесь.