0%

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地址

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

如何让 SurfaceView 或者 TextureView 实现圆角呢?这篇文章正好解决此问题,转载一手。其实主要是基于 ViewOutlineProvider 这个组件专门用于裁剪 View 的边界,注意使用 ViewOutlineProvider 时必须API >= 21。不光可以实现圆角裁剪,还可以实现轮廓、阴影等很多效果,这个如果后面用到了再补充。

最近拉女朋友入steam的坑,一起玩Don’t starve together的时候发现游戏玩到后期总是会变的非常不流畅,经过测试后排除网络问题,主要是因为联机玩饥荒时创建世界的那台主机因为需要同时处理画面和世界的刷新,玩到后期主机要处理的太多,其他联机的用户就会卡顿。为了解决这个问题我也是头疼了很久,最后发现在主机上搭建一个独立服务器,所有人都再连接到这个独立服务器上,卡顿问题就能很好的解决了。当然这个独立服务器并不需要一台独立的电脑,只需要一起玩游戏的某个人开一个独立服务器,大家再连接到这个独立服务器里,就不会卡顿了。