項目背景
FFmpeg 庫龐大且文檔分散,初學者常感無從下手。本文分享一個約 200 行代碼的極簡音頻播放器,涵蓋音頻解碼、播放全流程核心 API,作為學習 FFmpeg 的入門範例與備忘錄。
核心功能特性
- 支持本地文件與流媒體(RTMP、HTTP 等)多種音頻輸入;
- 基於新版 FFmpeg API(avcodec_decode_audio4 等),兼容性更強;
- 使用 SDL2 輸出解碼後的 PCM 音頻,實現跨平台播放;
- 支持 MP3、AAC、M4A 等主流格式,並給出 MP3 幀大小調優建議;
- 可提取視頻文件中的音頻軌單獨播放;
- 解碼輸出 PCM 數據可直接導入 Adobe Audition 驗證。
關鍵技術點解析
音頻回調與幀大小塊
SDL 音頻回調函數 `fill_audio` 需按固定緩衝區大小(默認 4096 字節)填充數據。MP3 每幀 4608 字節,若不調整 `wanted_spec.samples` 會導致播放卡頓、變調。解決方案:播放 MP3 時將樣本數設為 1152(對應 4608 字節),AAC/M4A 保持 1024 即可。
解碼流程核心步驟
- `avformat_open_input` 打開輸入源並探測封裝格式;
- `av_find_stream_info` 獲取流信息,定位音頻流索引;
- `avcodec_find_decoder` + `avcodec_open` 初始化解碼器上下文;
- 循環 `av_read_frame` 讀取 AVPacket,`avcodec_decode_audio4` 解碼為 AVFrame;
- 將解碼後的 `pFrame->data[0]` 經 SDL 回調播放,並可選寫入 PCM/WAV 文件。
編譯環境與依賴
- IDE:Visual Studio 2010(可遷移至 VS2019/2022);
- FFmpeg:新版動態庫(libavcodec、libavformat 等);
- SDL:SDL2-devel 包,需配置 include/lib 目錄;
- 平台:Windows x86/x64。
完整工程下載
包含 VS 解決方案、依賴庫、測試音頻:點此下載
運行截圖

本文源自 “leixiaohua1020視音頻技術” 博客,轉載請保留出處:https://leixiaohua1020.blog.51cto.com/3974648/1298616