C# 调用ffmpeg录屏 ,不能再次停止问题

冰冰九公主 2016-01-23 03:05:21
停止使用的模拟ctrl+c,代码如下

/// <summary>
/// 功能: 停止录制
/// </summary>
public static void Stop()
{
AttachConsole(p.Id);
SetConsoleCtrlHandler(IntPtr.Zero, true);
GenerateConsoleCtrlEvent(0, 0);
FreeConsole();
}

窗口启动后,点击【开始】开始录制,进程中出现ffmpeg,点击【停止】调用stop,进程中ffmpeg消失,视频也录制成功。此窗口不关闭,再次点击【开始】,进程中出现ffmpeg,再次点击【停止】调用stop,进程中ffmpeg依然存在。这个怎么解决?
...全文
1280 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
butena 2016-01-31
  • 打赏
  • 举报
回复
SetConsoleCtrlHandler(IntPtr.Zero, false); 这行代码,会把自己给关闭(退出)了。这个方法不可行。 我是这么解决的: 我也是遇到了这个问题。第2次录屏后,ctrl+c无法正常结束ffmpeg,后来我是通过在主窗体中Kill掉ffmpeg进程即可。 你在启动ffmpeg录屏时,得到进程ID: Process pro = new Process(); pro.Start();//启动ffmpeg线程 int pid=pro.Id; 然后在你的Stop方法里,通过kill也是无法关闭ffmpeg的: public static void Stop() { AttachConsole(p.Id); SetConsoleCtrlHandler(IntPtr.Zero, true); GenerateConsoleCtrlEvent(0, 0); FreeConsole(); pro.kill //调试发现当第2次启动ffmpeg录屏时,上面按ctrl+c无法正常退出,kill()方法也无法退出,只好在主窗体中kill进程 } 要在主窗体里,通过这个方法退出 try { Process p = Process.GetProcessById(pid); if (p != null) p.Kill(); } catch { } 用这个方法退出后,ffmpeg录制的屏幕录像文件*.mpg能正常播放。 我本人在做培训课件屏幕录制软件时,就是使用这个方法解决了。希望遇到同样问题的人有用。
yanglei546085 2016-01-26
  • 打赏
  • 举报
回复
在方法最后设置 SetConsoleCtrlHandler(IntPtr.Zero, false);
冰冰九公主 2016-01-25
  • 打赏
  • 举报
回复
有人吗?

111,112

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧