织梦CMS - 轻松建站从此开始!

罗索

如何编译ffmpeg以支持dshow设备

落鹤生 发布于 2012-12-06 11:24 点击:次 
fmpeg已经能支持dshow设备了!但编译时会遇到一些麻烦.在此把我的编译历程总结一下,以使后来者的心灵免遭蹂躏.
TAG:

fmpeg已经能支持dshow设备了!

但编译时会遇到一些麻烦.在此把我的编译历程总结一下,以使后来者的心灵免遭蹂躏.

先说一下我的编译环境:

mingw+msys,ffmpeg用最新版.

在configure ffmpeg工程时,如果不特别指定,默认fdshow设备是被支持的,但编译后却没有.可以查看configure的日志文件,会发现找不到一些依赖的头文件.所以最终编译出来的ffmpeg.exe,

用ffmpeg -formats来看,在indev一项中,一般只有vfwcap,而没有dshow

为什么会缺头文件呢?好像是有些文件中的内容是侵权的,所以mingw本身不提供,需要你自己把它搞过来.

但自己搞绝非易事,所以在网上搜到了一些文章,比如下文:

(引用自:http://www.klayge.org/2010/11/09/%E5%9C%A8mingw%E4%B8%8B%E4%BD%BF%E7%94%A8dshow%E7%9A%84%E6%96%B9%E6%B3%95/ )
用MinGW编译DShow的东西,经常遇到没找到IBaseFilter的问题。本质上是MinGW的w32api并没有提供完整的DShow头文件所致。经过一番折腾,得到了下面的解决方案:
1. 从http://sourceforge.net/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"
注意名字有空格时要用引号括起来.

(nkmnkm)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201212/16415.html]
本文出处:CSDN博客 作者:nkmnkm
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容