FFmpeg 解封装
涉及到的函数:
void av_register_all(void):
1)初始化libavformat并且注册所有的封装器和解封装器跟协议。
2)如果没有调用该函数,你可以选择你想要支持的格式。 @see av_register_input_format() @see av_register_output_format()
int avformat_network_init(void):
1)初始化全局的网络库。它是可选的,并且不再推荐使用。
2)该函数仅用于处理关于一些旧版的GnuTLS 或 OpenSSl库的线程安全问题。
3)该如果libavformat是链接到新版本的库,或者使用者不想用它,这个函数可以不用调用。
4)否则的话,你需要再任何使用它的线程启动之前调用该函数。
int avformat_open_input(AVFormatContext **ps, const char *url, ff_const59 AVInputFormat *fmt, AVDictionary **options):
1)该函数打开一个输入流,并且读取头部信息。此时解码器没有打开。使用完后,必须使用avformat_close_input进行关闭。
2)@param ps 该参数指向一个用户提供的AVFormatContext的指针(由avformat_alloc_context分配),也可以是一个空指针NULL,此时该函数会自动申请控件,并给该指针赋值。
3)@param url 要打开的流的URL地址。
4)@param fmt 如果非空,该参数会强制使用特定的输入格式;为空,则自动检测输入格式。
5)@param Aoptions 一个包含AVFormatContext和demuxer-private选项的字典。在返回时,这个参数将被销毁并替换为一个包含未找到选项的dict。可能是NULL。
5)@return 成功返回 0 否则返回错误码。
int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options):
1)读取媒体文件的数据包,以获得流信息。 这对于那些没有头部信息的文件格式(如MPEG),可以使用该函数来获取流信息。
2)@param ic 媒体文件句柄
3)@param options 如果非空,一个指向字典的ic.nb_streams长数组指针,其中第i个成员包含对应于第i个流的编解码器选项。返回时,每个字典将填充未找到的选项。
4)@return >=0 if OK, AVERROR_xxx on error
int av_find_best_stream(AVFormatContext *ic,
enum AVMediaType type,
int wanted_stream_nb,
int related_stream,
AVCodec **decoder_ret,
int flags);
1)找到"最佳"流。"最佳"流是根据各种试探法确定的,最可能是用户期望的。
2)
3)@param ic 媒体文件句柄
4)@param type 流类型: video, audio, subtitles, etc.
5)@param wanted_stream_nb 用户请求的流编号,或-1表示自动选择
6)@param related_stream 试着找一个相关的流(例如。在同一个程序中),如果没有为 -1
7)@param decoder_ret 如果非空,则返回所选流的解码器
8)@param flags 当前未定义
9)@return 成功:返回一个非负的流编号 AVERROR_STREAM_NOT_FOUND:需要类型的流没有被找到,则返回该数值 AVERROR_DECODER_NOT_FOUND:找到流,但没有发现解码器,返回该数值
10)@note 如果该函数成功返回,并且decoder_ret 不为空,则decoder_ret将被确保设置成有效的AVCodec