什么是视频控件?

视频控件(M系列)如何使用?插图1

我司视频AV控件有两种功能,分别为播放视频文件以及AV输入。视频控件播放视频功能常用于开机创意效果,或者播放产品的操作指南、公共场合的广告示意等

本章节主要介绍以下3点

  1. 播放屏内的视频
  2. 播放SD卡的视频
  3. LUA API介绍

适用范围:M系列

视频格式:

  • MP4文件
  • H264编码
  • 音频流为MP3或AAC格式
  • 视频最大分辨率<1280*768
  • 最大帧数<30ps
  • 最大码率<1400

相关例程下载链接:

视频的转换操作流程可参考此教程:视频文件转换说明

18.1 视频控件属性介绍

视频控件属性介绍,如下图所示

视频控件(M系列)如何使用?插图3

用途

播放视频以及AV输入,AV输入需要应用的硬件型号支持

视频文件

加载到控件的视频命名为字母(a-z)、数字(0-9)和下划线(_)组合,不支持其他字符

音频流

启用和禁止,禁止后播放视频没有声音

自动播放

“是”或“否”,当选择是,切换到该页面就自动播放视频文件

播放结束时

视频播放结束时,执行的动作。可以选择”不处理“、“发送通知”以及“切换到下一页”

视频控件(M系列)如何使用?插图5

重复次数

重复播放的次数,0表示不断重复

18.2 播放屏内视频文件

【播放屏内视频文件】画面,介绍相关播放指令

画面配置

在【播放屏内视频文件】画面的“背景图片”导入相应的美工图片画面中添加1个视频控件(控件ID:1)和3个按钮控件用于设置视频播放状态,如下所示

视频控件(M系列)如何使用?插图7

属性配置

视频AV控件

设置视频控件用途为“播放视频”,添加视频文件,“音频流”为启用,“自动播放”为是,“播放结束时”为发送通知,“重复次数”为0,如下所示

视频控件(M系列)如何使用?插图3
按钮控件ID2-播放

添加按钮控件ID2“按下时的图片”,并且勾选裁剪;由于切换到该画面就自动播放视频,所以设置按钮控件ID2的初始状态为“按下”;按钮操作风格为“置位”,如下所示

视频控件(M系列)如何使用?插图9

设置“播放按钮”、“暂停/恢复按钮”以及“停止按钮”为互斥,操作如下所示

视频控件(M系列)如何使用?插图11

在指令助手界面,左侧导航栏选择【视频AV控件】,设置画面ID0中的控件ID2播放循环视频,填写在对应按钮的指令助手中,如下所示

视频控件(M系列)如何使用?插图13

如上所示:指令格式为EE B1 70 00 00 00 01 00 FF FC FF FF。该指令主要用于控制视频播放控件的播放,可以设置相应的视频播放循环次数,让视频按照相应的设置进行播放。(注:视频播放控件必须先设置视频路径,如控件已加载视频文件,只需要发送播放视频指令。反正,需要先发送设置播放视频的路径,在发送播放指令)

帧头组态指令功能码-视频播放画面ID控件ID播放次数帧尾
EEB17000 0000 0100FF FC FF FF
按钮控件ID3-暂停/恢复

按钮控件ID3的属性配置和按钮控件ID2配置类似,设置按钮控件ID3的初始状态为“弹起”,填写在对应按钮的指令助手中,如下所示

视频控件(M系列)如何使用?插图15

如上所示:指令格式为EE B1 72 00 00 00 01 FF FC FF FF。该指令主要用于控制视频“暂停/恢复”。指令含义如下所示

帧头组态指令功能码-视频暂停/恢复画面ID控件ID帧尾
EEB17200 0000 01FF FC FF FF
按钮控件ID4-停止

按钮控件ID4的属性配置和按钮控件ID2配置类似,设置按钮控件ID4的初始状态为“弹起”,填写在对应按钮的指令助手中,如下所示

视频控件(M系列)如何使用?插图17

如上所示:指令格式为EE B1 71 00 00 00 01 FF FC FF FF。该指令主要用于控制视频“停止”。指令含义如下所示

帧头组态指令功能码-视频停止画面ID控件ID帧尾
EEB17100 0000 01FF FC FF FF

18.3 播放SD卡中的视频

播放外部SD卡的视频步骤和播放屏内部视频步骤基本相同,不同的是播放外部SD中视频需要先发送指令设置视频路径,操作过程如下:

  1. 工程画面添加视频播放控件(参照18.2章节)
  2. 对内指令设置视频路径
  3. 发送指令控制视频播放、暂停/恢复、停止(参照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)帧尾
EEB17400 0000 0131 3A 2F 30 30 30 31 2E 6D 70 34FF 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

相关新闻

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

cloud@modbus.cn

QQ
微信