ESP-Muxer 组件
概述
ESP-Muxer 是乐鑫推出的一款嵌入式音视频复用组件,用于将已编码的音频与视频帧(如 AAC、MP3、H.264、MJPEG)进行复用(mux,多路复用),封装为标准媒体容器格式的数据流或文件。它本身不负责音视频的编码或解码,仅对输入的编码帧进行时序组织与封装。
在设计上,ESP-Muxer 同时支持两类输出模式:既可用于带可选切片与命名规则的 本地文件录制,也可通过回调机制进行 流式输出,使同一套复用逻辑,既能满足本地存储需求,也能灵活应用于网络传输场景。
在媒体处理流水线中,ESP-Muxer 位于 编码器之后、存储或网络发送之前,用于将编码后的流转换为可播放文件或可流式传输的数据格式。
主要功能与能力
核心功能
音视频复用: 将一个或多个音频与视频轨道(在容器格式支持的前提下)合并为单一输出。
多种容器格式: 支持 MP4、TS、FLV、WAV、CAF 和 OGG 等容器格式,可根据录制、流式传输或兼容性需求进行选择。
直接写入文件: 复用后的数据可以直接写入文件系统(如 SD 卡),支持可选的 文件切片 (例如按时长切分)以及 自定义文件命名 (例如按分片序号或时间命名)。
流式回调输出: 输出数据可以发送到 数据回调函数,而不是(或不仅仅是)写入文件。该方式适用于实时流媒体场景:复用器生成容器数据,由用户代码将其推送到网络或其他接收端。
自定义写入路径: 支持接入 自定义文件写入器 (open / write / seek / close)。这允许将数据写入非标准存储介质(例如自定义 Flash 分区、RAM 缓冲区或不同文件系统),同时仍使用相同的复用逻辑。
适合流式传输的容器: 某些容器(例如 TS、FLV)结构上支持增量输出,更适合流式传输。MP4 和 WAV 依赖与总长度相关的头部与元数据,通常 不推荐用于流式输出,但非常适合 文件录制 场景。
支持的容器与编码格式
详见 ESP-Muxer README 了解容器与编码格式支持详情。
典型应用场景
个人 / 嵌入式录像设备(PVR):摄像头 + 麦克风 → 编码 → 复用 → 输出为 MP4/TS 文件到 SD 卡,支持按时间或大小切片。
HLS 分片生成:生成 TS(或其他格式)分片,供 HLS 服务器或流水线用于直播或点播。
HTTP FLV 等实时流源:复用为 FLV(或 TS)并推送到 HTTP FLV 服务或其他实时流接入端点。
语音/音频录制:将编码后的音频(AAC、MP3 等)复用为 WAV、CAF 或 OGG 文件,便于播放与移植。
自定义存储或混合架构:使用自定义文件写入器,将复用数据写入非标准介质,同时保持统一的复用处理逻辑。
提升存储写入速度
当将复用数据写入存储介质(尤其是 SD 卡)时,写入速度 通常会限制可支持的码率或可同时录制的流数量。ESP-Muxer 在以下方面提供了优化手段:
用于对齐写入的 RAM 缓存:许多文件系统和存储驱动在进行 对齐且大块写入 时性能更好,而编码后的音视频数据往往是小块且不对齐的数据包。ESP-Muxer 可以使用内部 RAM 缓存,先聚合数据,再以更大且对齐的块写入。缓存大小可配置(0–64 KB)。更大的缓存通常意味着更高吞吐,但会占用更多 RAM。
文件切片:按时长(或大小)切分文件可以避免单个文件过大,减少长时间连续写入带来的影响,并有助于检索与管理(例如轮转删除旧分片)。
自定义写入器:如果存储介质有特殊要求(例如磨损均衡、自定义块大小或额外缓冲机制),可以提供 自定义文件写入器 (open / write / seek / close)。复用器生成的容器数据保持不变,仅底层写入方式不同。该机制不替代 RAM 缓存,而是替代默认文件 I/O;你仍可在自定义写入器之前启用 RAM 缓存以提升吞吐性能。