一, FFmpeg是一套用来记录,转换数字音频,视频,并能将其转化为流的开源项目,拥有丰富的命令来实现音视频相关的操作,其源码是以模块化的方式进行构建,可以根据需要选择不同模块进行集成使用.
FFmpeg还可以集成第三方的库,用ffmpeg的统一接口来使用,比如常用的librtmp,libMP3lame等.
FFmpeg主要有以下几个模块:
libavformat 用于各种音视频封装格式的生成和解析
libacodec 用于声音,图像的编解码
libavfilter 用于音视频滤波器的开发.
libavutil 提供一些公共的工具函数
libswresample 用于音频格式的转码,如转成PCM流
libswscale 用于图像格式的转换,缩放,如RGB 和YUV的转换
libpostproc 用于后期效果的处理.
二, 播放器开发中涉及到的一些概念
原始数据 :能够表示完整的图像,声音的数据格式,如RGB,PCM.
编码格式:存储编码后数据的容器,如MP4,FLV等,
AVPacket 解码前的数据结构体.
AVFrame 解码后的数据结构体.
AVFormatContext 媒体文件的构成和基本信息上下文.
AVCodecContext 解码信息上下文.
三,播放器的开发流程,借用一张网上的图片:
![](https://i-blog.csdnimg.cn/blog_migrate/0bd12a3ec08716d349fa170ae2e3fe3c.png)
四, 准备环境,
对音视频的处理都是在native层,所以要新建一个Native项目,当然也可以新建Android项目,然后手动添加CPP模块,
前提是要先编译好ffmpeg相关的库,静态库,动态库都行,这里用的时静态库,这个库要依据你手机CPU的架构来导入.
gradle的配置没有特别注意的地方,如果你是Android项目,要注意在build.gradle中配置:
externalNativeBuild {
cmake {
path "src/main/cpp/CMakeLists.txt"
version "3.10.2"
}
}
CMakeLists.txt的配置,主要时设置源文件路径,引入头文件,链接依赖库,
cmake_minimum_required(VERSI