1.8 FFmpeg编码支持与定制

1.8 FFmpeg编码支持与定制

FFmpeg本身支持一些音视频编码格式、文件封装格式与流媒体传输协议,但是支持的数量依然有限,FFmpeg所做的只是提供一套基础的框架,所有的编码格式、文件封装格式与流媒体协议均可以作为FFmpeg的一个模块挂载在FFmpeg框架中。这些模块以第三方的外部库的方式提供支持,可以通过FFmpeg源码的configure命令查看FFmpeg所支持的音视频编码格式、文件封装格式与流媒体传输协议,对于FFmpeg不支持的格式,可以通过configure--help查看所需要的第三方外部库,然后通过增加对应的编译参数选项进行支持。帮助信息内容输出如下:

通过以上帮助信息的输出内容可以看到,FFmpeg所支持的外部库相对来说比较多,主要包含如下列表:
这些外部库可以通过configure进行定制,在编译好的FFmpeg可执行程序中也可以看到编译时定制的FFmpeg的外部库:
例如需要自己配置FFmpeg支持哪些格式,比如仅支持H.264视频与AAC音频编码,可以调整配置项将其简化如下:
命令行执行后的输出内容如下:

省略…

1.8.2 FFmpeg的解码器支持

FFmpeg源代码本身包含了很多的解码支持,解码主要是在输入的时候进行解码,也可以理解为将压缩过的编码进行解压缩,关于解码的支持,可以通过./configure-list-decoders命令来进行查看:

从上面的输出信息中可以看到FFmpeg所支持的解码器模块decoders支持了MPEG4H.264H.265(HEVC)MP3等格式。

1.8.3 FFmpeg的封装支持

FFmpeg的封装(Muxing)是指将压缩后的编码封装到一个容器格式中,如果要查看FFmpeg源代码中都可以支持哪些容器格式,可以通过命令./configure--list-muxers来查看:

从封装(又称复用)格式所支持的信息中可以看到,FFmpeg支持生成裸流文件,如H.264AACPCM,也支持一些常见的格式,如MP3MP4FLVM3U8WEBM等。

1.8.4 FFmpeg的解封装支持

FFmpeg的解封装(Demuxing)是指将读入的容器格式拆解开,将里面压缩的音频流、视频流、字幕流、数据流等提取出来,如果要查看FFmpeg的源代码中都可以支持哪些输入的容器格式,可以通过命令./configure--list-demuxers来查看:

从解封装(Demuxer,又称解复用)格式支持信息中可以看到,FFmpeg源代码中已经支持的demuxer非常多,包含图片(image)、MP3FLVMP4MOVAVI等。

1.8.5 FFmpeg的通信协议支持

FFmpeg不仅仅支持本地的多媒体处理,而且还支持网络流媒体的处理,支持的网络流媒体协议相对来说也很全面,可以通过命令./configure--list-protocols查看:

从协议的相关信息列表中可以看到,FFmpeg支持的流媒体协议比较多,包括MMSHTTPHTTPSHLS(M3U8)RTMPRTP,甚至支持TCPUDP,其也支持使用file协议的本地文件操作和使用concat协议支持的多个文件串流操作,后面的章节中会有详细的介绍。