如何编译ffmpeg以支持dshow设备
2012-02-28 17:04
399 查看
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"
注意名字有空格时要用引号括起来.
.
但编译时会遇到一些麻烦.在此把我的编译历程总结一下,以使后来者的心灵免遭蹂躏.
先说一下我的编译环境:
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"
注意名字有空格时要用引号括起来.
.
相关文章推荐
- 如何编译ffmpeg以支持dshow设备
- 如何编译ffmpeg以支持dshow设备
- 如何编译ffmpeg以支持dshow设备
- 如何编译ffmpeg以支持dshow设备
- mingw下vs编译的ffmpeg如何支持x264
- 如何编译支持在Windows2000下运行的Qt程序
- 如何用Android NDK编译FFmpeg
- 【Python笔记】源码编译安装Python时,如何支持自定义安装的高版本openssl库
- Ubuntu 编译安装ffmpeg,mplayer,x264全教程支持VDPAU(高清硬解)
- mingw下ffmpeg编译添加x265支持
- 如何在Ubuntu14中编译ffmpeg,并且建立一个eclipse工程
- 如何把设备驱动文件添加到Linux内核编译选项配置的menuconfig中
- ubuntu编译ffmpeg支持http流媒体
- Visual Studio 2010编译的C++程序如何支持Windows 2000
- linux如何编译安装新内核支持NTFS文件系统(以redhat7.2x64为例)
- Linux -> usb-serial -> option.c 设备编译usb-serial支持多设备
- FFMPEG列出DirectShow支持的设备
- 编译ffmpeg并支持H264
- windows7下ffmpeg编译支持x265
- Make ADB To Support Android Devices(如何使ADB在Linux下支持Android设备的udev规则配置)