avformat_open_input()
打开输入流并读取标题。编解码器此时不会打开。流必须使用avformat_close_input()关闭。 **参数1: AVFormatContext ps :用户提供的AVFormatContext的指针(由avformat_alloc_context()分配),如果此接口失败AVFormatContext将被释放。 *参数2: const char url :要打开的流的URl地址。 **参数3:const AVInputFormat *fmt:**一般为NULL。 **参数4:AVDictionary **options,**结构体,简单的key/value存储, ffmpeg中有很多 API 通过它来传递参数。 例如设置缓存大小、设置超时断开连接时间、设置最大时延等。 **返回:**成功返回0,失败返回负数。
avformat_find_stream_info()
读取媒体文件的数据包以获取流信息. **参数1:AVFormatContext *ic: **上下文句柄 **参数2:AVDictionary **options:**一般为NULL **返回:**成功返回0,失败返回负数。
av_find_best_stream()
** 用于查找最佳匹配的媒体流。** **参数1:AVFormatContext *ic:**上下文句柄 **参数2:enum AVMediaType type: 要查找的媒体流类型,可以是音频流、视频流或字幕流等。 **
enum AVMediaType {
AVMEDIA_TYPE_UNKNOWN = - 1 ,
AVMEDIA_TYPE_VIDEO,
AVMEDIA_TYPE_AUDIO,
AVMEDIA_TYPE_DATA,
AVMEDIA_TYPE_SUBTITLE,
AVMEDIA_TYPE_ATTACHMENT,
AVMEDIA_TYPE_NB
} ;
**参数3:int wanted_stream_nb: **期望的媒体流索引号,可以是特定的索引号,也可以是AV_NOPTS_VALUE(-1)表示任意流。 **参数4:int related_stream: **前一个相关流的索引号,如果没有前一个相关流,则传入-1。 ** ** **参数5:const struct AVCodec **decoder_ret: **返回解码器指针。 **参数6:int flags: **查找最佳流的标志位,默认为0。 ** 返回:**找到的最佳匹配媒体流的索引号,如果找不到则返回负数。
avcodec_alloc_context3()
分配AVCodecContext(编解码器上下文)并将其字段设置为默认值。生成的结构体应该使用avcodec_free_context()释放。 **参数1: AVCodec *codec:**通常为NULL。如果为NULL,则不会初始化编解码器特定的默认值。 返回:AVCodecContext * 编解码器上下文;填充默认值或失败时为NULL。
avcodec_find_decoder()
通过id查找解码器。 **参数1:enum AVCodecID id: **枚举类型,所请求解码器的AVCodecID。 **返回:**如果找到一个,则为解码器,否则为NULL。
avcodec_open2()
使用给定的AVCodec初始化AVCodecContext。使用此函数之前上下文必须使用avcodec_alloc_text3()进行分配。 **参数1:AVCodecContext *avctx: **需要初始化的AVCodecContext。 **参数2:AVCodec *codec:**要打开此上下文的编解码器. **参数3:AVDictionary **options:**字典选项,通常为NULL **返回:**成功返回0,失败返回负数。
av_packet_alloc()
分配AVPacket并将其字段设置为默认值。由此产生的struct必须使用av_packet_free()释放。 返回:AVPacket,失败时为NULL。
av_frame_alloc()
分配一个AVFrame并将其字段设置为默认值。由此产生的struct必须使用av_frame_free()释放。 **返回:**AVFrame,失败时为NULL。
av_read_frame()
返回流的下一帧。 **参数1:AVFormatContext *s:**上下文句柄。 **参数2:AVPacket *pkt:**返回的一帧数据包 。 **返回:**成功返回0,失败返回负数。
avcodec_send_packet()
提供原始数据包数据作为解码器的输入,即负责把AVpacket数据包发送给 解码器 *参数1:AVCodecContext avctx:编解码器上下文 *参数2:AVPacket avpkt:一帧数据包 **返回:**成功返回0,失败返回负数。
返回说明:
@retval AVERROR ( EAGAIN) 在当前状态下不接受输入- 必须读取输出avcodec_receive_frame ( )
@retval AVERROR_EOF 解码器已被刷新,不能生成新的数据包发送给它
@retval AVERROR ( EINVAL) 编解码器未打开,它是编码器,或者需要flush
@retval AVERROR ( ENOMEM) 向内部队列添加报文失败
avcodec_receive_frame()
**从解码器或编码器返回已解码的输出数据, 即从解码器取出一帧AVFrame数据 ** **参数1:AVCodecContext *avctx:**编解码器上下文。 **参数2:AVFrame *frame:**由编解码器分配的帧。 **返回:**成功返回0,失败返回负数。(返回参考avcodec_send_packet)