音视频开发之-FFmpeg函数和结构体总结

AVFormatContext

AVFormatContext 在FFmpeg中有很重要的作用,描述一个多媒体文件的构成及其基本信息,存放了视频编解码过程中的大部分信息。通常该结构体由avformat_open_input分配存储空间,在最后调用avformat_input_close关闭

AVStream

AVStream 描述一个媒体流,在解码的过程中,作为AVFormatContext的一个字段存在,不需要单独的处理。

AVpacket

AVpacket 用来存放解码之前的数据,它只是一个容器,其data成员指向实际的数据缓冲区,在解码的过程中可有av_read_frame创建和填充AVPacket中的数据缓冲区,当数据缓冲区不再使用的时候可以调用av_free_apcket释放这块缓冲区。

AVFrame

AVFrame存放从AVPacket中解码出来的原始数据,其必须通过av_frame_alloc来创建,通过av_frame_free来释放。和AVPacket类似,AVFrame中也有一块数据缓存空间,在调用av_frame_alloc的时候并不会为这块缓存区域分配空间,需要使用其他的方法。

swr_alloc_set_opts

重采样函数

SwrContext *swr_alloc(void);    // 分配重采样的上下文。

SwrContext *swr_alloc_set_opts(struct SwrContext *s,   //参数1:重采样上下文
                  int64_t out_ch_layout,   //参数2:输出的layout, 如:5.1声道…
                  AVSampleFormat out_sample_fmt,  //参数3:输出的样本格式。Float, S16, S24
                  int out_sample_rate,   //参数4:输出的样本率。可以不变
                  int64_t in_ch_layout,  //参数5:输入的layout
                  AVSampleFormat in_sample_fmt,  //参数6:输入的样本格式。
                  int in_sample_rate,   //参数7:输入的样本率
                  int log_offset, void *log_ctx //参数8,参数9,日志,不用管,可直接传0
);
//针对音频的播放速度,可以通过样本率的改变而改变。

int swr_init(struct SwrContext *s);                       // 初始化上下文
void swr_free(struct SwrContext **s);                  // 释放上下文空间

avformat_open_input

参数说明:

  • AVFormatContext *ps, 格式化的上下文。要注意,如果传入的是一个AVFormatContext的指针,则该空间须自己手动清理,若传入的指针为空,则FFmpeg会内部自己创建。
  • const char *url, 传入的地址。支持http,RTSP,以及普通的本地文件。地址最终会存入到AVFormatContext结构体当中。
  • AVInputFormat *fmt, 指定输入的封装格式。一般传NULL,由FFmpeg自行探测。
  • AVDictionary **options, 其它参数设置。它是一个字典,用于参数传递,不传则写NULL。

参考

ffmpeg 源代码简单分析

你可能感兴趣的:(音视频开发之-FFmpeg函数和结构体总结)