大彩物联型串口屏通过添加LUA程序可以实现遍历外部的U盘或SD卡中的文件。在广州大彩提供的范例工程demo中,可以实现遍历外部U盘和SD卡下目录所有的音频和视频文件并播放遍历出来的音频和视频。
大彩物联型串口屏实现遍历U盘中、SD卡中的视频和音频需完成以下4个步骤:
1.将工程需要的视频进行格式转换(MP4格式);(参考文档《串口屏如何播放视频》);
2.将视频或音频添加到U盘或SD卡中;
3.在工程配置;(具体配置参考例程Demo);
4.编写LUA程序。
工程配置
例程画面中一共有三个画面,分别是首页、视频、音频画面。
1.首页画面配置如下图所示;
2.视频画面配置,如下图所示;画面中的视频播放控件的属性窗口中“播放结束时”设为发送通知,如下图所示
3.音频画面配置,如下图所示;编号1到10的控件为文本控件用于显示遍历出来的音频名字,编号11到20为图标控件用于提示当前正在播放的音频,编号35到44为按钮控件,按下按钮播放对应文本框中的音频。
编写LUA脚本
工程创建时在工程目录下会生成一个main.lua文件,点击Visual TFF软件的工具栏选择LUA编程后可以编写main.lua文件,如下图所示;
当串口屏检测到U盘或SD卡插入时会调用LUA脚本的函数on_sd_inserted(dir)或是on_usb_inserted(dir)并将U盘或者SD卡的路径传如函数中;只需要在函数on_sd_inserted(dir)或是on_usb_inserted(dir)中调用遍历目录的函数即可实现遍历SD卡或U盘的音频和视频文件,程序如下:
……
--当检测到SD卡插入串口屏后会调用此函数
function on_sd_inserted(dir) -- SD卡回调函数
listdir(dir) --遍历目录
end
function on_usb_inserted(dir) -- U盘函数
listdir(dir) --遍历目录
end
……
---获取扩展名
function getExtension(str)
return str:match(".+%.(%w+)$") --调用LUA的库函数获取字符串
end
--遍历目录的函数,将目录中的音频和视频文件遍历出来
function listdir(rootpath)
for entry in lfs.dir(rootpath) do
if entry ~= '.' and entry ~= '..' then --跳过目录中的.和..
local path = rootpath .. '/' .. entry
local attr = lfs.attributes(path) --获取指定路径的属性
if attr.mode ~= 'directory' then
ext = getExtension(path) --获取扩展名
if ext=='mp4' then --筛选MP4文件
videofilenames[videofilecount] = path
videofilecount = videofilecount+1
end
if ext == 'jpg' or ext == 'jpeg' or ext=='png' then --筛选图片文件
pic_names[picfilecount] = path
picfilecount = picfilecount+1
end
if ext=='wav' or ext=='mp3' then --筛选音频文件
music_names[musicfilecount] = path
musicfilecount = musicfilecount+1
end
else
listdir(path)
end
end
end
end
……
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
如果成功遍历后,切换到音乐画面,如下图所示;会将插入串口屏的SD卡里的音频文件名显示在文本框中,LUA脚本程序如下:
function update_music_ui() --将遍历出来的音频名字更新到音频画面
--向前播放
if videoplay_index<first_music_index then
first_music_index = videoplay_index
end
--向后播放
if videoplay_index>=first_music_index+10 then
first_music_index = videoplay_index-9
end
for i=0,9 do
if first_music_index+i<musicfilecount then
set_visiable(2,11+i,1) --图标
local filename = string.match(music_names[first_music_index+i], ".+/(.+)")
set_text(2,1+i,' '..filename) --显示音频名字
else
set_visiable(2,11+i,0) --图标
set_text(2,1+i,'')
end
--正在播放的音乐,图标和文字都高亮显示
if first_music_index+i==videoplay_index then
set_value(2,11+i,1) --图标
set_back_color(2,1+i,0x5aeb)
else
set_value(2,11+i,0) --图标
set_back_color(2,1+i,0x3186)
end
end
end
function on_control_notify(screen,control,value)
--load_config('e:/config.txt')
--load_ad('e:/sub.txt')
if screen == 0 then --首页
if control==4 then -- 按钮4按下
playing_mode = 1
change_screen(0)
end
if control==5 then -- 按钮5按下
playing_mode = 2
change_screen(2) --切换到音频画面
update_music_ui()
play_next_video() --播放下一首歌
end
if control==6 then --视频模式
playing_mode = 0
change_screen(1) --切换到视频画面
play_next_video() --播放下一个视频
end
end
详细程序需要参考源文件,以上程序为截取源程序中的部分函数。