关于c++:FFmpeg连载1环境搭建

41次阅读

共计 2087 个字符,预计需要花费 6 分钟才能阅读完成。

前言

之前笔者从事安卓开发的时候想要学习音视频实际,脑子外面想的是要是有专门针对安卓开发的 FFmpeg 教程就好了。缓缓地发现这个想法很不靠谱,因为那时对于音视频的相干教程原本就少,如果还要是针对安卓的就百里挑一了。

起初为了学习 FFmpeg,笔者也是断断续续的,从音视频的根底材料开始,从 FFmpeg 编译到实际,心愿通过本人的学习能够一点一点地揭开 FFmpeg 的神秘面纱,直到明天笔者只敢说仅是音视频开发大军中的一个入门老手而已,虽说本人摸索挺久,
但仍旧难以进阶,我想其中有两个次要的起因,一是短少仙人指路,二是断断续续,不足系统性的学习总结。

学习最重要的是死记硬背,如果你心田想要学习,然而又以没有齐全针对性的教程材料为由,最初你会发现自己还是想的比做的多,还不如不想 …

对于 FFmpeg 这货色,你说它难,其实它也就那么一回事,你说它简略,有数人在编译阶段就被迫放弃了,或者它难的不是它自身,更多学习者一个敢于开始的勇气和坚持不懈的保持吧。

为了让老手能够更疾速地入门 FFmpeg,笔者将开始连载对于 FFmpeg 相干文章,次要波及音视频解封装、音视频解码、音视频编码、音频重采样等相干知识点。

在本系列文章的最初,可能会以一个小小的实际作为收尾,这个实际的内容大体是:

1、输出多个 mp3 文件,解码成 pcm,而后进行重采样,拼接合并编码成 aac 音频;
2、输出多个 mp4 文件,提取出视频解码成 yuv,而后拼接合并编码成 h264;
3、将 1 中的 aac 音频和 2 中的 h264 视频合并成新的 mp4 文件。

明天咱们次要是先把环境搭建好,毕竟千里之行始于足下。

笔者环境

笔者应用的范例环境了 Mac 零碎,开发工具是 CLion。

装置 FFmpeg

对于引入在 PC 上引入 FFmpeg 的话还是比较简单的,能够通过命令行工具进行装置,而后将相干库提取解决即可,又或者能够间接应用源码间接编译相干库都能够。然而如果要想把 FFmpeg 继承到安卓中去就要应用 NDK 教程编译了,
对于如何应用 NDK 教程编译 FFmpeg 童鞋们能够去翻我之前的文章,或者前面有工夫我在整顿一份都行。

鉴于 FFmpeg 是一个 C 语言库,天生具备跨平台能力,所以学习的话笔者倡议间接在 PC 上实际学习即可,如果你都学会了,那移植到其余平台那不是 so easy 吗。

明天笔者应用的是命令行装置的形式集成 FFmpeg,在 Mac 上咱们能够应用 Homebrew 包管理工具进行装置,Linux 上能够用 apt。

1、首先应用 Homebrew 装置 ffmpeg:

brew install ffmpeg

而后静静期待即可,个别如果失败的话多是网络问题吧,解决形式家喻户晓 …

2、装置胜利后咱们用 brew info 命令查看一下装置到哪里去了,前面引入工程时须要用到,命令是:

brew info ffmpeg

例如笔者的输入如图:

配置 CLion 工程

新建好 CLion 工程后,咱们将 FFmpeg 的库门路和头文件配置一下,配置 CMakeLists.txt:

cmake_minimum_required(VERSION 3.17)

# 留神 FFmpegPro 是工程名称,开发这须要依照理论进行替换
project(FFmpegPro)

set(CMAKE_CXX_STANDARD 11)

# FFmpeg 的装置目录,能够通过命令 "brew info ffmpeg" 获取
set(FFMPEG_DIR /opt/homebrew/Cellar/ffmpeg/5.0)
# 头文件搜寻门路
include_directories(${FFMPEG_DIR}/include/)
# 动态链接库或动态链接库的搜寻门路
link_directories(${FFMPEG_DIR}/lib/)

add_executable(FFmpegPro main.cpp)

#链接库
target_link_libraries(FFmpegPro
        #FFmpeg 库
        avcodec
        avfilter
        avformat
        avutil
        swresample
        swscale
        )

简略测试一下配置是否胜利,在 main 代码中简略调用一些 ffmpeg 库的 API,如果能失常运行则示意配置胜利:

#include <iostream>
extern "C"{
#include "libavcodec/avcodec.h"
#include <libavformat/avformat.h>
#include "libavutil/avutil.h"
}

int main(int arg,char **argv) {
    // 打印 ffmpeg 的信息
    std::cout << "av_version_info:" << av_version_info() << std::endl;
    std::cout << "av_version_info:" << avcodec_configuration() << std::endl;
    return 0;
}

运行如果能失常打印出 ffmpeg 的版本号即示意环境配置胜利。

举荐浏览

C++ 之指针扫盲
C++ 之智能指针
C++ 之指针与援用
C++ 之右值援用
C++ 之多线程一
C++ 之多线程二

关注我,一起提高,人生不止 coding!!!

正文完
 0