将 ffmpeg 流传递给 c# window
Passing ffmpeg stream to c# window
是否可以将 FFMPEG 视频流传递给 C# window?现在它在新 window 中作为新进程打开,我只是想将它传递给我自己的 SessionWindow。
此时我这样执行ffplay:
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,因为我希望此应用的外观和工作方式与远程桌面类似。
看来我找到了答案。
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.
尽情享受吧。
是否可以将 FFMPEG 视频流传递给 C# window?现在它在新 window 中作为新进程打开,我只是想将它传递给我自己的 SessionWindow。 此时我这样执行ffplay:
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,因为我希望此应用的外观和工作方式与远程桌面类似。
看来我找到了答案。
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.
尽情享受吧。