NDK探索之FFmpeg

FFmpeg库简介

  1. avcodec:编解码(非常重要);
  2. avformat:封装格式的处理;
  3. avfilter:滤镜特效处理;
  4. avdevice:各种设备的输出;
  5. avutil:工具类(大部分库都要这个库的支持);
  6. postproc:后加工(暂时还没用过);
  7. swresample:音频采样数据格式转化;
  8. swscale:视频像素数据格式转换。

视频解码流程:

  1. av_register_all();(示例:ffmeg->doc->examples->transcoding.c)主要是做一些准备工作;
  2. avformat_open_input();
  3. avformat_find_stream_info();读取文件信息
  4. avcodec_open2();打开编码器
  5. av_read_frame();从输入文件读取一帧压缩数据
  6. avcodec_decode_vedio2();解码一帧压缩数据,得到AVFrame
  7. avcodec_close;关闭解码器;
  8. 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
    • 一些封装格式处理的接口函数。

你可能感兴趣的:(NDK探索之FFmpeg)