首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

從零構建基於 FFmpeg + SDL 的極簡音頻播放器(附完整源碼)

     編輯:關於C語言

項目背景

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 即可。

解碼流程核心步驟

  1. `avformat_open_input` 打開輸入源並探測封裝格式;
  2. `av_find_stream_info` 獲取流信息,定位音頻流索引;
  3. `avcodec_find_decoder` + `avcodec_open` 初始化解碼器上下文;
  4. 循環 `av_read_frame` 讀取 AVPacket,`avcodec_decode_audio4` 解碼為 AVFrame;
  5. 將解碼後的 `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
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved