Muxer复用原理

本章主要讲解 FFmpeg 里面各种 Muxer 复用器的代码实现,例如 flvmp4rtmp,等等。

虽然 FFmpeg 支持各种输入格式,但是他们内部的实现都不一样。不过在 FFmpeg 对这些格式做了统一的封装的,对上层提供了一样的 API 行数。

所以无论是哪种格式,你都能用下面的流程来对其进行 Demuxer(解复用)。

1-1

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

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


本章主要讲解上面这些统一 API 函数的内部实现,以及 flvmp4 等等 各个 Muxer 的内部实现。

通过本章的内容,你最终可以自己实现一个 Muxer

版权所属 xianwanzhiyin.net 罗上文 2023 all right reserved,powered by Gitbook该文件修订时间: 2023-06-09 23:36:51

results matching ""

    No results matching ""