基于 FFmpeg 和 SDL2 的简易音频播放器 —— 支持歌词同步
git地址:git@gitee.com:fahati-champion-and-runner-up/audio_player.git
项目简介
本项目实现了一个基于 FFmpeg 和 SDL2 的简易音频播放器,支持 MP3 等音频文件的解码与播放,并可同步显示 LRC 歌词。适合音视频开发初学者学习 FFmpeg 解码流程和 SDL2 音频播放机制。
主要特性
- 音频解码与播放:利用 FFmpeg 解码音频文件,通过 SDL2 播放 PCM 数据。
- 歌词同步显示:解析 LRC 歌词文件,实时输出与音频同步的歌词。
- 跨平台支持:支持 Windows 和 Linux。
- 代码简洁,易于理解:适合音视频开发入门学习。
依赖环境
- FFmpeg
- SDL2
安装依赖(以 Ubuntu/Debian 为例)
sudo apt-get update
sudo apt-get install ffmpeg libsdl2-dev
为了方便初学者运行,具体的头文件与库已经放到了工程的include 与lib下
Windows 用户请参考 FFmpeg 官网 和 SDL2 官网 配置开发环境。
快速开始
克隆项目代码
git clone git@gitee.com:fahati-champion-and-runner-up/audio_player.git
cd audio_player
准备音频和歌词文件
将音频文件(如 M500000jJ2Kz4G3ZT7.mp3)和对应的 LRC 歌词文件(如 test.lrc)放在项目根目录下,文件名需一致。
编译项目
Linux 下可直接运行:
./compile_gcc.sh
Windows 下可使用 Visual Studio 工程文件或 MinGW 脚本编译。
运行播放器
./audio_player
播放过程中,歌词会在终端同步输出。按
Ctrl+C
可退出程序。运行效果
核心代码说明
播放器主逻辑位于 ffmpeg_audio_player.cpp。主要流程如下:
- 使用 FFmpeg 打开音频文件,查找音频流并解码为 PCM 数据。
- 通过 SDL2 初始化音频设备,设置回调函数进行音频播放。
- 解析 LRC 歌词文件,将时间戳与歌词内容存入内存。
- 在音频播放过程中,根据当前播放时间实时输出对应歌词,实现歌词同步。
适用人群
- FFmpeg、SDL2 初学者
- 需要实现音频播放及歌词同步功能的开发者
- 音视频开发相关课程实验
欢迎大家 Star、Fork 和贡献代码!
项目地址:git@gitee.com:fahati-champion-and-runner-up/audio_player.git