Muxer复用架构—FFmpeg源码分析

作者:罗上文,微信:Loken1,公众号:FFmpeg弦外之音

FFmpeg 可以输出各种格式,例如 flvmp4rtmp,等等,这些模块的内部实现都不一样的。不过 FFmpeg 对这些格式做了统一的封装,对上层提供了一样的 API 函数。

所以无论是哪种格式,你都能用下面的流程来对其进行 Muxer(封装/复用)

1-1

  1. avformat_alloc_output_context2() 申请 Muxer上下文实例的内存,并且对 Muxer上下文的实例进行初始化,就是把一些字段设置一下默认值
  2. avformat_new_stream()Muxer 里面添加一个新的数据流,例如 MP4 支持多个音频流或者视频流,其他格式也类似。
  3. avio_open2() 正式打开输出文件,或者打开网络流,建立 TCP 链接,建立 RTMP 链接等等。
  4. avformat_write_header() 写入头部信息。
  5. av_interleaved_write_frame()对编码后的 AVPacket 进行封装,然后写入文件,或者推送到网络上。
  6. av_write_trailer() 写入尾部信息

注意:avformat_write_header() 之后不能再调 avformat_new_stream() 添加新的数据流了,因为头部已经写进去,不能再改媒体流信息。


FFmpeg 的 Muxer 复用架构可以分为 3 个部分,以 MP4 为例,其他的格式也是类似的,如下:

FFmpeg书籍版权所属@罗上文 2025 all right reserved,powered by Gitbook该文件修订时间: 2023-09-01 23:51:56

results matching ""

    No results matching ""