1. 程式人生 > 實用技巧 >windows程式呼叫ffmpeg,完成後使其正常退出

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);
      ...
}