AVI Player
源码位置: samples/media/avi_player 查看源码
AVI 视频播放器示例,支持本地 SD 卡播放和在线 HTTP Range 流媒体播放,带触摸屏 LVGL UI。
功能
主菜单:本地播放、在线播放、USB MSC 文件管理
本地播放:浏览 SD 卡中的
.avi文件并播放在线播放:从
.ini文件读取视频 URL 列表,自动连接 WiFi 后播放(仅支持.avi)USB MSC:将 SD 卡挂载为 U 盘,方便电脑传文件
支持的媒体格式
视频:MJPEG(解码输出 RGB565)
音频:MP3(
WAVE_FORMAT_MPEGLAYER3 = 0x0055)
SD 卡目录结构
使用 FAT32 格式化的 SD 卡,按以下目录结构放置文件:
SD:/
├── Video/ # 本地视频文件目录
│ ├── demo.avi
│ └── sample.avi
├── URL/ # 在线视频 URL 配置目录
│ └── videos.ini # 每行一个视频 URL
└── WiFi/ # WiFi 配置目录
└── wifi.ini # WiFi 连接配置
示例资源(sd_res/ 目录,可直接拷到 SD 卡)
本 sample 在仓库里自带了一份 SD 卡内容模板,位于 samples/media/avi_player/sd_res/,
目录结构跟运行时期望完全一致:
sd_res/
├── Video/ (空目录 —— 大尺寸 .avi 不进仓库,用户自己填,见下方)
├── URL/
│ └── online_videos.ini 多条 HTTPS .avi 测试 URL(可直接用)
└── WiFi/
└── wifi.ini WiFi 配置占位示例(⚠️ 用前必改成你自己的 SSID/密码)
使用方法:把 FAT32 格式化好的 SD 卡插到电脑(读卡器,或在板子上点 USB MSC 进入
U 盘模式),把 sd_res/ 目录里的内容(是内容,不是 sd_res 目录本身)复制
到 SD 卡根目录。最终 SD 卡上应该出现 Video/ / URL/ / WiFi/ 三个顶层目录。
示例资源只是仓库里的静态模板,不会被固件编译进去。
⚠️ 两点使用前必做
1. 放视频到 sd_res/Video/
仓库里 sd_res/Video/ 目录是故意留空的(大尺寸 .avi 不进 git,避免仓库膨胀)。
从以下任选一种补进去:
下载:用
sd_res/URL/online_videos.ini里列出的listenai-firmware-deliveryOSS 公网 URL 抓一份下来:cd samples/media/avi_player/sd_res/Video curl -L -O \ https://listenai-firmware-delivery.oss-cn-beijing.aliyuncs.com/test/video/RealityEditor.avi
自己准备:用
tools/avi_encoder.py把 mp4 转成 MJPEG + MP3 的.avi(这是 sample 唯一支持的格式)。(
sd_res/Video/README.md里也写了相同的指引。)
2. 改 sd_res/WiFi/wifi.ini 的 SSID/密码
示例模板里的 WIFI_SSID=test_ssid / WIFI_PWD=test_pwd 是占位符,在线播放
(Online Play)功能会读这个文件连 Wi-Fi。一定要改成你实际可用的凭据:
WIFI_SSID=我的WiFi名称
WIFI_PWD=我的WiFi密码
不改的话点 Online Play 会提示 WiFi failed!。
本地播放
将 .avi 文件放入 SD 卡的 Video/ 目录即可。进入主菜单 -> Local Videos,列表会自动扫描该目录下的所有 .avi 文件,点击即可播放。
在线播放
需要准备两个配置文件:
1. WiFi 配置 - WiFi/wifi.ini
WIFI_SSID=你的WiFi名称
WIFI_PWD=你的WiFi密码
2. 视频 URL 列表 - URL/ 目录下任意 .ini 文件
每行一个视频 URL,支持 http:// 和 https:// 开头的链接。仅 .avi 后缀的 URL 可以播放,其他格式(如 .mp4)点击后会提示不支持。
示例 URL/videos.ini:
# 以 # 或 ; 开头的行为注释,空行会被忽略
https://example.com/Videos/demo_640x172_20fps.avi
https://example.com/Videos/sample_640x172_25fps.avi
进入主菜单 -> Online Videos,首次点击视频时会自动读取 WiFi 配置并连接,连接成功后开始播放。
USB MSC 文件管理
进入主菜单 -> USB MSC,设备会将 SD 卡以 U 盘形式暴露给电脑,可以直接拖拽文件到对应目录。完成后点击 Back 返回主菜单。
编译
./build.sh -DBOARD=LS26840U_DEMO_IV1.1
关键配置(prj.conf)
配置项 |
说明 |
|---|---|
|
启用 MP3 音频解码 |
|
启用 HTTP Range 在线播放 |
|
启用固定帧率渲染 |
|
固定渲染帧率 |
|
视频最大领先音频时间 |
没有声音时的排查
部分板卡需要外部 PA(功放)GPIO 拉起后才有声音输出。在 prj.conf 中启用:
CONFIG_LISA_AUDIO_PLAY_PA_ENABLE=y
并在 menuconfig 的 Play (DAC) Configuration 中按实际硬件引脚调整 PA 配置。
代码结构
src/
├── main.c # 入口:硬件初始化、SD 卡挂载、UI 任务
├── app_context.c/h # 全局上下文、屏幕切换
├── ui_main_menu.c/h # 主菜单 UI
├── ui_local_list.c/h # 本地视频列表 UI
├── ui_online_list.c/h # 在线视频列表 UI
├── ui_playback.c/h # 播放界面 UI + LVGL 视频渲染
├── ui_usb_msc.c/h # USB MSC 界面
├── playback_mgr.c/h # 播放管理(启动/停止播放任务)
├── fs_utils.c/h # 文件系统工具(扫描文件、读取 URL/WiFi 配置)
└── wifi_utils.c/h # WiFi 连接管理
局域网 HTTP 视频源
可使用自带工具在局域网内快速搭建视频流服务:
cd tools/
python3 ./avi_stream_server.py --port 10240