2019编译ffepeg vs_如何在windows10下使用vs2017编译最新版本的FFmpeg和ffplay

该文章描述了如何在windows10 64位系统下面编译出FFmpeg的库及其自带的ffplay播放器,而且全部采用最新的版本,这样我们可以在vs2017的ide下调试ffplay,能使我们更容易学习FFmpeg的架构以及音视频播放器的原理。

步骤:

1.安装vs2017

在https://visualstudio.microsoft.com/zh-hans/downloads/下载vs2017的社区版,执行安装程序后进入下面界面,选择如图所示的几个项目安装就行了。安装后可得到msvc的交叉编译环境,该toolchain用于在msys2下编译FFmpeg。我这里的安装路径是"C:\Program Files (x86)\Microsoft Visual Studio"

166976776_4_2019072709194397

2.安装msys2

在http://www.msys2.org/下载msys2,如下图所示,因为我是64位的系统,所以选择 msys2-x86_64-20180531.exe进行安装下载。

166976776_5_20190727091943659

3.下载ffmpeg源码和SDL2源码

在http://ffmpeg.org/download.html下载最新的FFmpeg代码,我是使用git直接clone下最新的FFmpeg的源码到本地的,当然也可以选择直接下载打包好的源码。我的FFmpeg的源码目录是D:\git\FFmpeg。

166976776_6_20190727091944331

在http://www.libsdl.org/download-2.0.php下载SDL2的源码,我选择的源码的zip包下载的,也就是SDL2-2.0.9.zip。我将其解压到D盘,目录是D:\SDL2-2.0.9

166976776_7_2019072709194597

4.编译SDL2生成SDL2的静态库和动态库

启动vs2017,导入D:\SDL2-2.0.9\VisualC下的解决方案,原解决方案是vs2010下的,导入过程中会升级到最新的平台工具集。然后我们点击SDL2和SDL2main两个项目进行生成,编译成功后会生成32位的SDL2的静态库和动态库,位置在D:\SDL2-2.0.9\VisualC\Win32下面,其中的SDL2.dll,SDL2.lib,SDL2main.lib三个文件是我们编译ffplay需要的。

166976776_8_20190727091945769.png

上面还只是编译出32位的SDL2的库,如果要64位的库,我们只需将编译环境改成x64后对SDL2和SDL2main两个项目进行生成,成功后的库在D:\SDL2-2.0.9\VisualC\x64\Debug目录下。

上面生成的库是debug的库,如果需要release的库改一下编译选项即可。

5.设置msys2的编译环境

进入msys2的安装路径,我这里的路径是D:\mysys64,编辑该目录下的msys2_shell.cmd文件,在setlocal后加入一行

call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars32.bat"

该命令表示加载vs2017的32位交叉编译环境,如果要编译64位的库则执行vcvars64.bat,也就是

call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat"

166976776_9_201907270919463

6.编译FFmpeg的静态库和动态库

在步骤5设置好msys2的环境后执行msys2_shell.cmd,进入msys2的命令行模式,windows系统默认是gbk编码,编译过程中可能出现乱码,需要修改该窗口的text为gbk编码,右键点击窗口选择Options,再选择Text,修改编码为gbk,如下图所示

166976776_10_20190727091946550

进入FFmpeg的源码目录进行编译,我这里是D:\git\FFmpeg,FFmpeg的配置如下,其中--prefix=x32中的x32表示编译好后的安装目录,编译成功后执行make install会放在FFmpeg目录下的x32文件夹里面。

cd /d/git/FFmpeg

./configure --enable-shared --enable-static --toolchain=msvc --prefix=x32 --enable-postproc --enable-gpl --enable-avresample

166976776_11_20190727091946925

执行./configure命令后等待比较长时间直到回到命令行提示符

由于windows10系统默认是gbk编码,而我们FFmpeg的源码都是utf8编码,编译时候如果代码里面有中文,就会产生问题,有2个文件里面带有中文,我们需要将其转换为utf8编码,一个是D:\git\FFmpeg\config.h,另外一个是D:\git\FFmpeg\ffbuild\config.mak。

转换完成以后执行编译命令

make -j4

经过很长时间编译完成后执行

make install

现在我们打开FFmpeg目录下的x32目录,就可以看到编译好的FFmpeg的静态库和动态库

166976776_12_20190727091947128.png

bin目录下放的是静态库和动态库,include目录下放的是头文件,这两个目录下的东西都是我们在vs2017环境下编译ffplay需要的。

7.在vs2017下编译ffplay

打开vs2017选择文件,新建项目,选择visual c++下的Windows桌面,建立一个空项目

166976776_13_20190727091947363

开始拷贝文件到ffplay目录下,我这里SDL的目录是D:\SDL2-2.0.9\VisualC\Win32,FFmpeg的目录是D:\git\FFmpeg。在D:\ffplay\ffplay目录下新建一个文件夹lib用于放ffmpeg静态库和sdl2的静态库。

拷贝D:\git\FFmpeg\下的config.h文件到D:\ffplay\ffplay目录

拷贝D:\git\FFmpeg\fftools下的ffplay.c,cmdutils.c,cmdutils.h三个文件到D:\ffplay\ffplay目录

拷贝D:\git\FFmpeg\x32下的include文件夹到D:\ffplay\ffplay目录下,如果是64位的,则从D:\git\FFmpeg\x64下拷贝。

拷贝D:\git\FFmpeg\x32\bin下的所有扩展名为lib的文件到D:\ffplay\ffplay\lib下面,拷贝D:\git\FFmpeg\x32\bin下的所有扩展名为dll的文件到D:\ffplay\ffplay下面。如果是64位的,则从D:\git\FFmpeg\x64\bin文件夹拷贝。

拷贝D:\SDL2-2.0.9\VisualC\Win32\Debug下的SDL2.lib,SDL2main.lib到D:\ffplay\ffplay\lib下面,拷贝D:\SDL2-2.0.9\VisualC\Win32\Debug下的SDL2.dll到D:\ffplay\ffplay下面。如果是64位的,则从D:\SDL2-2.0.9\VisualC\x64\Debug文件夹下拷贝。

在D:\ffplay\ffplay\include目录下新建一个文件夹SDL2,拷贝D:\SDL2-2.0.9\include下的全部头文件到D:\ffplay\ffplay\include\SDL2目录下。

现在文件拷贝完毕,开始配置ffplay项目的属性。

右键点击ffplay下的源文件,选择添加-》现有项,把D:\ffplay\ffplay目录下的cmdutils.c和ffplay.c加进来。如下图所示

166976776_14_20190727091947738

右键点击ffplay下的头文件,选择添加-》现有项,把D:\ffplay\ffplay目录下的cmdutils.h和config.h加进来。

右键点击ffplay,选择属性,配置属性下的常规,项目默认的字符集改成使用Unicode字符集,如下图所示

166976776_15_20190727091948238

VC++目录下库目录加上lib,如下图所示

166976776_16_20190727091948675

C/C++下的常规中,附加包含目录改成include,另外SDL检查改成否,如下图所示

166976776_17_2019072709194934

链接器下的输入中的附加依赖项改成

avcodec.lib;avformat.lib;avutil.lib;avdevice.lib;avfilter.lib;postproc.lib;swresample.lib;swscale.lib;SDL2.lib;SDL2main.lib;avresample.lib;%(AdditionalDependencies)如下图所示

166976776_18_20190727091949519

右键点击ffplay项目,选择重新扫描方案,然后开始编译

166976776_19_20190727091949769

编译遇到错误,找不到三个头文件,注释掉就可以了,如下图所示,注释掉ffplay.c中这三个出错的头文件引用就可以了

166976776_20_20190727091950363

现在ffplay已经可以编译通过了,可以测试一下能否正常工作,选择ffplay属性页中的调试,将命令参数设置需要播放的音视频文件地址,就可以了,记得命令参数要空格开头,不同参数之前用空格隔开

166976776_21_20190727091951409

点击本地windows调试器开始运行ffplay

166976776_22_20190727091951847

总结:

在windows环境下编译FFmpeg和ffplay并不复杂,编译好的库可以正常在vs2017下调用,我们可以方便的使用这些库开发windows下的音视频播放器。

编译重点在于选择和正确配置编译环境,32位和64位的库要选择相对应的编译环境,另外由于windows环境是gbk编码,而FFmpeg是utf8编码,所以编译过程中可能遇到这方面问题,具体情况需要具体分析。

特别纪念雷霄骅博士,我就是在他的文章的指导下了解了很多关于FFmpeg的知识,希望他在天堂安好。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/260500.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

训练集山准确率高测试集上准确率很低_推荐算法改版前的AB测试

编辑导语:所谓推荐算法就是利用用户的一些行为,通过一些数学算法,推测出用户可能喜欢的东西;如今很多软件都有这样的操作,对于此系统的设计也会进行测试;本文作者分享了关于推荐算法改版前的AB测试&#xf…

C#实现渐变颜色的Windows窗体控件

C#实现渐变颜色的Windows窗体控件! 1,定义一个BaseFormGradient,继承于System.Windows.Forms.Form2,定义三个变量: privateColor _Color1 Color.Gainsboro; privateColor _Color2 Color.White; privatefloat_ColorAngle 0f;3,重载OnPaintBackground方法 protecte…

Windows下 jupyter notebook 运行multiprocessing 报错的问题与解决方法

文章目录测试用的代码错误解决方法测试用的代码 下面每一个对应一个jupyter notebook的单元格 import time from multiprocessing import Process, Queuedef generator():c 0while True:time.sleep(1.0) # read somethingyield cc 1%%timeds generator() for i in range(3…

vc mysql_vc6.0连接mysql数据库

一、MySQL的安装Mysql的安装去官网下载就可以。。。最新的是5.7版本。。二、VC6.0的设置(1)打开VC6.中选0 工具栏Tools菜单下的Options选项,在Directories的标签页中右边的“Show directories for:”下拉列表中“Includefiles”,然后在中间列表框中添加你…

python class用法_python原类、类的创建过程与方法

【小宅按】今天为大家介绍一下python中与class 相关的知识……获取对象的类名python是一门面向对象的语言,对于一切接对象的python来说,咱们有必要深入的学习与了解一些知识首先大家都知道,要获取一个对象所对应的类,需要使用clas…

深度学习中的一些常见的激活函数集合(含公式与导数的推导)sigmoid, relu, leaky relu, elu, numpy实现

文章目录Sigmoid(x)双曲正切线性整流函数 rectified linear unit (ReLu)PReLU(Parametric Rectified Linear Unit) Leaky ReLu指数线性单元 Exponential Linear Units (ELU)感知机激活%matplotlib inline %config InlineBackend.f…

最牛X的GCC 内联汇编

正如大家知道的,在C语言中插入汇编语言,其是Linux中使用的基本汇编程序语法。本文将讲解 GCC 提供的内联汇编特性的用途和用法。对于阅读这篇文章,这里只有两个前提要求,很明显,就是 x86 汇编语言和 C 语言的基本认识。…

mysql的告警日志_MySQL Aborted connection告警日志的分析

前言:有时候,连接MySQL的会话经常会异常退出,错误日志里会看到"Got an error reading communication packets"类型的告警。本篇文章我们一起来讨论下该错误可能的原因以及如何来规避。1.状态变量Aborted_clients和Aborted_connects…

hosts多个ip对应一个主机名_一个简单的Web应用程序,用作连接到ssh服务器的ssh客户端...

WebSSH一个简单的Web应用程序,用作连接到ssh服务器的ssh客户端。它是用Python编写的,基于tornado,paramiko和xterm.js。特征支持SSH密码验证,包括空密码。支持SSH公钥认证,包括DSA RSA ECDSA Ed25519密钥。支持加密密钥…

Shell Notes(1)

> vi复制粘贴 光标移动到要复制的部分的开头,Esc退出插入模式,按v进入Visual模式,用hjkl选中要复制的部分 按Y或者yy,复制 移动光标到目标位置,按p,粘贴 > echo –e 参数 –e 可以使echo解释由反斜杠…

mysql多表查询语句_mysql查询语句 和 多表关联查询 以及 子查询

1.查询一张表:select * from 表名;2.查询指定字段:select 字段1,字段2,字段3….from 表名;3.where条件查询:select字段1,字段2,字段3 frome表名 where 条件表达式&#x…

Pytorch 自定义激活函数前向与反向传播 sigmoid

文章目录Sigmoid公式求导过程优点:缺点:自定义Sigmoid与Torch定义的比较可视化import matplotlib import matplotlib.pyplot as plt import numpy as np import torch import torch.nn as nn import torch.nn.functional as F%matplotlib inlineplt.rcPa…

js高级编程_这位设计师用Processing把创意编程玩到了极致!

Processing作为新媒体从业者的必备工具,近来却越来越成为设计师们的新宠!今天小编将介绍以为用Processing把创意编程玩到极致的设计师Tim Rodenbrker。“我们的世界正在以惊人的速度变化。新技术为创作带来了根本性的转变。编程是我们这个时代最宝贵的技…

微软.NET Framework 4.5.2 RTM正式版

今天,微软.NET开发团队发布.NET Framework 4.5.2 RTM正式版。新版框架继续高度兼容现有的.NET Framework 4、4.5、4.5.1等版本,该版本框架与旧版的.NET Framework 3.5 SP1和早期版本采取不同的处理方式,但与.NET Framework 4、4.5相比&#x…

Pytorch 自定义激活函数前向与反向传播 Tanh

看完这篇,你基本上可以自定义前向与反向传播,可以自己定义自己的算子 文章目录Tanh公式求导过程优点:缺点:自定义Tanh与Torch定义的比较可视化import matplotlib import matplotlib.pyplot as plt import numpy as np import torc…

HDU ACM 1181 变形课 (广搜BFS + 动态数组vector)-------第一次使用动态数组vector

http://acm.hdu.edu.cn/showproblem.php?pid1181 题意&#xff1a;给我若干个单词,若单词A的结尾与单词B的开头相同,则表示A能变成B,判断能不能从b开头变成m结尾. 如: big-got-them 第一次使用动态数组vector View Code 1 #include <iostream>2 #include <vector>…

Max Sum 杭电 1003

2019独角兽企业重金招聘Python工程师标准>>> #题目概述 题目的意思是给你一个数列&#xff0c;找到一个子数列&#xff0c;这个子数列的和是所有子数列中和最大的。 当然把数列的所有数都列出来肯定不现实。 黑黑&#xff0c;不知道正不正确&#xff0c;我是先从第一…

shiro反序列化工具_Apache Shiro 1.2.4反序列化漏洞(CVE-2016-4437)源码解析

Apache ShiroApache Shiro是一个功能强大且灵活的开源安全框架,主要功能包括用户认证、授权、会话管理以及加密。在了解该漏洞之前,建议学习下Apache Shiro是怎么使用.debug环境jdk1.8Apache Shiro 1.2.4测试demo本地debug需要以下maven依赖<!-- https://mvnrepository.com/…

window 下的mysql_Windows下MySQL下载安装、配置与使用

用过MySQL之后&#xff0c;不论容量的话&#xff0c;发现比其他两个(sql server 、oracle)好用的多&#xff0c;一下子就喜欢上了。下面给那些还不知道怎么弄的童鞋们写下具体的方法步骤。(我这个写得有点太详细了&#xff0c;甚至有些繁琐&#xff0c;有很多步骤在其他的教程文…

Pytorch 自定义激活函数前向与反向传播 ReLu系列 含优点与缺点

文章目录ReLu公式求导过程优点&#xff1a;缺点&#xff1a;自定义ReLu与Torch定义的比较可视化Leaky ReLu PReLu公式求导过程优点&#xff1a;缺点&#xff1a;自定义LeakyReLu与Torch定义的比较可视化自定义PReLuELU公式求导过程优点缺点自定义LeakyReLu与Torch定义的比较可视…