小码哥-音视频学习笔记(第二天): 基础环境搭建(Mac版本)

1,872 阅读4分钟

一、安装FFmpeg

1、安装

  • 在Mac环境中,直接使用Homebrew安装FFmpeg即可。
brew install ffmpeg
  • 安装完毕后,如果能成功在命令行查看FFmpeg的版本号,那说明已经安装成功。
ffmpeg -version

2、目录结构

  • 可以查看FFmpeg安装路径
which ffmpeg

  • 查看文件
open /usr/local/bin

  • 右键点击ffmpeg, 点击显示原身

  • 可以跳转到ffmpeg具体的安装位置

  • Homebrew安装的FFmpeg就存放在了/usr/local/Cellar/ffmpeg路径下, 安装的版本是4.3.2

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

二、QT

  • 如果要想开发一个播放器,肯定得编写界面,同样为了保证跨平台开发,这里采用的GUI库是Qt,官方的开发工具QtCreator是跨平台的(支持Windows、Mac、Linux)。Qt开发采用的编程语言是C++。
  • 本教程中选择5.14.2版本(从5.15版本开始是收费版本), macOS Big Sur 版本11.1以上, 可以安装这个包 https://d13lb3tujbc8s0.cloudfront.net/onlineinstallers/qt-unified-mac-x64-4.0.0-online.dmg, 选择5.15即可

1、官网下载

  • 可以在官网下载Mac版本的安装包

  • 下载后一步步安装即可

2、Homebrew下载

  • 通过brew install安装Qt,最终被安装在/usr/local/Cellar/qt目录。
brew install qt
  • 通过brew install --cask安装Qt Creator,最终被安装在/usr/local/Caskroom/qt-creator目录。
brew install --cask qt-creator

3、配置

  • 通过brew安装的Qt和Qt Creator是分开的,需要在Qt Creator中设置一下Qt的路径。
  • 打开 QT Creator偏好设置

  • 找到 KitsQt Versions, 点击添加

  • Qt的路径是在/usr/local中,默认是隐藏的。
    • 可以使用快捷键Command + Shift + .显示隐藏文件和文件夹
    • 可以使用快捷键Command + Shift + G手动输入Qt的文件夹:/usr/local/Cellar/qt

  • 可以看到qt的文件夹

  • 选择bin目录下的qmake

  • 接着配置构建套件

三、开发

1、新建项目

  • 创建项目后, 如下所示

  • 点击构建

  • 消除版本警告, 在test.pro文件中添加 CONFIG+=sdk_no_version_check

2、集成FFmpeg到Qt项目中

  • 集成FFmpeg需要修改.pro文件
# 设置头文件路径
INCLUDEPATH += /usr/local/Cellar/ffmpeg/4.3.2/include
 
# 设置库文件路径
LIBS += -L /usr/local/Cellar/ffmpeg/4.3.2/lib \
        -lavcodec \
        -lavdevice \
        -lavfilter \
        -lavformat \
        -lavutil \
        -lpostproc \
        -lswscale \
        -lswresample \
        -lavresample

image.png

  • 程序中打印FFmpeg版本号
#include "mainwindow.h"

#include <QDebug>

// ffmpeg是C语言的库, 所以需要使用 extern 导入
extern "C" {
    #include <libavcodec/avcodec.h>
}

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    qDebug() << av_version_info();
}

  • QT是跨平台的, 如果需要在不同平台导入不同的路径, 还可以使用下面的方式导入

image.png

  • 也可以将路径抽取出来导入

image.png

四、开发基础

1、控件基本使用

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    // 设置窗口标题
    setWindowTitle("主窗口");

    // 设置窗口大小
    // 窗口可以通过拖拽边缘进行自由伸缩
//    resize(400, 400);

    // 设置窗口的固定大小
    // 窗口不能通过拖拽边缘进行自由伸缩
    setFixedSize(400, 400);

    // 设置窗口的位置
    // 以父控件的左上角为坐标原点
    // 没有父控件,就以屏幕的左上角作为坐标原点
    move(100, 100);
}

2、添加子控件

#include <QPushButton>
 
// 创建按钮
QPushButton *btn = new QPushButton;
// 设置按钮的文字
btn->setText("登录");
// 设置父控件为当前窗口
btn->setParent(this);
// 设置按钮的位置和大小
btn->move(50, 50);
btn->resize(100, 50);
 
// 创建第2个按钮
new QPushButton("注册", this);

3、C++的实例对象

  • 在很多语言中, 创建的实例对象都是存储在内存堆区
  • 但是C++, 可以在栈区存储实例对象
1) 堆区存储实例对象
  • 使用关键字new创建的实例对象, 存在堆区中
// 创建按钮, 在堆区中
QPushButton *btn = new QPushButton;
// 设置按钮的文字
btn->setText("登录");
// 设置父控件为当前窗口
btn->setParent(this);
// 设置按钮的位置和大小
btn->move(50, 50);
btn->resize(100, 50);

// 创建第2个按钮
new QPushButton("注册", this);
2) 栈区存储实例对象
  • main.cpp文件中, 代码如下
#include "mainwindow.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}
  • 其中的MainWindow w;这一句, 就是在栈区创建了一个MainWindow类型的实例对象w
  • main函数结束时, w被释放
  • QApplication a(argc, argv);这一句是在栈区创建QApplication类型的实例变量a
  • return a.exec(); 这一句是main函数的返回, a.exec();中会调用运行循环, 保证main函数无法结束, 所以w永远不会释放(程序关闭后, 依然会释放)
3) 添加到主窗口上的实例对象, 不能创建在栈区中
  • 在C++中没有高级的内存管理方式(例如OC中的引用计数), 我们创建在栈区创建的实例变量, 当作用域结束后, 就会被释放

创建在堆区中的实例变量, 需要我们手动释放, 不过QT已经帮我们做了处理, 当主窗口释放时, 会自动释放添加到主窗口的所有子控件