如何编译ffmpeg以支持dshow设备
2016-02-28 00:42
330 查看
在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" 注意名字有空格时要用引号括起来.
相关文章推荐
- LruCache的实现原理(图片三级缓存)
- java并发包concurrent翻译及源码分析之:ReadWriteLock
- 第二天 Python3.4.2 函数
- [LeetCode] 226 翻转二叉树
- stm32之堆栈
- wl-kmod
- Android编译本地C++程序方法
- 离我而去的2015,迎面而来的2016
- Python基础语法(Python基础知识点)
- 关于i++和++i的有效区分
- netcdf源码在windows上的编译
- 为什么Actor模型是高并发事务的终极解决方案
- netcdf源码在windows上的编译
- Apache与Nginx的优缺点比较
- Android自定义Dialog的一些问题
- linux 无线网卡
- 超级详解:委托与事件
- 【PAT】1039. 到底买不买(20)
- 反射应用
- nmap 命令操作