图文详解Mac OS搭建音视频开发环境

1

FFmpeg

FFmpeg 是一个免费、开源且跨平台的音视频处理工具套件,它提供了丰富的功能和命令行接口,用于在音视频领域进行编解码、转码、剪辑、过滤等操作。它由 Fabrice Bellard 创建,并于 2000 年首次发布,是一个功能强大且广泛应用的音视频处理工具,适用于各种音视频处理需求和应用场景。无论是简单的格式转换还是复杂的流处理,FFmpeg 都提供了丰富的功能和工具,是音视频开发和处理的重要工具之一。

1.1

功能与特点

FFmpeg 提供了强大而灵活的命令行接口,用户可以使用命令行参数来指定输入文件、输出文件、编解码器、滤镜和其他参数。同时,FFmpeg 也提供了一些编程接口,如 libavcodec、libavformat 等,使得开发人员可以通过编程方式使用 FFmpeg 的功能。

  • 支持广泛的音视频格式:FFmpeg 支持几乎所有常见的音视频格式,包括但不限于 MP4、AVI、MKV、FLV、MP3、AAC 等。它可以进行格式之间的转换,使得用户可以轻松地处理和转码不同格式的音视频文件。

  • 强大的编解码能力:FFmpeg 支持多种音视频编解码器,包括 H.264、H.265、MPEG-4、VP9、AAC、MP3 等。这使得用户可以对音视频文件进行解码、编码和重新编码,以满足不同的需求和要求。

  • 实时流处理和转码:FFmpeg 可以处理实时音视频流,包括网络流、摄像头捕获、屏幕录制等。它能够对这些流进行编码、解码、转码和传输,适用于实时流媒体、视频会议等应用场景。

  • 视频剪辑和处理:FFmpeg 提供了丰富的视频处理功能,可以进行剪辑、裁剪、旋转、调整大小、添加水印、调整亮度对比度等操作。这使得用户可以对视频进行各种编辑和处理,满足不同的需求和创意。

  • 音频处理和混音:FFmpeg 可以进行音频的提取、转码、混音、音量调整等操作。用户可以使用 FFmpeg 处理音频文件,如剪辑音频片段、转换音频格式、调整音频质量等。

  • 视频滤镜和特效:FFmpeg 提供了丰富的视频滤镜和特效,用于改变视频的外观和效果。用户可以应用滤镜、添加文字、模糊、锐化、颜色调整等,以实现各种视觉效果。

  • 跨平台支持:FFmpeg 可在多个操作系统平台上运行,包括 Windows、macOS、Linux 等。这使得开发人员和用户可以在不同的环境中使用和集成 FFmpeg。

1.2

安装

可以通过官网下载页面下载对应的安装包安装,也可以利用 Homebrew 工具通过终端安装:

brew install ffmpeg

安装完毕后,可以查看版本信息检查是否安装成功:

ffmpeg -version

若安装成功会得到如下类似信息:

ffmpeg version 6.0 Copyright (c) 2000-2023 the FFmpeg developers
built with Apple clang version 14.0.0 (clang-1400.0.29.202)

1.3

目录结构

可以通过电脑 Finder->Go->Go to Folder 输入目录:/usr/local/Cellar/ffmpeg,进入目录中。


01.1.png

2

Qt

Qt (/ˈkjuːt/,发音同“cute”)是一个跨平台的 C++应用程序开发框架,广泛用于开发图形界面应用程序、嵌入式系统和移动应用等。它由 Qt 公司(前身为 Nokia)开发并维护,具有丰富的功能和工具,被广泛应用于多个行业和领域。

2.1

功能与特点

下面是 Qt 框架的一些主要特点和功能:

  • 跨平台支持:Qt 提供了很好的跨平台支持,可以在多个操作系统上运行,包括 Windows、macOS、Linux、Android 和 iOS 等。开发者可以使用同一套代码在不同平台上构建应用程序,减少了开发和维护的工作量。

  • 组件库和界面设计:Qt 提供了丰富的组件库和工具,可以轻松创建现代化和吸引人的图形界面。它包括各种预定义的控件(如按钮、文本框、表格等),以及支持主题和样式定制的机制,使得开发者可以根据需求定制应用程序的外观和交互方式。

  • 信号与槽机制:Qt 引入了信号与槽机制,通过信号和槽的连接,实现了组件之间的事件通信和交互。这种机制使得开发者可以轻松地实现模块化和松耦合的设计,提高了代码的可读性和可维护性。

  • 数据库支持:Qt 提供了数据库访问模块,支持多种数据库系统,如 MySQL、SQLite、PostgreSQL 等。开发者可以使用这些模块进行数据库连接、查询和操作,方便地处理应用程序的数据存储和管理。

  • 多媒体和图形处理:Qt 提供了多媒体模块,包括对音频、视频和图像的处理和播放功能。开发者可以使用这些模块实现音视频播放、图像处理、图形绘制等功能,为应用程序增加丰富的多媒体体验。

  • 网络和通信:Qt 提供了网络模块,支持 TCP/IP 和 UDP 等网络通信协议。开发者可以使用这些模块进行网络编程,实现网络通信、数据传输和远程访问等功能。

  • 多线程支持:Qt 提供了多线程编程的支持,包括线程管理、线程同步和并发编程等功能。开发者可以使用这些功能来实现并发处理、任务分配和资源管理,提高应用程序的性能和响应能力。

除了上述功能外,Qt 还提供了许多其他模块和工具,如 XML 处理、国际化和本地化支持、OpenGL 集成、Web 引擎等,以满足不同应用场景的需求。

2.2

安装

同样的,可以直接去官网下载对应平台的安装包进行安装,也可以通过 brew 工具安装:

brew install qt

安装完毕后,会存于:/usr/local/Cellar/qt 目录下,有类似如下信息:

You can add Homebrew's Qt to QtCreator's "Qt Versions" in:
  Preferences > Qt Versions > Link with Qt...
pressing "Choose..." and selecting as the Qt installation path:
  /usr/local

安装 Qt Creator(IDE)

brew install --cask qt-creator

安装成功,存放于:/usr/local/Caskroom/qt-creator

==> Installing Cask qt-creator
==> Moving App 'Qt Creator.app' to '/Applications/Qt Creator.app'
🍺  qt-creator was successfully installed!

2.3

配置

打开 Qt Creator 应用程序,在其偏好设置里配置 Qt 路径


01.3.png

根据前文可知,Qt 的路径在/usr/local/Cellar/qt,使用快捷键 Command + Shift + G 手动输入这个文件夹,然后选择 qt/6.5.2/bin/qmake,点击 Open


01.4.png

点击 OK

01.5.png

2.4

设置默认 kits

依旧选择 Qt 应用程序的偏好设置,选中 kits,选择对应机器的 kit(终端输入如下命令可以知晓自己电脑多少位:uname -a)


01.6.png

滑动到最底部,选择 Qt 版本,然后点击 OK


01.7.png

3

第一 Qt 程序

3.1

创建项目

打开 Qt,File->New Project,或者快捷键:shift+command+N。选择 Qt Widgets Application

01.8.png

输入完项目名字,选择存放代码的目录

01.9.png

选 Build System


01.10.png

输入详细信息

01.11.png

勾选上 Generate form 的话会创建一个默认的 mainwindow.ui 文件。有点类似 iOS 开发中的 xib,可以直接拖放 UI 控件。

选 kits

01.12.png

项目创建完成

01.13.png

项目结构如下

01.16.png
  • .pro 文件,项目配置文件

  • Headers 文件夹,存放头文件

  • Source 文件夹,存放代码之类的,如.cpp 文件

  • Formse 文件夹,存放 UI 文件

//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.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

运行项目

01.14.png

3.2

集成 FFmpeg

修改.pro 文件,在文件中添加如下配置信息

# 设置头文件路径
INCLUDEPATH += /usr/local/Cellar/ffmpeg/6.0_1/include

# 设置库文件路径
LIBS += -L/usr/local/Cellar/ffmpeg/6.0_1/lib \
        -lavcodec \
        -lavdevice \
        -lavfilter \
        -lavformat \
        -lavutil \
        -lpostproc \
        -lswscale \
        -lswresample
01.15.png

测试是否集成成功,在 main.cpp 添加几行代码,尝试打印 libavcodec.a 库文件的版本信息

#include "mainwindow.h"

#include <QApplication>

#include <QDebug>

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();
}

项目地址,代码及学习笔记可参考。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容