NDK探索之FFmpeg
2017-08-29 本文已影响0人
简祖明
FFmpeg库简介
- avcodec:编解码(非常重要);
- avformat:封装格式的处理;
- avfilter:滤镜特效处理;
- avdevice:各种设备的输出;
- avutil:工具类(大部分库都要这个库的支持);
- postproc:后加工(暂时还没用过);
- swresample:音频采样数据格式转化;
- swscale:视频像素数据格式转换。
视频解码流程:
- av_register_all();(示例:ffmeg->doc->examples->transcoding.c)主要是做一些准备工作;
- avformat_open_input();
- avformat_find_stream_info();读取文件信息
- avcodec_open2();打开编码器
- av_read_frame();从输入文件读取一帧压缩数据
- avcodec_decode_vedio2();解码一帧压缩数据,得到AVFrame
- avcodec_close;关闭解码器;
- avformat_close_input();关闭输入视频文件;
FFmpeg数据结构:
- AVFormatContext
- 封装格式上下文结构体,也是统领全局的结构体,保存了视频文件封装的格式相关信息。
- AVInputFormat
- 每种封装格式(例如FLV,MP4,AVI)对应一个该结构体。
- AVStream
- 视频文件中每个视频(音频)流对应该结构体。
- AVCodecContext
- 编解码上下文结构体,保存了音视频编解码相关信息。
- AVCodec
- 每种音视频编解码器(例如H.264解码器)对应一个该结构体。
- AVPacket
- 存储一帧压缩编码数据
- AVFrame
- 存储一帧解码后像素(采样)数据。
数据结构的分析
FFmpeg提供的都是一些很简单方便的api
- AVFormatContext
- iformat:输入视频的AVInputFormat。
- nb_streams:输入视频的AVStram个数。
- streams:输入视频的AVStram[]数组。
- duration:输入视频的时长(微秒为单位)。
- bit_rate:输入视频的码率。
- AVInputFormat
- name:封装格式的名称。
- long_name:封装格式的长名次。
- extensions:封装格式的扩展名。
- id:封装格式id
- 一些封装格式处理的接口函数。