libavformat(lavf)是一个用于处理各种媒体容器格式的库。它的主要两个目的是去复用(即将媒体文件拆分为组件流)和复用的反向过程(以指定的容器格式写入提供的数据)。它还有一个I/O模块,支持多种访问数据的协议(如文件、tcp、http等)。在使用lavf之前,您需要调用av_register_all()来注册所有已编译的复用器、解复用器和协议。除非您绝对确定不会使用libavformat的网络功能,否则还应该调用avformat_network_init();
一、媒体流封装(Muxing)
媒体流封装主要是指以AVPackets的形式获取编码后的数据后,以指定的容器格式将其写入到文件或者其他方式输出到字节流中。
Muxing实际执行的主要API有:
初始化:avformat_alloc_output_context2();
创建媒体流(如果有的话):avformat_new_stream();
写文件头:avformat_write_header();
写数据包:av_write_frame()/av_interleaved_write_frame();
写文件尾:av_write_trailer();