windows程序调用ffmpeg,完成后使其正常退出


接前文《linux下使用ffmpeg命令录制视频,在程序中停止录制》,现在中控环境在windows下,需要将原有代码移植。
windows下结束进程的命令taskkill似乎无法给进程发送消息,这会导致ffmpeg强制退出、视频损坏。

解决方案:

  • 管道
  • 消息

由于我对windows环境不熟悉,所以选择用消息(sendMessage)的方式来做。步骤如下:
1.打开ffmpeg
这里不再使用简单粗暴的system(),而是通过ShellExecute()的方式。

ShellExecute(NULL, "open", "ffmpeg路径", "ffmpeg参数", NULL, SW_SHOW);

2.重写EnumWindowsProc函数

BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
{
      char wTitle[512];
      GetWindowText(hwnd, wTitle, sizeof(wTitle));
      if(strstr(wTitle, "ffmpeg路径") != NULL)
      {
            ::SendMessage(hwnd, WM_CHAR, 'q', 0);
      }
      return true;
}

3.调用EnumWindows函数
在需要停止的地方调用。

int stopRecord()
{
      ...
      ::EnumWindows(EnumWindowsProc, 0);
      ...
}

参考:
https://blog.csdn.net/u012964993/article/details/24389983
https://www.cnblogs.com/taotao0318/articles/3450613.html


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM