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

 

posted @ 2020-03-12 16:23  helloc14  阅读(223)  评论(0编辑  收藏  举报