FFmpeg开发笔记(一):ffmpeg介绍、windows开发环境搭建(mingw和msvc,无需源码编译)

简介: FFmpeg开发笔记(一):ffmpeg介绍、windows开发环境搭建(mingw和msvc,无需源码编译)

前言

想写这个开发笔记很久,比较忙,下面进入正题,本篇章是对之前的开发笔记整理(2018年下半年)。

 

FFmpeg下载

FFmpeg可下载以及版本介绍

官方下载地址:https://ffmpeg.zeranoe.com/builds/

CSDN下载地址:https://download.csdn.net/download/qq21497936/10666651

QQ群:1047134658(点击“文件”搜索“ffmpeg-4.0.2-win(32+64)-(static+shared+dev)”,群内与博文同步更新)

开发使用当前最新的版本4.0.2,版本介绍如下:

  • Static(静态库版本):里面只有3个应用程序:ffmpeg.exe,ffplay.exe,ffprobe.exe,每个exe的体积都很大,相关的dll已经被编译到exe里面去了。作为工具而言此版本最合适,不依赖动态库,单个可运行程序;
  • Shared(动态库版本)里面除了3个应用程序:ffmpeg.exe,ffplay.exe,ffprobe.exe之外,还有一些动态dll,比如说avcodec-54.dll之类的。Shared里面的exe体积很小,他们在运行的时候,到相应的dll中调用功能。程序运行过程必须依赖于提供的dll文件,开发程序是必须下载该版本,因为只有该版本中有dll动态库(dev开发者版本中不包含)
  • Dev(开发者版本):是用于开发的,里面包含了库文件xxx.lib以及头文件xxx.h,这个版本不包含exe文件和dll文件。dev版本中include文件夹内包含所有头文件,lib文件夹中包含所有编译开发所需要的库,但没有运行库,需要从Shared版本。

笔者开发使用4.0.2的win32版本(多平台开发,也许就有32位机要运行呢?)

 

Qt+FFmpeg环境搭建以及工程模板

步骤一:安装Qt5.9.3

      笔者安装的Qt5.9.3版本,勾选msvc2017 64版本和mingw32版本,具体安装请百度,此处略。

步骤二:新建FFmpeg工程

      打开QtCreator新建工程FFmpegDemo,如下图:

笔者遵循代码模块化,所以我们在工程主目录下建立

modules/FFmepgServer/FFmpegServer.pri

在pro头文件中包含FFmpegServer.pri

include($$PWD/modules/FFmpegServer/FFmpegServer.pri)

添加两行代码,用于引入本模块的头文件路径

添加新类FFmpegServer,集成QObject,主要用于提供一些FFmpeg服务,如录屏,抓图,存录像,转流媒体服务等等,不进行播放端操作;(播放属于另一业务块,所以后续会另行创建其他类);

步骤三:导入FFmpegSdk

      打开模块文件夹,将shared和dev拷贝过来,分别解压到当前文件夹如下图:

正确放置FFmpeg动态库,方法至少有两种:

  • 方法一(推荐)将shared的dll拷贝进lib,这种模块封装性较好,拿来就用,发布时拷贝下dll,如下图:

  • 方法二:奖shared的dll拷贝进运行目录(注意是否使用Qt影子工程),这种模块封装性不好,每次引用模块可以编译,运行“异常退出”,自己给自己挖坑,因为容易忘记将shared拷贝进运行库。添加FFmpeg搜索路径和配置工程文件,如下:
INCLUDEPATH += $$PWD/ffmpeg-4.0.2-win32-dev/include
LIBS += -L$$PWD/ffmpeg-4.0.2-win32-dev/lib \
                -lavcodec \
                -lavdevice \
                -lavfilter \
                -lavformat \
                -lavutil \
                -lpostproc \
                -lswscale

FFmpegServer.pri如下图:

拓展补充:可以通过脚本命令对依赖库进行拷贝,请参考:《Qt实用技巧:win将ffmpeg、opengl、osg等各种库封装成qt模块,运行需要dll,增加自动拷贝运行库到exe目录执行脚本》。

步骤四:添加FFmpeg代码测试工程

      在FFmpegServer.h添加头文件,因为qt工程是c++工程,必须加入extern “C”,否则在测试的时候会提示找不到函数,如下图:

      正确添加的代码如下:

extern "C" {
    #include <libavcodec/avcodec.h>
    #include <libavformat/avformat.h>
    #include <libswscale/swscale.h>
    #include <libavdevice/avdevice.h>
    #include <libavformat/version.h>
    #include <libavutil/time.h>
    #include <libavutil/mathematics.h>
}

      在FFmpeg的构造函数中,使用qDebug()打开出ffmpeg的配置信息,代码如下图:

      在Mianwindow中new FFmpegServer类,运行成功则表示搭建qt+ffmpeg开发环境成功,如下图:

步骤五:切换编译器msvc/mingw32工程测试

当前使用的编译工程如下(注意去掉shadow影子工程):

切换至msvc编译工程报错如下(注意去掉shadow影子工程):

      是因为msvc使用的64位的编译器,那么导入ffmpeg sdk 64位的,如下图:

      还是将shared/bin下的dll拷贝到dev/lib(参考下图32位的):

修改pri文件(pro无法判断编译器,手动切换或者可自己定义Config判断):

编译运行成功:

步骤六:优化使msvc/mingw32都可编译成功

      添加系统判断和编译器判断,配置文件中是以系统构架来判断编译的位数,实际可能会存在操作系统64位但是编译目标为32位的,那么只能自己注意改动了,因为据笔者目前所知,.pro(.pri)是无法判断编译器位数的。

 

工程模板

下载地址:https://download.csdn.net/download/qq21497936/10667360

QQ群:1047134658(点击“文件”搜索“FFmpegDemo4.0.2通用工程模板”,群内与博文同步更新)


相关文章
|
5天前
|
Linux 编译器 Android开发
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
在Linux环境下,本文指导如何交叉编译x265的so库以适应Android。首先,需安装cmake和下载android-ndk-r21e。接着,下载x265源码,修改crosscompile.cmake的编译器设置。配置x265源码,使用指定的NDK路径,并在配置界面修改相关选项。随后,修改编译规则,编译并安装x265,调整pc描述文件并更新PKG_CONFIG_PATH。最后,修改FFmpeg配置脚本启用x265支持,编译安装FFmpeg,将生成的so文件导入Android工程,调整gradle配置以确保顺利运行。
24 1
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
|
3月前
|
缓存 网络协议 数据安全/隐私保护
[运维笔记] - (命令).Windows server常用网络相关命令总结
[运维笔记] - (命令).Windows server常用网络相关命令总结
191 0
|
3月前
|
编解码 数据安全/隐私保护 内存技术
ffmpeg笔记(三)ffmpeg指令总结
ffmpeg笔记(三)ffmpeg指令总结
|
20天前
|
编解码 缓存 算法
FFmpeg开发笔记(四)FFmpeg的动态链接库介绍
FFmpeg是一个强大的多媒体处理框架,提供ffmpeg、ffplay和ffprobe工具及八个库:avcodec(编解码)、avdevice(设备输入输出)、avfilter(音视频滤镜)、avformat(格式处理)、avutil(通用工具和算法)、postproc(后期效果)、swresample(音频重采样)和swscale(视频图像转换)。这些库支持定制化开发,涵盖了从采集、编码、过滤到输出的全过程。了解详细FFmpeg开发信息,可参考《FFmpeg开发实战:从零基础到短视频上线》。
32 0
FFmpeg开发笔记(四)FFmpeg的动态链接库介绍
|
20天前
|
编解码 搜索推荐 开发者
FFmpeg开发笔记(三)FFmpeg的可执行程序介绍
FFmpeg提供ffmpeg、ffplay和ffprobe三个可执行程序。ffmpeg用于音视频转换和查询支持信息,如编解码器、文件格式和协议。ffplay是一个简单的播放器,支持播放音视频并显示相关信息。ffprobe用于分析多媒体文件参数和数据包详情。《FFmpeg开发实战:从零基础到短视频上线》一书提供更深入的开发知识。
25 4
FFmpeg开发笔记(三)FFmpeg的可执行程序介绍
|
21天前
|
Linux API C语言
FFmpeg开发笔记(一)搭建Linux系统的开发环境
本文指导初学者如何在Linux上搭建FFmpeg开发环境。首先,由于FFmpeg依赖第三方库,可以免去编译源码的复杂过程,直接安装预编译的FFmpeg动态库。推荐网站<https://github.com/BtbN/FFmpeg-Builds/releases>提供适用于不同系统的FFmpeg包。但在安装前,需确保系统有不低于2.22版本的glibc库。详细步骤包括下载glibc-2.23源码,配置、编译和安装。接着,下载Linux版FFmpeg安装包,解压至/usr/local/ffmpeg,并设置环境变量。最后编写和编译简单的C或C++测试程序验证FFmpeg环境是否正确配置。
37 8
FFmpeg开发笔记(一)搭建Linux系统的开发环境
|
1月前
|
数据可视化 数据库 C++
Qt 5.14.2揭秘高效开发:如何用VS2022快速部署Qt 5.14.2,打造无与伦比的Windows应用
Qt 5.14.2揭秘高效开发:如何用VS2022快速部署Qt 5.14.2,打造无与伦比的Windows应用
|
3月前
|
存储 编解码 算法
ffmpeg笔记(一)音视频基础
ffmpeg笔记(一)音视频基础
|
3月前
|
存储 Ubuntu 开发工具
ffmpeg笔记(二)windows下和ubuntu-16.04下ffmpeg编译
ffmpeg笔记(二)windows下和ubuntu-16.04下ffmpeg编译
|
4月前
|
编解码 开发工具 git
ffmpeg 常用的批处理文件(windows版)
ffmpeg 常用的批处理文件(windows版)
101 0