【秒懂音视频开发】02_Windows开发环境搭建

FFmpeg

为什么选择FFmpeg?

每个主流平台基本都有自己的音视频开发库(API),用以处理音视频数据,比如:

  • iOS:AVFoundation、AudioUnit等
  • Android:MediaPlayer、MediaCodec等
  • Windows:DirectShow等
  • ...

为了让所有平台的开发者都能够学习到音视频开发的通用技术,本教程主要讲解跨平台的音视频开发库FFmpeg。其实只要你掌握了FFmpeg,也可以很快上手其他音视频开发库,因为底层原理都是一样的,你最终操作的都是一样的数据,比如MP3、MP4文件。

下载

网上已经有编译好的FFmpeg,目前最新的Release版本是4.3.2,可以直接下载到项目中进行开发使用。

解压ffmpeg-4.3.2-2021-02-27-full_build-shared.7z文件后,目录结构如下所示:

  • bin
    • 有编译好的可执行程序:ffmpeg.exe、ffplay.exe、ffprobe.exe,可以直接在命令行上使用,比如
      • ffplay xx.mp4:可以直接播放某个视频
      • ffmpeg -version:可以查看FFmpeg的版本号
    • 有运行时需要用到的动态库文件(*.dll)
  • doc:FFmpeg的使用文档
  • include:开发时需要包含的头文件
  • lib:链接时需要用到的库文件

 

目录结构

目录结构

Qt

如果要想开发一个播放器,肯定得编写界面,同样为了保证跨平台开发,这里采用的GUI库是Qt,官方的开发工具QtCreator是跨平台的(支持Windows、Mac、Linux)。Qt开发采用的编程语言是C++。

下载

本教程中选择5.14.2版本(从5.15版本开始是收费版本)。

 

qt安装包

qt安装包

安装

 

Next

Next

需要先注册,再进行登录。

先注册,再登录

先注册,再登录

 

下一步

下一步

 

下一步

下一步

 

选择安装路径

选择安装路径

勾选MinGW 64bit编译器(我电脑的系统是64bit)。

勾选编译器

勾选编译器

如果后期想阅读Qt源码,就选择勾选Qt源码。

勾选源码

勾选源码

默认已经勾选了QtCreator。

默认已经勾选QtCreator

默认已经勾选QtCreator

 

许可协议

许可协议

 

开始菜单快捷方式

开始菜单快捷方式

 

安装

安装

解决控制台中文乱码

工具 -> 选项。

 

文本编辑器 -> 行为 -> 文本编码 -> 默认编码。

 

设置为UTF-8

设置为UTF-8

开发初探

第一个Qt项目

打开QtCreator,文件 -> 新建文件或项目。

 

新建项目

新建项目

Application -> Qt Widgets Application。

 

Qt Widgets Application

Qt Widgets Application

设置项目名称和项目的存放路径。

项目名称和项目的存放路径

项目名称和项目的存放路径

下一步

下一步

QtCreator默认会创建一个MainWindow类(主窗口)。

下一步

下一步

下一步

下一步

勾选MinGW编译器。

下一步

下一步

完成

完成

双击打开mainwindow.ui文件,可以往右边的主窗口中添加一些界面元素(比如按钮)。

双击打开mainwindow.ui文件

双击打开mainwindow.ui文件

拖拽

拖拽

点击左下角的运行按钮(绿色三角形),即可看到一个窗口界面,这个就是QtCreator默认创建的主窗口(MainWindow对象)。

 

消除警告

每次运行Qt程序,你的控制台可能都会出现以下警告信息:QT_DEVICE_PIXEL_RATIO已经过期。

 

复制代码

SH

 

Warning: QT_DEVICE_PIXEL_RATIO is deprecated. Instead use:

 

QT_AUTO_SCREEN_SCALE_FACTOR to enable platform plugin controlled per-screen factors.

 

QT_SCREEN_SCALE_FACTORS to set per-screen DPI.

 

QT_SCALE_FACTOR to set the application global scale factor.

解决方案:设置环境变量QT_SCALE_FACTOR为1即可。

 

复制代码

C++

 

#include "mainwindow.h"

  
 

#include <QApplication>

  
 

// 导入头文件【也可以不导入,因为<QApplication>中已经包含了<QByteArray>】

 

// #include <QByteArray>

  
 

int main(int argc, char *argv[])

 

{

 

// 通过qputenv函数设置QT_SCALE_FACTOR为1

 

qputenv("QT_SCALE_FACTOR", QByteArray("1"));

  
 

QApplication a(argc, argv);

 

MainWindow w;

 

w.show();

 

return a.exec();

 

}

集成FFmpeg到Qt项目中

在Windows中,我们最终是通过调用FFmpeg动态库(dll)中的函数来操作音视频数据,使用dll的其中一种方式是需要用到3种文件:

  • .h:头文件(Header File)
    • 包含了函数的声明
    • 通过#include去导入相应的头文件
  • .dll:动态链接库(Dynamic Link Library)
    • 包含了函数的具体实现代码
    • Windows程序会在运行过程中,动态调用dll中的函数
  • .lib.dll.a:(动态链接库的)导入库(Import Library)
    • .lib:用于MSVC编译器中
    • .dll.a:用于MinGW编译器中
    • 包含了dll中函数的入口,用于辅助找到并调用dll中的函数
    • 最终需要链接到Windows程序中(比如合并到exe文件中)

值得一提的是,在Windows中,静态链接库(Static Link Library)的扩展名也是.lib.dll.a。静态链接库和导入库的区别是:

  • 静态链接库:包含了函数的具体实现代码
  • 导入库:不包含函数的具体实现代码(函数的具体实现代码存储在dll中)

修改.pro文件

 

复制代码

SH

 

# 设置头文件的目录,以便编译器能够找到头文件

 

INCLUDEPATH += %FFMPEG_BUILD%/include

  
 

# 设置导入库的目录和需要链接的导入库

 

LIBS += -L %FFMPEG_BUILD%/lib \

 

-lavcodec \

 

-lavdevice \

 

-lavfilter \

 

-lavformat \

 

-lavutil \

 

-lpostproc \

 

-lswscale \

 

-lswresample

  • #号后面的内容是注释
  • %FFMPEG_BUILD%表示ffmpeg-4.3.2-2021-02-27-full_build-shared.7z解压后的目录
    • 需要根据你的实际情况修改为真实的路径
  • -L:设置导入库的目录,以便编译器能够找到导入库
    • -L后面可以留或不留空格
  • -l:设置需要链接的导入库名称
    • 导入库名称需要去掉文件名前面的lib,比如libavcodec.dll.a就写成avcodec
    • -l后面不能留空格

调用函数

main.cpp中调用av_version_info函数,获取FFmpeg的版本信息。

 

复制代码

C++

 

#include "mainwindow.h"

  
 

#include <QApplication>

  
 

// 为了使用qDebug函数

 

#include <QDebug>

  
 

// FFmpeg是C语言库

 

// 有了extern "C",才能在C++中导入C语言函数

 

extern "C" {

 

#include <libavcodec/avcodec.h>

 

}

  
 

int main(int argc, char *argv[])

 

{

 

// 打印版本信息

 

qDebug() << av_version_info();

  
 

QApplication a(argc, argv);

 

MainWindow w;

 

w.show();

 

return a.exec();

 

}

拷贝dll文件

Qt程序编译成功后,会生成一个exe文件

  • exe是Windows中的一种可执行文件
  • 我们编写的程序代码最终都存在了exe文件中

为了保证exe在运行时能成功调用FFmpeg的函数,那么就得让exe能够找到FFmpeg的dll文件(动态库文件)。可以将%FFMPEG_BUILD%/bin目录中的所有dll文件拷贝到exe文件所在的目录中,exe在运行的时候,能自动找到跟它同一目录下的dll文件。

 

可以通过查看构建目录得知exe文件所在的目录。

 

运行程序后,如果能在控制台看到4.3.2字样的输出信息,说明FFmpeg已经集成成功。

 

dll的搜索顺序

exe在寻找dll文件时,大概按照以下优先级顺序去查找(这里只列出了大概的搜索路径,并没有写全):

  1. exe所在的目录

  2. Windows的System目录

    • C:/Windows/System
    • C:/Windows/System32
  3. Windows目录

    • C:/Windows
  4. 环境变量Path中的路径

    • 所以可以考虑将%FFMPEG_BUILD%/bin目录配置到Path变量中
    • 置于如何配置Windows的环境变量Path,这是基本开发常识了,就不再讲解了

第1种方式需要在每一个Qt程序中都拷贝一份FFmpeg的dll文件,第2~4种方式可以让多个Qt程序共用同一份FFmpeg的dll文件。

.pro文件

.pro文件是Qt项目的主配置文件。

 

复制代码

SH

 

# 包含了core、gui两个模块

 

QT += core gui

  
 

# 高于4版本,就包含widgets模块

 

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

  
 

# 源代码

 

SOURCES += \

 

main.cpp \

 

mainwindow.cpp

  
 

# 头文件

 

HEADERS += \

 

mainwindow.h

  
 

# ui文件

 

FORMS += \

 

mainwindow.ui

常用快捷键

  • 字体缩放:Ctrl + 鼠标滚轮
  • 帮助文档:F1
  • 注释:Ctrl + /
  • 同名的.h、.cpp文件之间切换:F4

 

https://www.cnblogs.com/mjios/p/14466418.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一口Linux

众筹植发

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值