001 LAV Filters编译全攻略

Post date: 2015/4/2 上午 02:37:36

LAV Filters编译全攻略

0. Msys mingw安装

1. Git安装

2. Yasm下载

3. Lavfiltes下载

4. Ffmpeg下载

5. Pkg-config 不用单独用gtk+包包含了很多工具和库用于mingw

【开发环境】

直接下载的地址http://xhmikosr.1f0.de/tools/ 且包含了yasm zlib等已经弄好了。-j8也可以用了,pkg-config都有了。真好。如果不嫌弃麻烦或不怕出现问题本着了解的目的可以自定义安装如下所示。

【自定义安装】

【msys mingw安装】

自定义下载:生成的lav库需要gcc库链接。

http://www.mingw.org/wiki/MSYS 下载安装器 downloadinstaller

执行选择必须的安装组件base就好,不用所有,选择g++等。

选择

mingw-developer-toolkit

Ming32-base

Mingw32-gcc-g++

Msys-base

可以将 c:/mingw/bin加入到系统全局环境变量path中否则如果用gcc编译则找不到gcc路径。避免影响到其他进程可以考虑将该路径只在msys客户端中设定。

更改C:\MinGW\msys\1.0\etc\fstab

增加:c:/mingw /mingw 或在msys终端中执行如下命令

Linux命令: export PATH=$PATH:/c/mingw/bin 设定mingw路径

运行gcc确定是否OK

【yasm】

http://yasm.tortall.net/Download.html

VC工程使用 下载 Win32 .exe (for general use on 32-bit Windows) 下载后改名为yasm.exe放到 c:\windows\system32\ 避免冲突也放到vc的目录下 C:\Program Files\Microsoft Visual Studio 10.0\VC\bin

MINGW用: 下载源码Source .tar.gz 在mingw下编译 git下来的竟然没有configure,还是下打包过的。

命令: ./configure

Make

Make install

被自动安装到

C:\MinGW\msys\1.0\local\bin目录下。

Mingw下的yasm和windows下不一样并且需要mingw的libintl库如果用mingw编译用到yasm必须用这个。

[git]

https://code.google.com/p/msysgit/ 下载msysgit

https://code.google.com/p/tortoisegit/ 下载乌龟git客户端他需要git.exe

编译ffmpeg需要git,其会去自动下载一些第三方库,好像是。

【pkg-config】

http://pkgconfig.freedesktop.org/releases/

http://www.gtk.org/download/win32.php 下载编译好的二进制工具 解压释放到mingw目录下覆盖里面的东西。

下载安装相关包后,可以 配置编译 pkg-config

Mingw编译安装。编译glib不对?

非必须用来检查版本配置的。

【zlib】

Msvc编译:

下载zlib source http://www.zlib.net/

1)Grab the zlib sources.

2)Edit win32/Makefile.msc so that it uses -MT instead of -MD, since this is how FFmpeg is built as well.

3)Edit zconf.h and remove its inclusion of unistd.h. This gets erroneously included when building FFmpeg.

4)在vc的命令行编译环境Run nmake -f win32/Makefile.msc.

5)Move zlib.lib, zconf.h, and zlib.h to somewhere MSVC can see. 放到

Gcc编译:

如果是gcc编译则移动到libz.a

移动到lib:E:\develop\KTVSystemDevelop\LAVFilters\thirdparty\lib32\

Include: E:\develop\KTVSystemDevelop\LAVFilters\thirdparty\include

这两个路径在build_ffmpeg.sh中指定了第三方库连接和包含路径但windows的msvc编译没有指定。

参看 build_ffmpeg.sh

EXTRA_CFLAGS="-D_WIN32_WINNT=0x0502 -DWINVER=0x0502 -I../thirdparty/include -idirafter../common/includes/dxva2 -DPTW32_STATIC_LIB"

【ffmpeg】

用vc编译需要参看 http://ffmpeg.org/platform.html

1)Vc 是C89标准,ffmpeg遵循C99规范,需要将c99转换到c89,否则编译不了。http://download.videolan.org/pub/contrib/c99-to-c89/,将c99wrap和c99conv拷贝到C:\Program Files\Microsoft Visual Studio 10.0\VC\bin下。Yasm.exe也放到该目录下。应该可以放到system32目录下。

2)C99用到的一些类型定义: https://code.google.com/p/msinttypes/ 将stdint.h和inttypes.h放到C:\Program Files\Microsoft Visual Studio 10.0\VC\include下,有一个存在,没有覆盖。

3)先启动vc 命令行终端,在终端中在启动msys.bat

4)下载 http://git.1f0.de/gitweb?p=ffmpeg.git;a=summary;js=1 ffmpeg,下载对应的lav所修改的版本。

5)修改build_ffmpeg_msvc.sh make -j8去掉j8 debug改为release版本, --enable-debug 改为--disable-debug

用默认的bat编译失败 make -j8 捣的鬼,j8代表多少个线程同时编译,如果直接make代表一个一个编译。现在的就是make -j8出错。修改build_ffmpeg_msvc.sh 和 build_ffmpeg.sh

编译步骤:

Msvc编译:

1)启动vc命令行终端

2)启动C:\MinGW\msys\1.0\msys.bat

3)export PATH=$PATH:/c/mingw/bin fstab中如果有了映射则这个就不需要了

4)cd /e/develop/KTVSystemDevelop/LAVFilters/

5)./build_ffmpeg_msvc.sh

Gcc编译:

同msvc 最后运行 build_ffmpeg.sh,千万注意一定要在vc命令行终端中启动msys.bat否则会出现莫名的错误。

【其它】

不要用默认配置,需要根据需要带参数,故进入lavfilter 执行build.bat执行其中的build_ffmpeg.sh

如果提示VS2010 Cannot determine the location of the VS Common Tools folder. 卸载2010再重新安装解决,应该是netframework的原因即没有该framework导致bat脚本的时候不存在变量什么的网络手写更改要注意framework的版本,不可靠。

可以注释掉64位的编译。如果你不需要的话。 Rem 注释掉那些行

Ffmpeg需要很多第三方库故一定要git,其编译脚本会自动下载所需的第三方库和文件。

【LAVFilters】

1)下载新release的版本的source code,不要最新的,一定要release的确保稳定可靠源码工程下载 : http://git.1f0.de/gitweb?js=1

2)和本地修改的版本合并,本地修改了音轨多输出等

3)在vs2010编译。

Vs2010序列号: YCFHQ-9DWCY-DKV88-T2TMH-G7BHP

【LAVFilters】编译

获取msys编译环境 MSYS_MinGW-w64_GCC_482_x86-x64_Full.7z,下载路径,http://xhmikosr.1f0.de/tools/,直接解压到C:\MYSYS目录

获取lavfilters source code http://git.1f0.de/gitweb?js=1 lavfsplitter.git 选择release版本如0.59.1下载打包的sourcecode tar.gz 解压缩到LAVFilters

获取lavfilters用到的第三方code ffmpeg.git 地址同上,获取lav0.59.1特定release版本,解压到LAVFilters的下一级目录ffmpeg

获取libbluray.gitqsdecoder.git并解压缩到lavfilters\libbluray 和 lavfilters\qsdecoder

用命令行工具编译ffmpeg,注意一定要先起vc 命令行终端否则最后编译的文件出错

启动 VC Command Line

Cd c:\MYSYS

MYSYS.BAT

CD /E/LAVFILTERS

./BUILD_FFMPEG.SH

在vc2010中加载lavfilters.SLN 编译release版本

7楼 toshiba689 2014-03-12 08:20发表 [回复]

我刚才看了lavfilters-readme.txt里的complie说明:

Compiling is pretty straight forward using VC++2013 (included project files).

Older versions of Visual Studio are not supported.

6楼 toshiba689 2014-03-12 08:14发表 [回复]

我下载LAVFilter最新的源代码0.61版本,用VC2010编译出现很多问题,其中出现最多的是在类声明里赋值变量,类似这种用法:

IDirectXVideoDecoderService *m_pDXVADecoderService = nullptr;

IDirectXVideoDecoder *m_pDecoder = nullptr;

我的VC2010无法编译通过,请问这个编译错误怎么解决?

还有一个错误:ffmpeg目录里面缺少config.h,这个文件 在工程 目录里根本 找不到。

5楼 shuishouzkh 2013-12-27 10:25发表 [回复]

编译过了,谢谢!

但是我发现另外一个问题:

lav video这个filter 设置quick sync解码 显示available,但是运行起来 用gpu-z查看 intel的占用率不会变化,而cpu会上涨,请问您知道这是什么原因吗?

4楼 xuxinhua 2013-12-04 12:08发表 [回复]

如果直接下载的ffmpeg,它需要动态链接gcc等so库,你可以用depend工具看一下依赖,所以我用的就是他们发布的编译配置,请参考使用

3楼 shuishouzkh 2013-11-27 18:13发表 [回复]

还有一点就是lav cuvid这个项目编译正常,ax文件也正常

2楼 shuishouzkh 2013-11-27 18:10发表 [回复]

另外我把官网下载下来的编译好的dll替换我的bin_Win32目录,在cmd下可以注册成功,也可使用。

bin_win32下的dll有这些:avcodec-lav-55.dll,avfilter-lav-3.dll,avformat-lav-55.dll,avresample-lav-1.dll,avutil-lav-52.dll,IntelQuickSyncDecoder.dll,libbluray.dll,swscale-lav-2.dll

编译好几天了,没成功,很希望得到帮助,希望版主给点建议,谢谢!

1楼 shuishouzkh 2013-11-27 18:02发表 [回复] [引用] [举报]

请问我编译成功了,但是得到的ax文件在Windows下的cmd不能注册,而在mingw下却能注册,不过注册成功后在GraphEdit Studio下不能insert,点击insert的时候没反应,这是什么原因?