VS2015编译FFMpeg3.2.4

本文提供了一套详细的指南,介绍如何使用VS2015编译FFMpeg 3.2.4版本。内容包括下载源码、安装必要组件、设置编译环境及解决常见编译问题等。

VS2015编译FFMpeg3.2.4


       工作需求又不熟悉Linux编译环境,mingw感觉也用不太来,所以折腾直接采用vs2015直接编译FFMpeg,在此感谢ShiftMediaProject大神提供了vs2015的工程,感谢《使用vs2013或vs2015 编译ffmpeghttp://www.jianshu.com/p/e72e6dce7f23提供了问题解决思路:


以下是我采用VS2015编译FFMpeg的全过程:


1、从这里完整下载所有源代码

     https://github.com/ShiftMediaProject

   完整链接(可以直接迅雷下载):

   https://codeload.github.com/ShiftMediaProject/FFmpeg/zip/master


2、然后解压到如E:\ffmpeg\ffmpeg-vs2015\FFmpeg


3、进入E:\FFMpeg\FFmpeg-VS2015\FFmpeg\SMP,执行SMP下的project_get_dependencies.bat,下载时间有点久,耐心等待一会。

   

4、下载vsyasm-1.3.0-win32,地址

https://github.com/ShiftMediaProject/VSYASM/releases/download/0.2/VSYASM.zip

(试过其他版本,多少有点问题,最后用这个地址的解决了)


5、解压到

C:\ProgramFiles\MSBuild\Microsoft.Cpp\v4.0\V140\BuildCustomizations

并将yasm-32.exe改名为yasm.exe

(因为部分项目的project工程文件写了yasm.target的路径,如libavcodec)


网上的 http://www.jianshu.com/p/e72e6dce7f23 这篇文章应该是有点问题的,没有和原作者确认,但是采用他的方式编译失败

 

                    

8、拷贝yasm.exe, yasm.props、yasm.targets、yasm.xml 这4个文件到

C:\Program Files\Microsoft Visual Studio 14.0\VC  

 

7、下载nvidia_video_sdk_6.0.1.zip,地址如下,并解压到E:\FFMpeg\FFmpeg-VS2015

http://developer2.download.nvidia.com/assets/cuda/files/nvidia_video_sdk_6.0.1.zip?uXGfRNlk6swevQ869dOZXrG2nVXFkIN_UyX-Pn0OpDCWgiIfLPIQiYtGcl4IQy9XRcNdC1UMNBDqMwsqe2aZ0BRQkONKrWi2WQE-ocy5zN2DvEc4Jbd8uJsP96tdZ3XlQDmhWQBmVDRtpuY


8、打开工程ffmpeg_deps.sln,此时应该可以看到所有工程都导入成功了

9、设置libavdevice工程属性,设置附加包含目录和lib

$(SolutionDir)..\..\nvidia_video_sdk_6.0.1\Samples\common\inc

  Lib库(需要逐一配置)

$(SolutionDir)..\..\nvidia_video_sdk_6.0.1\Samples\common\libWin32


10libavcodec项目右键 -Properties - VC++ Directories,同上添加上述的inclib


11、设置为X86方式编译最后有4个失败,

5>  opengl_enc.c

5>..\libavdevice\opengl_enc.c(43):fatal error C1083: Cannot open include file: 'GL/glext.h': No such file ordirectory

6>------已启动生成: 项目: ffmpeg, 配置:Debug Win32 ------

7>------已启动生成: 项目: ffplay, 配置:Debug Win32 ------

8>------已启动生成: 项目: ffprobe, 配置:Debug Win32 ------

6>C:\ProgramFiles\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppBuild.targets(1189,5):warning MSB8012:TargetPath(E:\Work\SourceCode\FFMpeg\FFMpeg-Vs2015-SMP\FFmpeg\FFMpeg\SMP\..\..\..\msvc\ffmpeg.exe)does not match the Linker's OutputFile property value(E:\Work\SourceCode\FFMpeg\FFMpeg-Vs2015-SMP\msvc\bin\x86\ffmpeg.exe). This maycause your project to build incorrectly. To correct this, please make sure that$(OutDir), $(TargetName) and $(TargetExt) property values match the valuespecified in %(Link.OutputFile).

7>C:\ProgramFiles\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppBuild.targets(1189,5):warning MSB8012:TargetPath(E:\Work\SourceCode\FFMpeg\FFMpeg-Vs2015-SMP\FFmpeg\FFMpeg\SMP\..\..\..\msvc\ffplay.exe)does not match the Linker's OutputFile property value(E:\Work\SourceCode\FFMpeg\FFMpeg-Vs2015-SMP\msvc\bin\x86\ffplay.exe). This maycause your project to build incorrectly. To correct this, please make sure that$(OutDir), $(TargetName) and $(TargetExt) property values match the valuespecified in %(Link.OutputFile).

8>C:\ProgramFiles\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppBuild.targets(1189,5):warning MSB8012:TargetPath(E:\Work\SourceCode\FFMpeg\FFMpeg-Vs2015-SMP\FFmpeg\FFMpeg\SMP\..\..\..\msvc\ffprobe.exe)does not match the Linker's OutputFile property value(E:\Work\SourceCode\FFMpeg\FFMpeg-Vs2015-SMP\msvc\bin\x86\ffprobe.exe). Thismay cause your project to build incorrectly. To correct this, please make surethat $(OutDir), $(TargetName) and $(TargetExt) property values match the valuespecified in %(Link.OutputFile).

6>LINK: fatal error LNK1181: cannot open input file 'libavdeviced.lib'

8>LINK: fatal error LNK1181: cannot open input file 'libavdeviced.lib'

7>LINK : fatal errorLNK1181: cannot open input file 'libavdeviced.lib'

12.从Mingw\include\GL\glext.h拷贝glext.h到C:\Program Files\WindowsKits\8.1\Include\um\gl下重新编译libavdevice通过

13.编译ffplay失败,错误信息为

1>------已启动生成: 项目: ffmpeg, 配置:Debug Win32 ------

1>C:\ProgramFiles\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppBuild.targets(1189,5):warning MSB8012: TargetPath(E:\Work\SourceCode\FFMpeg\FFMpeg-Vs2015-SMP\FFmpeg\FFMpeg\SMP\..\..\..\msvc\ffmpeg.exe)does not match the Linker's OutputFile property value(E:\Work\SourceCode\FFMpeg\FFMpeg-Vs2015-SMP\msvc\bin\x86\ffmpeg.exe). This maycause your project to build incorrectly. To correct this, please make sure that$(OutDir), $(TargetName) and $(TargetExt) property values match the valuespecified in %(Link.OutputFile).

1>libavdeviced.lib(SDL_dynapi.obj): warning LNK4075: ignoring '/EDITANDCONTINUE' due to '/OPT:LBR' specification

1>     Creating libraryE:\Work\SourceCode\FFMpeg\FFMpeg-Vs2015-SMP\FFmpeg\FFMpeg\SMP\..\..\..\msvc\ffmpeg.liband objectE:\Work\SourceCode\FFMpeg\FFMpeg-Vs2015-SMP\FFmpeg\FFMpeg\SMP\..\..\..\msvc\ffmpeg.exp

1>libavcodecd.lib(xvid.obj): error LNK2019: unresolved external symbol _bgr_to_yv12_mmx referenced infunction _xvid_gbl_init

1>libavcodecd.lib(xvid.obj): error LNK2019: unresolved external symbol _rgb_to_yv12_mmx referenced infunction _xvid_gbl_init

1>libavcodecd.lib(xvid.obj): error LNK2019: unresolved external symbol _bgra_to_yv12_mmx referenced infunction _xvid_gbl_init

1>libavcodecd.lib(xvid.obj): error LNK2019: unresolved external symbol _rgba_to_yv12_mmx referenced infunction _xvid_gbl_init

1>  libavcodecd.lib(xvid.obj): error LNK2019: unresolved external symbol _yuyv_to_yv12_mmx referenced infunction _xvid_gbl_init


14重新编译下libxvidcore、libavcodec,然后再重新编译FFMpeg就可以了

1>  ffplay.vcxproj ->E:\Work\SourceCode\FFMpeg\FFMpeg-Vs2015-SMP\FFmpeg\FFMpeg\SMP\..\..\..\msvc\ffplay.exe

2>  ffprobe.vcxproj ->E:\Work\SourceCode\FFMpeg\FFMpeg-Vs2015-SMP\FFmpeg\FFMpeg\SMP\..\..\..\msvc\ffprobe.exe

敬告:本课程基于最新版FFmpeg4.3.1开发,仅供学习参考,不可以直接商用(想直接购买商用源代码的同学,请放弃!)。我将带领大家从以下几个方面来深入剖析ffmpeg4.3:“拿来主义”、“为我所用”。通过学习本课程,您将收获:三大多媒体框架(DirectShow、GStreamer、FFmpeg)简介与分析FFmpeg4.3的开发环境搭建(重要讲解windows下的源码编译vs2015的环境)ffmpeg.c(4.3.1)源码剖析(分析开源大师们的设计理念和编码技巧)亲手封装私有函数:获取音视频流信息(类似于MediaInfo)、获取实时转码进度(改善用户体验)两套实现代码: MFC和Qt。-------------------------------------------------------------------音视频是一门很复杂的技术,涉及的概念、原理、理论非常多,很多初学者不学 基础理论,而是直接做项目,往往会看到c/c++的代码时一头雾水,不知道代码到底是什么意思,这是为什么呢? 因为没有学习音视频的基础理论,就比如学习英语,不学习基本单词,而是天天听英语新闻,总也听不懂。所以呢,一定要认真学习基础理论,然后再学习播放器、转码器、非编、流媒体直播、视频监控、等等。 梅老师从事音视频与流媒体行业18年;曾在永新视博、中科大洋、百度、美国Harris广播事业部等公司就职,经验丰富;曾亲手主导广电直播全套项目,精通h.264/h.265/aac,曾亲自参与百度app上的网页播放器等实战产品。目前全身心自主创业,主要聚焦音视频+流媒体行业,精通音视频加密、流媒体在线转码快编等热门产品。  
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值