如何編譯ffmpeg以支援dshow裝置
阿新 • • 發佈:2019-01-30
在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" 注意名字有空格時要用引號括起來.