本帖最后由 muyichuan2012 于 2025-1-7 10:39 编辑
AT32视频播放器
(MJPEG 编码的avi 格式,240X320)
4.26 案例 视频显示
4.26.1 简介
AT32 SURF 板载了一个3.5 寸的TFT LCD 液晶显示屏,分辨率为480*320。通过软件解码库将SD
卡里面的视频文件解码后,显示在LCD 液晶显示屏,当解码320*240 视频时,解码速度大约在15-20FPS。解码参数:
视频尺寸不大于320*240
视频文件格式为MJPEG 编码的avi 格式
音频文件格式为未压缩的16 位PCM 格式
如果视频格式不满足上述的需求,可以通过视频转换软件进行转换,如下图所示:
图77. 视频格式转换配置
图78. 视频格式转换配置
步骤1:选择需要转换的视频
步骤2:选择输出格式为avi
步骤3:选择高级配置
步骤3.1:选择视频格式为MJPEG
步骤3.2:选择视频尺寸不大于320*240
步骤3.3:选择视频帧数,在320*240 下,最高可以选择15
步骤3.4:选择音频格式为PCM S16LE
步骤3.5:选择音频采样速率
步骤4:设置输出文件夹
4.26.2 资源准备
硬件环境:
对应产品型号的AT-SURF-F437 Board
软件环境:
AT32F435_437_Firmware_Library_V2.x.x\project\at_surf_f437\examples\video
示例视频:
视频原始路径:Utilities\VIDEO,复制VIDEO 文件夹到SD 卡根目录下
4.26.3 硬件设计
本案例使用的硬件资源有TFT LCD 液晶显示屏、SD 卡、PCA9555 IO 扩展芯片,对应的引脚如下:
表35. 硬件资源使用
表36. PCA9555 使用
对应的电路原理如下:
图79. TFT LCD 电路原理图
图80. PCA9555 电路原理图
4.26.4 软件设计
1) TFT LCD 测试
初始化TFT LCD
将图片解码后显示在LCD 屏上
2) 代码介绍
main 函数代码描述
int main(void)
{
/* 初始化系统时钟 */
system_clock_config();
/* 初始化中断优先级分组 */
nvic_priority_group_config(NVIC_PRIORITY_GROUP_4);
/* 初始化延时函数 */
delay_init();
/* 初始化LCD */
lcd_init(LCD_DISPLAY_VERTICAL);
/* 显示信息 */
lcd_string_show(10, 20, 200, 24, 24, (uint8_t *)" Video test");
/* 初始化文件系统 */
if(file_system_init() != SUCCESS)
{
lcd_string_show(10, 55, 300, 24, 24, (uint8_t *)"sd card init error");
while(1);
}
/* 初始化IO 扩展芯片 */
pca9555_init(PCA_I2C_CLKCTRL_100K);
/* 初始化按键 */
/* initialize key */
/* 初始化可调电阻 */
variable_resistor_init();
/* 初始化音频 */
audio_init();
/* 初始化串口 */
uart_print_init(115200);
/* 播放视频 */
video_play(&video_info);
while(1)
{
}
}
void video_play(video_type *video)函数代码描述
/**
* [url=home.php?mod=space&uid=247401]@brief[/url] play video.
* @param video: video information structure.
* @retval none
*/
void video_play(video_type *video)
4.26.5 下载验证
在LCD 屏上播放视频。
由于播放音乐,喇叭功耗较高,如果在播放过程中发生了重启,可以调节VR 旋钮降低音量。
图81. 实验效果
视频效果哔哩哔哩展示:https://www.bilibili.com/video/B ... eply113757963425716
|