FFmpeg
|
I/O 和复用/解复用库。 更多的...
模块 | |
解复用 | |
解复用器读取媒体文件并将其分割成数据块(数据包)。数据包包含属于单个基本流的一个或多个编码帧。在 lavf API 中,此过程由用于打开文件的avformat_open_input()函数、用于读取单个数据包的av_read_frame()以及最后进行清理的avformat_close_input() 函数来表示。 | |
穆星 | |
Muxers 以AVPackets形式获取编码数据,并将其写入指定容器格式的文件或其他输出字节流中。 | |
输入/输出读/写 | |
解复用器 | |
输入/输出协议 | |
内部的 | |
公共元数据API | |
核心功能 | |
实用功能 | |
文件 | |
file | avformat.h |
file | 版本.h |
file | 版本_主要.h |
I/O 和复用/解复用库。
Libavformat (lavf) 是一个用于处理各种媒体容器格式的库。它的主要两个目的是解复用——即将媒体文件分割成组件流,以及复用的逆过程——以指定的容器格式写入提供的数据。它还具有一个I/O 模块,支持多种访问数据的协议(例如文件、tcp、http 等)。除非您绝对确定不会使用 libavformat 的网络功能,否则您还应该调用avformat_network_init()。
支持的输入格式由AVInputFormat结构描述,相反,输出格式由AVOutputFormat描述。您可以使用 av_demuxer_iterate / av_muxer_iterate()函数迭代所有输入/输出格式。协议层不是公共 API 的一部分,因此您只能使用avio_enum_protocols()函数获取支持的协议的名称。
用于复用和解复用的主要 lavf 结构是AVFormatContext,它导出有关正在读取或写入的文件的所有信息。与大多数 Libavformat 结构一样,它的大小不是公共 ABI 的一部分,因此不能在堆栈上分配或直接使用av_malloc()分配。要创建AVFormatContext,请使用avformat_alloc_context()(某些函数,如avformat_open_input()可能会为您执行此操作)。
最重要的是AVFormatContext包含:
可以使用AVOptions机制配置 lavf 复用器和解复用器。通用(与格式无关)libavformat 选项由AVFormatContext提供,可以通过在分配的AVFormatContext(或其来自avformat_get_class ()的AVClass )上调用av_opt_next() / av_opt_find()从用户程序中检查它们。当且仅当相应格式结构的AVInputFormat.priv_class / AVOutputFormat.priv_class为非 NULL 时,AVFormatContext.priv_data才会提供私有(特定于格式)选项。如果AVClass为非 NULL,则I/O 上下文和协议层可以提供更多选项。请参阅AVOptions文档中有关嵌套的讨论,了解如何访问它们。
libavformat 中的 URL 字符串由方案/协议、“:”和方案特定字符串组成。支持不带方案的 URL 以及用于本地文件的“:”,但已弃用。“file:”应用于本地文件。
重要的是,方案字符串不应未经检查就从不受信任的来源获取。
请注意,某些方案/协议非常强大,允许访问本地和远程文件、文件的一部分、文件的串联、本地音频和视频设备等。