0%

FFmpeg 的功能非常强大,FFmpeg 不但有丰富的命令行工具来帮助我们处理音视频数据,而且 FFmpeg 提供了非常易用的 API,通过这些 API 就可以把 FFmpeg 集成到我们自己的程序中,以写代码的方式调用这些 API 来完成对媒体文件的操作。 另外在使用这些 API 的同时可以参考下面的图,该图展示了 FFmpeg 处理流数据基本流程,一定要想搞楚每一步操作在干什么,目的是什么。

最近收拾东西时居然发现了之前买的STM32单片机(普中STM32-F1),之前差点挂闲鱼卖了,很好奇是什么勇气让我直接买了STM32的板子?哈哈哈,买回来直接吃灰,连光盘都在。现在闲暇之余准备系统地学习一下单片机子,没准还能造些有意思的小玩意,那还是从89C51开始吧,哈哈。

FFmpeg是全世界的音视频开发工程师都应该掌握的工具,FFmpeg是一套可以用来记录、处理数字音频、视频并将其转换为流的开源框架,提供了录制、转换以及流化音视频的完整解决方案。本篇文章主要是FFmpeg的源码本地编译(Mac与CentOS)、交叉编译(Android平台)和命令行工具的使用。

LAME是目前非常优秀的一种MP3编码引擎,在业界转码成MP3格式的音频文件时,最常用的编码器就是LAME库。用LAME的源码通过交叉编译就能得到SO库(这一部分在交叉编译那篇文章已经有完整的过程了,此处不再赘述),现在只需要把SO库集成到我们自己的项目中即可,需要做的就是编写好接口,上层调用即可。

回顾平时的 C/C++ 程序开发,直接 gcc 编译出可执行文件,这就非常普通的编译过程,也称为本机编译。那么什么是交叉编译呢?交叉编译本质就是在一个平台(如PC、Mac)上生成另外一个平台 (Android、iOS 或者其他嵌入式设备)的可执行代码。本篇将以编译 LAME 这个 Mp3 编码库为例,编译出 Android 平台的可执行代码。

在Android平台上开发音视频相关的项目,必定会涉及到NDK(Native Develop Kit)开发,Android提供了ndk-bundle一系列NDK工具集。在早期Android的NDK开发会涉及到编写Android.mk文件,也就是Android专用的MakeFile,现在已经不推荐这种方式了,所以还是拥抱CMake吧(虽然CMake目前也不是最好的,但是相比Android.md确实已经方便了很多,另外CMake也可以用来构建其他的C/C++项目)。所以在此记录一下如何使用CMake快速搭建一个Android NDK项目。

CMake是一个跨平台的编译构建工具,可以用简单的语句来描述所有平台的编译过程。他能够输出各种各样的MakeFile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。

CMake的学习资料较少,只能通过github的各种例子进行学习。不过仍然建议在学习之前看一下《CMake实践》这本中文书,本CMake系列是依据github上的cmake-examples进行翻译总结。 英文github地址

本文会记录一些音视频中常见的基本概念。音频技术是为了记录、存储和回放声学现象才发明的,最早能记录声音恐怕就是留声机了。当人类有了记录以及存储声音的能力之后,就迎来了模拟信号到数字信号的转换,所以如何记录以及存储声音会涉及到很多概念,理解这些概念往往对音视频开发比较重要。