1. 程式人生 > >如何編譯ffmpeg以支援dshow裝置

如何編譯ffmpeg以支援dshow裝置

在configure ffmpeg工程時,如果不特別指定,預設fdshow裝置是被支援的,但編譯後卻沒有.可以檢視configure的日誌檔案,會發現找不到一些依賴的標頭檔案.所以最終編譯出來的ffmpeg.exe,
  用ffmpeg -formats來看,在indev一項中,一般只有vfwcap,而沒有dshow.

  為什麼會缺標頭檔案呢?好像是有些檔案中的內容是侵權的,所以mingw本身不提供,需要你自己把它搞過來.

  用MinGW編譯DShow的東西,經常遇到沒找到IBaseFilter的問題。本質上是MinGW的w32api並沒有提供完整的DShow標頭檔案所致。經過一番折騰,得到了下面的解決方案:
  1. 從htt p:/ /sourceforg e.n et/projects/mingw-w64/下載mingw-w64-headers,我這裡用的是mingw-w64-headers-20100717.tar.xz
  2. 把mingw-w64-headersinclude目錄下的strmif.h、rpcndr.h、uuids.h、ksuuids.h、control.h拷貝到MinGWinclude,覆蓋原有檔案。
  3. 開啟strmif.h,刪掉所有”__MINGW_EXTENSION”。
  4. 開啟rpcndr.h,刪掉所有”__MINGW_EXTENSION”,並在第81行”typedef int ssize_t;”的前後分別加上”#ifdef _SSIZE_T_”和”#endif”。
  5. 開啟vmr9.h,查詢”MixerPref9_RenderTargetMask = 0x000FF000″一行,在後面加上”,”;查詢”
wchar_t
szDescription[512]“,在後面加上”;”。(這個最莫名其妙了,原作者居然都沒加)   6. 開啟Windows SDK的wmr9.h,把介面都添到MinGW的vmr9.h中。   至此,DShow相關的東西就可以用MinGW編譯了,不再會報缺少介面。   新增和修改過的檔案可以在這裡下載:   DShow patch for MinGW   我下載了他的patch,並覆蓋,發現還是不行.   唉,這個太老了,mingw的dshow相關文件又有新內容了.   檢視新的編譯錯誤,發現是找不到ddraw.h還有dsound.h兩個檔案.其實這兩個檔案只需從微軟提供的directx sdk中複製過來就行了.   之後編譯就能順利通過了,並最終能在ffmpeg -formats中看到dshow.   你可以用ffplay.exe播放dshow裝置來進行測試.當然應先看一下dshow裝置列表:   ffplay -list_devices true -f dshow video=0   之後就可以播放一個了,比如:   ffplay -f dshow video="USB video capture 0"   注意名字有空格時要用引號括起來.