avformat_open_input
int avformat_open_input(AVFormatContext **ps, const char *url, AVInputFormat *fmt, AVDictionary **options);
- 简介
该函数的会打开一条输入流,并且读取头部(如:FLV文件的头部),但是对应的编解码器(AVCodec)并没有被打开。被打开的输入流,必须使用avformat_close_input
函数来关闭 - 参数
参数 | 说明 |
---|
AVFormatContext **ps | 注意类型是指向指针的指针,ps指向的内容为NULL,则会分配一个新的AVFormatContext对象 |
const char *url | 需要被打开的输入流地址吗,也可以是本地文件,不特指是URL |
AVInputFormat *fmt, AVDictionary **options | 这两个参数没特殊需求,可以设置为NULL |
avformat_close_input
void avformat_close_input(AVFormatContext **s);
- 简介
关闭一个被打开的输入流,该函数会释放AVFormatContext
对象中的所有内容,如:解码器等 - 关键参数
参数 | 说明 |
---|
AVFormatContext **s | 注意类型是指向指针的指针,该函数成功执行后,会将该参数指向的内容设置为NULL(也就是*s = NULL) |
avformat_find_stream_info
int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options);
- 简介
该函数会从上下文(AVFormatContext)中读取数据包以获取流信息。 这个对于没有头部的文件格式很有用,例如:MPEG(PS:有头部的如FLV)。 这个函数还可以在MPEG-2重复的情况下计算实际帧率。与此同时,该函数不会修改读取的位置(类似文件的偏移量),被读取的数据包会被加到缓冲区,以便后续处理。 - 关键参数
参数 | 说明 |
---|
AVFormatContext *ic | 上下文指针,将会从这个上下文中读取数据包,前提是这个上下文必须已经被打开了。 |
AVDictionary **options | 没有特殊需求,可以置为NULL |
avformat_alloc_output_context2
int avformat_alloc_output_context2(AVFormatContext **ctx, AVOutputFormat *oformat,
const char *format_name, const char *filename);
- 简介
分配一个AVFormatContext 给到输出流,要释放这个对象必须通过调用avformat_free_context
函数来释放。avformat_free_context
函数会释放AVFormatContext 中的所有内容以及与之相关的所有的FFmpeg框架分配的东西。 - 关键参数
参数 | 说明 |
---|
AVFormatContext **ctx | 注意,类型是指向指针的指针吗,成功则会分配一个上下文对象,失败会被指向NULL |
AVOutputFormat *oformats | 该参数可以设置输出的格式,如果这个参数为NULL,则会从format_name 或filename 来判断 |
const char *format_name | 格式名,指定输出的格式,如:“flv”, ‘mp4’,在oformats 为NULL时生效吗,如果该参数也为NULL,则通过filename 来判断 |
const char *filename | 输出流地址(PS:其实我觉得这里的参数名设置为url更加合适),优先级最低的格式判断方式。 |