FFmpeg 是一个非常优秀的多媒体框架, FFmpeg 可以运行在Linux,Mac,Windows等平台上。FFmpeg 主要作用能够解码,编码,转码,复用,解复用,过滤音视频数据。
FFmpeg 编译后文件目录:
libavcodec:包含音视频编码器和解码器 libavutil:包含多媒体应用常用的简化编程的工具,如随机数生成器、数据结构、数学函数等功能 libavformat:包含多种多媒体容器格式的封装、解封装工具 libavfilter:包含多媒体处理常用的滤镜功能 libavdevice:用于音视频数据采集和渲染等功能的设备相关 libswscale:用于图像缩放和色彩空间和像素格式转换功能 libswresample:用于音频重采样和格式转换等功能
多媒体文件基本概念:
1)多媒体文件MP4,FLV 其实是个容器
2)容器里面有很多流(Stream/Track), 比如音频流,视频流,字幕流
3)每种流由不同的编码器编码,比如音频aac, 视频h264,h265.
4) 从流中读取的数据称为包 (packet).
5) 每个包含有一个或多个帧(frame)。
FFmpeg中重要结构体:
AVFormatContext: 格式上下文
AVStream: 流
AVPacket: 包
AVFrame: 帧
AVCodec: 编解码器
AVCodecContext: 编解码器上下文
SwrContext: 重采样上下文
FFmpeg 处理音视频流程: