# codearts_test **Repository Path**: fylandroid/codearts_test ## Basic Information - **Project Name**: codearts_test - **Description**: 测试 - **Primary Language**: C - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-18 - **Last Updated**: 2026-03-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # FFmpeg音视频播放器 基于FFmpeg库和SDL2开发的音视频播放器,支持播放各种格式的音视频文件,并在窗口左上角显示视频信息。 ## 功能特性 - 支持多种音视频格式(MP4, AVI, MKV, MOV等) - 实时显示视频信息(编解码器、分辨率、帧率、时长等) - 音视频同步播放 - 简单的键盘控制(暂停、退出) - 基于Linux平台 - 提供两个版本:基础版和增强版(支持文字显示) ## 系统要求 - Linux操作系统 - GCC编译器 - FFmpeg开发库(libavcodec, libavformat, libavutil, libswscale, libswresample) - SDL2开发库 - SDL2_ttf开发库(增强版需要,用于文字显示) ## 安装依赖 ### Ubuntu/Debian系统 ```bash sudo apt-get update sudo apt-get install -y build-essential sudo apt-get install -y libavcodec-dev libavformat-dev libavutil-dev sudo apt-get install -y libswscale-dev libswresample-dev sudo apt-get install -y libsdl2-dev libsdl2-ttf-dev sudo apt-get install -y fonts-dejavu-core ``` 或者使用Makefile提供的命令: ```bash make install-deps ``` ### CentOS/RHEL/Fedora系统 ```bash sudo yum groupinstall -y "Development Tools" sudo yum install -y ffmpeg-devel SDL2-devel SDL2_ttf-devel sudo yum install -y dejavu-sans-fonts ``` 或者使用Makefile提供的命令: ```bash make install-deps-rhel ``` ## 编译方法 ### 方法1:使用编译脚本(推荐) ```bash chmod +x build.sh ./build.sh ``` ### 方法2:使用Makefile 编译所有版本: ```bash make ``` 只编译基础版本: ```bash make basic ``` 只编译增强版本: ```bash make ttf ``` ### 方法3:手动编译 基础版本: ```bash gcc -Wall -g -O2 -o ffmpeg_player ffmpeg_player.c \ -lavcodec -lavformat -lavutil -lswscale -lswresample -lSDL2 -lm ``` 增强版本: ```bash gcc -Wall -g -O2 -o ffmpeg_player_ttf ffmpeg_player_ttf.c \ -lavcodec -lavformat -lavutil -lswscale -lswresample -lSDL2 -lSDL2_ttf -lm ``` ## 使用方法 ### 基础版本 ```bash ./ffmpeg_player <视频文件路径> ``` ### 增强版本(推荐) ```bash ./ffmpeg_player_ttf <视频文件路径> ``` ### 示例 ```bash ./ffmpeg_player test.mp4 ./ffmpeg_player_ttf /path/to/your/video.avi ``` ## 控制键 - **空格键**: 暂停/继续播放 - **Q键** 或 **ESC键**: 退出播放器 ## 显示的视频信息 播放器会在窗口左上角显示以下信息: - 视频编解码器名称 - 视频分辨率(宽x高) - 帧率(FPS) - 视频时长(秒) - 当前帧数/总帧数 - 音频编解码器名称 - 音频采样率 - 音频声道数 - 文件名 ## 版本说明 ### 基础版本(ffmpeg_player) - 不依赖SDL2_ttf库 - 在窗口左上角显示半透明黑色背景框 - 视频信息输出到控制台 ### 增强版本(ffmpeg_player_ttf) - 依赖SDL2_ttf库和字体文件 - 在窗口左上角显示完整的视频信息文字 - 实时更新当前播放帧数 - 推荐使用此版本 ## 代码结构 ``` ffmpeg_player.c - 基础版本主程序源代码 ffmpeg_player_ttf.c - 增强版本主程序源代码(支持文字显示) Makefile - 编译配置文件 build.sh - 编译脚本 README.md - 说明文档 ``` ## 技术实现 ### 核心技术 1. **FFmpeg库**:用于音视频解码 - `libavformat`: 处理音视频封装格式 - `libavcodec`: 音视频编解码 - `libswscale`: 图像缩放和格式转换 - `libswresample`: 音频重采样 2. **SDL2库**:用于音视频输出 - 视频渲染 - 音频播放 - 事件处理 3. **SDL2_ttf库**:用于文字渲染(增强版) - TrueType字体渲染 - 在视频上叠加显示文字信息 ### 主要流程 1. 初始化FFmpeg、SDL2和SDL_ttf 2. 打开视频文件并获取流信息 3. 查找视频流和音频流 4. 打开相应的编解码器 5. 创建解码线程和解析线程 6. 循环解码和渲染视频帧 7. 在每帧上叠加显示视频信息 8. 处理用户输入事件 9. 清理资源并退出 ## 注意事项 1. 确保系统已安装所有必要的依赖库 2. 支持的视频格式取决于FFmpeg的编译配置 3. 对于高分辨率视频,可能需要调整缓冲区大小 4. 增强版本需要安装字体文件(推荐DejaVu字体) 5. 如果字体加载失败,增强版本会降级为基础版本的功能 ## 常见问题 ### Q: 编译时提示找不到SDL2_ttf库? A: 安装SDL2_ttf开发包: ```bash # Ubuntu/Debian sudo apt-get install libsdl2-ttf-dev # CentOS/RHEL sudo yum install SDL2_ttf-devel ``` ### Q: 增强版本无法显示文字? A: 确保已安装字体文件: ```bash # Ubuntu/Debian sudo apt-get install fonts-dejavu-core # CentOS/RHEL sudo yum install dejavu-sans-fonts ``` ### Q: 播放时没有声音? A: 检查音频输出设备是否正常,确保视频文件包含音频流。 ### Q: 视频播放卡顿? A: 可能是视频分辨率过高或系统性能不足,尝试播放较低分辨率的视频。 ## 扩展功能 当前版本为基础版本,可以扩展以下功能: - 添加播放进度条 - 支持音量调节 - 支持全屏播放 - 添加播放列表功能 - 支持字幕显示 - 支持快进/快退 - 支持视频滤镜效果 ## 许可证 本项目仅供学习和研究使用。 ## 作者 FFmpeg音视频播放器示例程序