如何编译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"
  注意名字有空格时要用引号括起来.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值