如何編譯ffmpeg以支援dshow裝置

2021-07-10 04:42:44 字數 1154 閱讀 2683

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

用ffmpeg -formats來看,在indev一項中,一般只有vfwcap,而沒有dshow.

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

用mingw編譯dshow的東西,經常遇到沒找到ibasefilter的問題。本質上是mingw的w32api並沒有提供完整的dshow標頭檔案所致。經過一番折騰,得到了下面的解決方案:

2. 把mingw-w64-headersinclude目錄下的strmif.h、rp***r.h、uuids.h、ksuuids.h、control.h拷貝到mingwinclude,覆蓋原有檔案。

3. 開啟strmif.h,刪掉所有」__mingw_extension」。

4. 開啟rp***r.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

唉,這個太老了,mingw的dshow相關文件又有新內容了.

檢視新的編譯錯誤,發現是找不到ddraw.h還有dsound.h兩個檔案.其實這兩個檔案只需從微軟提供的directx sdk中複製過來就行了.

之後編譯就能順利通過了,並最終能在ffmpeg -formats中看到dshow.

ffplay -list_devices true -f dshow video=0

ffplay -f dshow video="usb video capture 0"

注意名字有空格時要用引號括起來.

如何編譯ffmpeg以支援dshow裝置

fmpeg已經能支援dshow裝置了 但編譯時會遇到一些麻煩.在此把我的編譯歷程總結一下,以使後來者的心靈免遭蹂躪.先說一下我的編譯環境 mingw msys,ffmpeg用最新版.在configure ffmpeg工程時,如果不特別指定,預設fdshow裝置是被支援的,但編譯後卻沒有.可以檢視co...

ffmpeg編譯支援cuda編譯碼

今天在ffmpeg4.1下成功編譯出支援cuda編碼的版本,記錄一下編譯過程。編譯增加選項 enable cuda enable cuvid enable nvenc 如果遇到提示錯誤 error cuda requested,but not all dependencies are satisfi...

Mac如何編譯FFmpeg

接下來介紹一下如何在mac系統上編譯ffmpeg。首先你需要安裝兩個工具 xcode homebrew。安裝xcode的原因是xcode提供了mac平台開發環境必須的gcc編譯器。這裡假設你一進安裝了xcode 和 homebrew。如果還沒有安裝,請先安裝,在繼續下面的操作 在終端執行命令 bre...