这是我第一次写博客,若有不当之处,请各位前辈批评指正。

ShiftMediaProject:其目的是在Visual Studio内提供一个FFmpeg和其依赖库的本地Window开发库,以便在Visual Studio内简单进行媒体上下文的创建和调试。

本人的电脑配置:Window8 专业版 x64,Visual Studio 2013 update 5.

  1. 新建文件夹D:\ShiftMediaProject(后文称为工程目录),用来存放后面下载的FFmpeg及依赖的库文件;
  2. 从ShifMediaProject github项目主页下载FFmpeg(源码与FFmpeg官网对应版本相同,不过采用Visual Studio2013以上版本对源码逻辑关系进行管理)。解压到工程目录(若是采用git clone得到的,去掉文件夹里的-master)
  3. 查看ShiftMediaProject所依赖的库文件,到ShiftMediaProject github项目主页(https://github.com/ShiftMediaProject)下载,解压到工程目录,如图:

VS2013 update5 采用ShiftMediaProject编译FFmpeg

    4. 在ShiftMediaProject同级目录,新建msvc/include/AMF目录、msvc/include/gl目录。并下载Advanced Media Framework (AMF) SDK headers( https://github.com/GPUOpen-LibrariesAndSDKs/AMF),opengl(链接: https://pan.baidu.com/s/1RaszDV_EFOE-TgqvEm3-fQ 密码: dsvj)、nv-codec-headers(https://github.com/FFmpeg/nv-codec-headers

    5. 将下载得到的AMF-master/amf/public/include下的内容拷贝到msvc/include/AMF下;将前步下载得到的nv-codec-headers-master/include/下的ffnvcodec文件夹拷贝到msvc/include/目录下;将下载得到的opengl中的GLEXT.H、WGLEXT.H文件拷贝到msvc/include/gl文件夹下。

    6. ShiftMediaProject项目中用到汇编语言编译器的项目有:

libxvidcore: yasm
libx265: nasm
libx264: nasm
libvpx: yasm
libswscale: vsyasm
libsaresample: vsyasm
libnettle: yasm
libhogweed: yasm
libgnutls: yasm
libgmp: yasm
libavutil: vsyasm
libavfilter: vsyasm

libavcodec: vsyasm

libass: yasm

为此,需将汇编语言编译器nasm(https://github.com/ShiftMediaProject/VSNASM)、yasm(https://github.com/ShiftMediaProject/VSYASM)、vsyasm(https://link.jianshu.com/?t=http://www.tortall.net/projects/yasm/releases/vsyasm-1.3.0-win32.zip)集成到visual studio2013中。 方法分别是:nasm和yasm只需运行各自文件夹下的install_script.bat安装脚本(注:要求管理员权限的命令行提示符运行),否则可能会安装失败。安装的结果为:拷贝(*.pros、*.targets、*.xml)到C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\BuildCustomizations目录下,自动下载相应的可执行文件到C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC目录***意:这两处的路径跟VS安装的版本和路径有关)。vsyasm则需手动拷贝(*.pros、*.targets、*.xml)三个文件到上述的BuildCustomizations目录下,并将vsyasm.pros文件中的将文中”$(Platform) “ 修改为 ”win$(PlatformArchitecture)“,保存。最后将vsyasm.exe拷贝到C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin目录下

    7. 进入到ShiftMediaProject/FFmpeg***/SMP目录下,打开ffmpeg_deps.sln,发现所有项目均已加载成功,如图:

VS2013 update5 采用ShiftMediaProject编译FFmpeg

若出现用到汇编的项目加载失败,则第6步配置存在问题。

    8. 编译所有项目,第一次编译过程中,可能会提示无法打开***.h文件之类的错误,不用管,等编译完再重新编译即可。若编译过程中出现如图错误:

VS2013 update5 采用ShiftMediaProject编译FFmpeg

则是汇编语言编译器可执行文件的拷贝路径存在问题。请参考第6步配置。

   9. 编译完成后,在之前新建的msvc目录下产生了许多输出文件,如图:

VS2013 update5 采用ShiftMediaProject编译FFmpeg

题外话:对于上图笔者比较好奇的是,在msvc这个结果目录里面,ShiftMediaProject不仅输出了编译好的lib文件,竟然把相关的头文件也给拷贝过来了,也就是说,以后我们想写FFMPEG的相关程序,直接在我们的新项目里面包含该目录就可以了。这一招是怎么实现的,笔者之前是没接触过啦,上网查了之后原来是ShiftMediaProject的大神利用VS工程项目属性里的BUILD EVENT实现的。举个例子,利用对于libavcodec这个项目,如图:

VS2013 update5 采用ShiftMediaProject编译FFmpeg

大神在Post-Build Event里面写了个脚本,告诉VS编译完要做的工作:

VS2013 update5 采用ShiftMediaProject编译FFmpeg

最后将lib文件夹下,在我们的ffmpeg项目中所要到的库所对应的.pdb文件拷贝到新项目的DEBUG目录下(是.exe文件所在的目录),比如在我的live555项目play这个程序用到了ffmpeg:

VS2013 update5 采用ShiftMediaProject编译FFmpeg

如上图所示,即可在Debug模式下对ffmpeg的相关函数进行跟踪,最后附上一张结果图:

VS2013 update5 采用ShiftMediaProject编译FFmpeg

左图为调用ffmpeg的函数,右图为ffmpeg的库函数。

笔者经验:我原本是在visual studio 2013上编译,结果报了很多语法性的错误,后来直接将VS2013到update5才编译通过。其它的VS2013以上版本没有进行尝试,若遇到新的问题,欢迎大家一起交流,谢谢。

原创博文,引用请注明出处:https://blog.csdn.net/jcl1774356658/article/details/79983805。谢谢。

相关文章:

  • 2021-08-13
  • 2022-12-23
  • 2022-12-23
  • 2021-11-25
  • 2021-12-27
  • 2021-11-12
  • 2022-02-20
猜你喜欢
  • 2022-12-23
  • 2021-10-28
  • 2021-06-30
  • 2022-12-23
  • 2021-05-31
  • 2021-06-06
  • 2022-12-23
相关资源
相似解决方案