vs2015编译ffmpeg 配置开发环境 (坑多)

心得

  1. 在刚开始学ffmpeg的时候,遇到的最大麻烦就是配置开发环境,ffmpeg我在使用的时候明显感觉linux下面配置比windows下面配置简单多了。但是在win环境下工作也有很多方便的地方。
  2. 在配置这个环境的过程中,并没有像网上找到的那些配置资料那样,很顺利,我遇到的麻烦主要有几点:
    ①网上搜索的资料提供的老ffmpeg build版本网址,已经关闭了。想要得到旧版本ffmpeg,可能要自己编译。
    ②编译环境的问题,到底是选MINGW还是MSVC
    ③vs编译环境导致一系列问题
  3. 下面就是配置环境的过程,希望能帮助被配置环境卡住的人。

一、开发环境

  1. 用的是vs2015 ffmpeg版本 3.4.2

二、编译

先去github上面下载源码,然后再编译成库文件和程序,才能使用。
编译过程会因为系统环境和vs方面的配置,出现各种各样的问题。可以直接去下build好的。
以下为理想中的vs ffmpeg编译过程:

  1. 先安装mys2库,官网为https://www.msys2.org/。下载后安装,我选择安装在D盘,感觉安装包比较大。
  2. 到msys2窗口执行,安装编译程序: pacman -S make gcc diffutils
  3. 重命名D:\Program Files\msys2\usr\bin\link.exe 为link.bak, 避免和MSVC 的link.exe冲突起来。
  4. 安装YASM,官网为http://yasm.tortall.net/Download.html,下载后,将下载回来的yasm-1.3.0-win64.exe 改名为yaml.exe,并放置于 MSYS2 安装目录中。就是放置到D:\Program Files\msys2\usr\bin 中。
  5. 把ffmpeg放msys2目录下面,然后
    ./configure --toolchain=msvc --arch=x86 --enable-yasm --enable-asm --enable-shared --disable-static
    这一步我失败了。
  6. makemake install
  • 总结:我编译失败了,提示是cl问题,估计是环境变量的问题。下面给出解决办法。

错误解决过程

  1. 提示找不到cl,尝试找到vs的cl路径,并添加到环境变量,但是依然报错,并且vs创建不了新的项目,去系统的卸载程序面板,修复vs,修复之后再去configue ffmpeg依然找不到cl。
  2. 重新安装了vs2015,没有提示cl问题了
    但是编译报错,是nasm的问题
    nasm/yasm not found or too old. Use --disable-x86asm for a crippled build.
    在msys2里面执行
    pacman -Su nasm安装编译环境。
    之后再configure
    编译过程很慢,等了很长时间
  3. make 之后,msys2界面中大量报错,命令行 error D8000 :cl:。可能是vs用的是中文版。
    (1)那么需要切换到其他语言包,去vs的选项->工具->区域里面,获取其他语言。跳到微软的网站,下载了一个英语语言包安装程序,运行结果vs2015提示安装不起来,提示已经安装语言(并没有安装)。那么就需要卸载该语言包,然后再重新安装语言包。
    (2)卸载方法为,给语言包安装程序添加快捷方式,打开属性,在最后添加-Uninstall,卸载过程非常慢。卸载完再重新安装英文语言包,之后就可以make和makeinstall了。

编译输出的位置

在我的mysy2安装路径 D:\Program Files\msys2\usr\local下面,出现了几个文件夹,其中include和lib文件夹包含了我所需要的库和头文件。

注意

按照网络搜索的资料,可以直接去ffmpeg build版本的网站上面下载(但是那个网站关闭了)
下载的时候,有几个版本:

  • static:打包好的文件,可以认为是FFmpeg的release版本,提供的是ffmpeg、ffplay、ffprobe三个命令行工具。(只学习命令行的同学可以将此配置到环境变量上)
  • shared:这个包包含static的文件,但是相比较多了链接文件DLL,这些DLL文件在后面开发环境配置配置中会用到。
  • dev:这个是纯开发版本的文件,不包含ffmpeg、ffplay、ffprobe这些命令行工具,但是包含我们开发时使用的头文件(位于include目录),及liib文件(位于lib目录),以及example文件(用于学习和使用)。

来源: https://www.cnblogs.com/renhui/p/10387764.html

那么从上面的描述可以看的出来,需要下载的是shared和dev版本。

原来有个下载ffmpeg build版本的网站倒了,现在用新的网站

https://www.gyan.dev/ffmpeg/builds/

我 之前下了个ffmpeg-4.3.1-2021-01-01-full_build-shared.7z版本,但是在使用这个版本的时候,开发出错了找不到解决办法,所以用回了3.4.2版本,这个版本资料多点。

三、配置vs ffmpeg环境

注意的点

需要区分x86版本和x64版本。我之前编译的是x86版本,所以就用x86版本。
配置过程

  1. 在vs里面选择x86调试器
  2. 把include和lib文件夹复制到项目路径下面,然后把bin目录下面的dll文件复制到项目。
  3. 在项目属性里面:
    c/c++ -> 附加包含目录添加 $(ProjectDir)include
    链接器->常规->附加库目录 $(ProjectDir)lib
    链接器->常规->附加依赖项 添加刚才添加的lib文件下面八个lib文件。

测试

看看配置是否起了作用:
测试代码如下(参考了雷神的文章):
值得注意的是:
在c++里面调用c语言,需要用extern "C"{}来包含,不然报错
调用ffmpeg需要加#define __STDC_CONSTANT_MACROS

#include <Windows.h>
#include "stdafx.h"
#define __STDC_CONSTANT_MACROS
extern "C"
{
    
    
#include "libavcodec\avcodec.h"
}
int main()
{
    
    
    printf("%s", avcodec_configuration());
    getchar();
    
    return 0;
}

打印出结果为:
–enable-gpl --enable-version3 --enable-shared --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-lzma --enable-libsnappy --enable-zlib --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-libbluray --enable-libcaca --enable-sdl2 --enable-libdav1d --enable-libzvbi --enable-librav1e --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libaom --enable-libopenjpeg --enable-libvpx --enable-libass --enable-frei0r --enable-libfreetype --enable-libfribidi --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec --enable-nvdec --enable-nvenc --enable-d3d11va --enable-dxva2 --enable-libmfx --enable-libcdio --enable-libgme --enable-libmodplug --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libshine --enable-libtheora --enable-libtwolame --enable-libvo-amrwbenc --enable-libilbc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-ladspa --enable-libbs2b --enable-libflite --enable-libmysofa --enable-librubberband --enable-libsoxr --enable-chromaprint

扫描二维码关注公众号,回复: 12657473 查看本文章

猜你喜欢

转载自blog.csdn.net/qq_26144489/article/details/113183390