目录
视频解码、像素格式转换与Native原生绘制
一、视频解码
1、FFmpeg 库简介
FFmpeg 一共包含8个库
- avcodec:编解码(最重要的库)
- avformat:封装格式处理
- avfilter:滤镜特效处理
- avdevice:各自设备的输入输出
- avutil:工具库(大部分库都需要这个库的支持)
- postproc:后加工
- swresample:音频采样数据格式转换
- swscale:视频像素数据格式转换
2、FFmpeg 解码的流程图
3、FFmpeg 数据格式简介
- AVFormatContext:封装格式上下文结构体,也是统领全局的结构体,保存了视频文件封装格式相关信息
- AVInputFormat:每种封装格式(例如FLV、MKV、MP4、AVI)对应一个该结构体。
- AVStream:视频文件中每个视频(音频)流对应一个该结构体
- AVCodeContext:编解码器上下文结构体,保存了视频(音频)编解码相关信息。
- AVCodec:每种视频(音频)编解码器(例如H.264解码器)对应一个该结构体
- AVPacket:存储一帧压缩编码数据
- AVFrame:存储一帧解码后的像素(采样)数据
二、像素格式转换
像素格式转换就是将yuv420p 的转成ARGB,可以使用 C/C++ 库 libyuv 来进行转换
I420ToARGB
参数按顺序如下:
参数 | 类型 | 说明 |
---|---|---|
src_y | uint8_t* | 来源的frame的 y 帧数据 yuv_frame->data |
src_stride_y | int | 来源的frame的y大小数据 yuv_frame->linesize |
src_u | uint8_t* | 来源的frame的 u 帧数据yuv_frame->data |
src_stride_u | int | 来源的frame的u大小数据 yuv_frame->linesize |
src_v | uint8_t* | 来源的frame的 v 帧数据yuv_frame-> |