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