18 视频控件-M系列
什么是视频控件?
我司视频AV控件有两种功能,分别为播放视频文件以及AV输入。视频控件播放视频功能常用于开机创意效果,或者播放产品的操作指南、公共场合的广告示意等
本章节主要介绍以下3点
- 播放屏内的视频
- 播放SD卡的视频
- LUA API介绍
适用范围:M系列
视频格式:
- MP4文件
- H264编码
- 音频流为MP3或AAC格式
- 视频最大分辨率<1280*768
- 最大帧数<30ps
- 最大码率<1400
相关例程下载链接:
视频的转换操作流程可参考此教程:视频文件转换说明
18.1 视频控件属性介绍
视频控件属性介绍,如下图所示
用途
播放视频以及AV输入,AV输入需要应用的硬件型号支持
视频文件
加载到控件的视频命名为字母(a-z)、数字(0-9)和下划线(_)组合,不支持其他字符
音频流
启用和禁止,禁止后播放视频没有声音
自动播放
“是”或“否”,当选择是,切换到该页面就自动播放视频文件
播放结束时
视频播放结束时,执行的动作。可以选择”不处理“、“发送通知”以及“切换到下一页”
重复次数
重复播放的次数,0表示不断重复
18.2 播放屏内视频文件
【播放屏内视频文件】画面,介绍相关播放指令
画面配置
在【播放屏内视频文件】画面的“背景图片”导入相应的美工图片画面中添加1个视频控件(控件ID:1)和3个按钮控件用于设置视频播放状态,如下所示
属性配置
视频AV控件
设置视频控件用途为“播放视频”,添加视频文件,“音频流”为启用,“自动播放”为是,“播放结束时”为发送通知,“重复次数”为0,如下所示
按钮控件ID2-播放
添加按钮控件ID2“按下时的图片”,并且勾选裁剪;由于切换到该画面就自动播放视频,所以设置按钮控件ID2的初始状态为“按下”;按钮操作风格为“置位”,如下所示
设置“播放按钮”、“暂停/恢复按钮”以及“停止按钮”为互斥,操作如下所示
在指令助手界面,左侧导航栏选择【视频AV控件】,设置画面ID0中的控件ID2播放循环视频,填写在对应按钮的指令助手中,如下所示
如上所示:指令格式为EE B1 70 00 00 00 01 00 FF FC FF FF。该指令主要用于控制视频播放控件的播放,可以设置相应的视频播放循环次数,让视频按照相应的设置进行播放。(注:视频播放控件必须先设置视频路径,如控件已加载视频文件,只需要发送播放视频指令。反正,需要先发送设置播放视频的路径,在发送播放指令)
帧头 | 组态指令 | 功能码-视频播放 | 画面ID | 控件ID | 播放次数 | 帧尾 |
---|---|---|---|---|---|---|
EE | B1 | 70 | 00 00 | 00 01 | 00 | FF FC FF FF |
按钮控件ID3-暂停/恢复
按钮控件ID3的属性配置和按钮控件ID2配置类似,设置按钮控件ID3的初始状态为“弹起”,填写在对应按钮的指令助手中,如下所示
如上所示:指令格式为EE B1 72 00 00 00 01 FF FC FF FF。该指令主要用于控制视频“暂停/恢复”。指令含义如下所示
帧头 | 组态指令 | 功能码-视频暂停/恢复 | 画面ID | 控件ID | 帧尾 |
---|---|---|---|---|---|
EE | B1 | 72 | 00 00 | 00 01 | FF FC FF FF |
按钮控件ID4-停止
按钮控件ID4的属性配置和按钮控件ID2配置类似,设置按钮控件ID4的初始状态为“弹起”,填写在对应按钮的指令助手中,如下所示
如上所示:指令格式为EE B1 71 00 00 00 01 FF FC FF FF。该指令主要用于控制视频“停止”。指令含义如下所示
帧头 | 组态指令 | 功能码-视频停止 | 画面ID | 控件ID | 帧尾 |
---|---|---|---|---|---|
EE | B1 | 71 | 00 00 | 00 01 | FF FC FF FF |
18.3 播放SD卡中的视频
播放外部SD卡的视频步骤和播放屏内部视频步骤基本相同,不同的是播放外部SD中视频需要先发送指令设置视频路径,操作过程如下:
- 工程画面添加视频播放控件(参照18.2章节)
- 对内指令设置视频路径
- 发送指令控制视频播放、暂停/恢复、停止(参照18.2章节)
对内指令设置视频路径
设置播放SD卡视频格式,如播放SD卡的0001.mp4文件,其中SD的盘符为1:/,路径即是‘1:/0001.mp4’。如下所示: B1 74 00 00 00 01 31 3A 2F 30 30 30 31 2E 6D 70 34 FF FC FF FF。该指令主要用于控制视频“停止”。指令含义如下所示
帧头 | 组态指令 | 功能码-设置视频播放路径 | 画面ID | 控件ID | 路径(1:/0001.mp4) | 帧尾 |
---|---|---|---|---|---|---|
EE | B1 | 74 | 00 00 | 00 01 | 31 3A 2F 30 30 30 31 2E 6D 70 34 | FF FC FF FF |
18.4 LUA API介绍
play_video(file,left,top,width,height)
播放视频:M系列,api部分不需要借助控件播放,属于“画布”播放视频
- file:文件路径
- left:起始坐标x
- top:起始坐标y
- width:视频显示的宽度
- height:视频显示的高度
播放屏内视频
如播放屏内根目录下的”test.mp4”视频,屏内盘符为“3:/“,如下所示
--用户通过触摸修改控件后,执行此回调函数
--点击按钮控件,修改文本控件、修改滑动条都会触发此事件
function on_control_notify(screen,control,value)
if screen == sc_main2
then
if control == 7 and value == 0
then
play_video('3:/test.mp4', 0, 0, 480, 272)
end
end
end
-- 系统回调函数,插入SD卡自动回调
function on_sd_inserted(dir)
sd_dir = dir
end
播放SD卡视频
如播放SD根目录下的”test.mp4”视频,SD盘符为“1:/“,但是建议创建全局变量,在SD卡触发回调中获取盘符,如下所示
local sd_dir = ''
--用户通过触摸修改控件后,执行此回调函数
--点击按钮控件,修改文本控件、修改滑动条都会触发此事件
function on_control_notify(screen,control,value)
if screen == sc_main2
then
if control == 2 and value == 0
then
play_video(sd_dir..'/'..'test.mp4', 0, 0, 480, 272)
end
end
end
更多关于LUA脚本的文件的遍历、视频控制、循环播放等,可参考《播放SD卡视频文件》(点击跳转)
stop_video()
停止视频播放
on_video_notify(msg,v1, v2)
视频播放回调函数
- msg:1-播放中,0-播放完毕
- v1:当前播放进度,当前已播时长,单位s
- v2:播放总进度, 当前视频总时长,单位s
通过进度条显示播放进度、以及文本控件显示播放时长代码示例如下所示,完整代码参考《播放SD卡视频文件》(点击跳转)
function on_video_notify(msg,v1,v2)
local token_time = ':'
if msg == 1
then
local v1_h = string.format("%02d", math.modf(v1/60/60))
local v1_m = string.format("%02d", math.modf((v1/60) % 60))
local v1_s = string.format("%02d", math.modf(v1%60))
local show_v1 = v1_h..token_time..v1_m..token_time..v1_s
local v2_h = string.format("%02d", math.modf(v2/60/60))
local v2_m = string.format("%02d", math.modf((v2/60) % 60))
local v2_s = string.format("%02d", math.modf(v2%60))
local show_v2 = v2_h..token_time..v2_m..token_time..v2_s
set_value(sc_video, 26, (v1/v2)*1000)
set_text(sc_video, 27, show_v1)
set_text(sc_video, 28, show_v2)
elseif msg == 0
then
paly_video_index = paly_video_index + 1
if paly_video_index > video_cnt
then
paly_video_index = 1
end
local cur_play_page = math.modf(paly_video_index / 5)
if paly_video_index % 5 > 0
then
cur_play_page = cur_play_page + 1
end
if cur_play_page == get_value(sc_video, 17)
then
my_set_video_playstate(paly_video_index)
else
my_set_video_playstate(0)
end
play_video(video_Tb[paly_video_index], video_x, video_y, video_w, video_h)
my_setvisable_video_progress(1)
end
end