1开发环境搭建

Posted 想文艺一点的程序员

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1开发环境搭建相关的知识,希望对你有一定的参考价值。

开发环境搭建

1、开发库的选择

(1)音视频开发库

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

  • iosAVFoundationAudioUnit
  • androidMediaPlayerMediaCodec
  • Windows:DirectShow

但是有一个跨平台的库:FFmpeg 库。

其实只要你掌握了FFmpeg,也可以很快上手其他音视频开发库,因为底层原理都是一样的,你最终操作的都是一样的数据,比如MP3、MP4文件。


补充:openGL 是什么东西呢?

  • openGL 是一个 画图 的库

(2)GUI 界面开发库

同理我们也选择可以 跨平台开发的 GUI 界面开发库,QT

  • Windows:MFC

2、下载安装环境

(1)安装 ffmpeg

下载地址:Download FFmpeg

或者点击这个连接直接下载:Windows版本下载ffmpeg-4.3.2-2021-02-27-full_build-shared.7z

源码下载:ffmpeg-4.3.2.tar.xz

  • 网上编译好的FFmpeg一般是完整版,体积比较大
  • 日后我们可以根据实际需要,对FFmpeg的源码进行裁剪后再进行重新编译

分析目录结构:


(2)安装 QT

Next

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

先注册,再登录


下一步

下一步

选择安装路径

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

勾选编译器

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

勾选源码

默认已经勾选了QtCreator。

默认已经勾选QtCreator

许可协议

开始菜单快捷方式


解决中文乱码的问题
工具 -> 选项。

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

设置为UTF-8


(3)QT使用注意 :

(1)QT IDE 工具会帮我们对文件进行分类,但是这些文件夹是不真实存在,在我们文件当中是全部放到一个文件当中。

(2)QMainWindow 这个类是 QT 提供的一个类,并不是我们自己写的。

  • 包含 QMainWindow 头文件, MainWindow 才能去继承 QMainWindow 这个类。

  • .h 文件 当中都是 类的声明,.c 文件都是 类的声明

    • 类的声明:类内函数的声明。
    • 类的实现:类内函数的实现。
  • public :公共的,构造函数和析构函数。

  • private:私有的,


3、将 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中)

(1)dll的搜索顺序

  • 指导 windows 程序运行的时候,是否可以找到对应的动态链接库。

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

  1. exe所在的目录
  2. Windows的System目录
    • C:/Windows/System
    • C:/Windows/System32
  3. Windows目录
    • C:/Windows
  4. 环境变量Path中的路径
    • 所以可以考虑将%FFMPEG_HOME%/bin目录配置到Path变量中
    • 置于如何配置Windows的环境变量Path,这是基本开发常识了,就不再讲解了

第1种方式需要在每一个Qt程序中都拷贝一份FFmpeg的dll文件。

第2~4种方式可以让多个Qt程序共用同一份FFmpeg的dll文件。


(2).pro文件

  • 与上一个配置环境变量的作用不同,这个是指导 程序的链接过程,是否能找到对应的动态库。

.pro文件是Qt项目的主配置文件。(相当于 linux 当中的 shell 脚本)

# 包含了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

修该 .pro 文件,以便于我们的项目支持 ffmpeg 的库函数

  • 这个 .pro 文件的配置,是指导程序编译的时候,可以找到对应的动态库。
  • 之前配置的环境变量,是指导 windows 运行程序的时候,可以找到对应的动态库。
win32: {
    FFMPEG_HOME=D:\\SF\\ffmpeg\\MJ\\ffmpeg-4.3.2-2021-02-27-full_build-shared
    #设置 ffmpeg 的头文件
    INCLUDEPATH += $$FFMPEG_HOME/include

    #设置导入库的目录一边程序可以找到导入库
    # -L :指定导入库的目录
    # -l :指定要导入的 库名称
    LIBS +=  -L$$FFMPEG_HOME/lib \\
             -lavcodec \\
             -lavdevice \\
             -lavfilter \\
            -lavformat \\
            -lavutil \\
            -lpostproc \\
            -lswresample \\
            -lswscale
}
  • #号后面的内容是注释

  • %FFMPEG_HOME%

    表示

    ffmpeg-4.3.2-2021-02-27-full_build-shared.7z

    解压后的目录

    • 需要根据你的实际情况修改为真实的路径
  • -L:设置导入库的目录,以便编译器能够找到导入库

  • -l

    :设置需要链接的导入库名称

    • 导入库名称需要去掉文件名前面的lib,比如libavcodec.dll.a就写成avcodec

(3)拷贝dll文件

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

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

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

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

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


(4)使用 ffmpeg API

  • 打印 av_version_info 的版本:
#include "mainwindow.h"
#include <QApplication>
#include <QDebug>

extern "C" {
#include <libavcodec/avcodec.h>
}

int main(int argc, char *argv[])
{
    qDebug() << "yeahhh"<< av_version_info();

    QApplication a(argc, argv);
    MainWindow w;

    w.show();

    return a.exec();
}

以上是关于1开发环境搭建的主要内容,如果未能解决你的问题,请参考以下文章

一种简单的OpenHarmony开发环境搭建

hadoop开发环境搭建

搭建Spark源码研读和代码调试的开发环境

windows环境下kafka源代码开发环境搭建

Flash 开发环境搭建和文字滚动效果实例

sublime的python开发环境搭建