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。