可以这么说,用FFmpeg的API搞定麦克风的mp3/aac录音,相当于是音视频开发中前进的不大不小的一步,录音的整个过程其实和推流几乎相同,包含取流、封装(复用)、编码、收尾等工作,搞明白了录音,推流就比较简单了,推流的关键是设置好复用器参数和做好音视频同步。录音程序中用到了30多个API函数,这些也是音视频开发中的高频函数,必须熟练掌握,AVPacket和AVFrame这两个结构体需针对音视频熟悉常用的参数设置。我的这个专栏全是音视频相关的内容,并且会一直更新到300篇以上的内容,几乎涵盖音视频开发的大多数使用场景,如果对您有帮助,就请订阅本专栏吧,非常感谢您的支持,您的支持是我创作的最大动力!



目录
一、整体架构
二、核心 API 全景表(按执行顺序)
阶段 1:初始化库
阶段 2:打开麦克风(Input Device)
阶段 3:初始化编码器(仅 AAC/MP3 需要,WAV 跳过)
阶段 4:初始化复用器(Muxer / Output)
阶段 5:重采样(可选,格式/采样率不匹配时才需要)
阶段 6:编码循环(仅 AAC/MP3)
阶段 7:写出与收尾
三、平台差异速查
四、FFmpeg6关键变更(踩坑重灾区)
旧写法(已废弃/移除)
新写法(FFmpeg6)
五、两种输出模式对比
模式 A:输出 WAV(PCM 裸数据,最简单)
模式 B:输出 AAC(需要编码)
六、完整代码框架(WAV 模式)
录音核心代码
程序运行截图
保存的录音文件
七、调试技巧
八、一键命令行对照
九、总结
十、参考链接
觉得有用,就请您帮忙点赞转发收藏吧,您的鼓励是我创作的动力,多谢看官。 由于能力水平有限,文中的错误或不严谨的地方在所难免,还请批评指正。
本文基于 FFmpeg 6.x 最新 API,系统梳理了跨平台(Windows dshow / Linux ALSA / macOS avfoundation)麦克风采集到音频文件输出的完整流程。
核心认知:麦克风采集到的 AVPacket本身就是 PCM 裸数据,无需解码即可使用。输出分为两种模式:
-
WAV 模式:PCM 直接写入,不需要编码器、不需要 PTS 管理、不需要 flush,流程极简——打开设备 → avformat_write_header→ av_read_frame→ av_interleaved_write_frame→ av_write_trailer。
-
AAC/MP3 模式:需要额外经过编码器(avcodec_send_frame/ avcodec_receive_packet),写出前必须做 PTS 时间基转换(av_packet_rescale_ts内部调用 av_rescale_q),结束时送




