视频控件 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 用途:视频控件是一种用于处理和控制视频播放及管理的用户界面元素。为用户提供播放视频文件、调节播放进度、音量等操作的功能。 属性 --------------------------------- .. image:: image/视频/属性.png :align: center :alt: 视频属性 | **基础属性 :** 参考控件概念- :ref:`基础属性` **坐标属性 :** 参考控件概念- :ref:`坐标属性` **特有属性 :** .. image:: image/视频/特有属性.png :align: center :alt: 视频特有属性 | - 存放位置(from):0-内部存储,1-外部TF卡(只读) - 播放状态(play):播放状态:0-停止,1-播放,2-暂停(读写) - 循环播放(loop):循环播放:0-单次,1-循环(读写) - 播放时间(time):当前播放时间,单位秒。脚本读该属性时,获取视频当前播放时间。脚本设置该属性时,指定视频播放时间(读写) - 总时间(atime):视频总时长,单位秒(只读) .. attention:: 使用脚本获取 **播放时间(time)** 时,系统会自动更新该属性值。 当 ``存放位置(from)`` 为 ``0-内部存储`` 时, 属性如下图所示 .. image:: image/视频/特有属性.png :align: center :alt: 视频特有属性 | - 编号(num):视频id,范围0-65535,65535表示无(读写) 当 ``存放位置(from)`` 为 ``0-外部TF卡`` 时, 属性如下图所示 .. image:: image/视频/特有属性-TF卡.png :align: center :alt: 视频特有属性 | - 路径(path):存放路径(例如:test.ATKV)。 **对于串口屏** 文件需放在TF卡 ``ATK_HMI/VIDEO`` 目录下。 **对于模拟器** 文件需放在工程目录的 ``SD/ATK_HMI/VIDEO 目录下`` 。注意:路径不支持中文(读写) - 路径最大长度(size):单位字节,范围:0-4096,UTF-8编码下中文字符占用3个字节,其他编码中文字符占用2个字节(只读) .. attention:: 同时只能播放一个音频或者视频。 --------------------------------- 事件 --------------------------------- **弹起事件:** 控件按下且弹起后执行 **按下事件:** 控件按下后执行 **播放完成事件:** 视频完整播放结束才执行 ----------------------------------------- 如何导入视频资源 ----------------------------------------- .. attention:: - HMI工程如果使用旋转功能,必须使用音视频工具对视频资源进行旋转,否则会导致动画资源不能正常播放 - 使用 **音视频转换工具** 将 ``视频文件`` 转换为 ``ATKV文件`` , 请参考章节 :ref:`音视频工具` - 打开HMI软件,从右下角的资源栏中选择 ``视频`` -> ``添加`` .. image:: image/视频/导入视频资源.png :align: center :alt: 导入视频资源 | - 导入成功,会在视频资源下显示 ``资源ID`` 、 ``分辨率`` 、 ``视频大小`` 等信息 .. image:: image/视频/资源列表.png :align: center :alt: 视频列表 | 功能演示 --------------------------------- `点击下载演示工程 `_ | .. tip:: 把工程配置的启动页面(pid)改为当前页面ID可以立即显示此页面。 | 播放视频 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. image:: image/视频/视频demo.png :align: center :alt: 视频demo | - 功能:播放一个视频,实现停止,播放,暂停,循环功能。滑块可以实时显示播放时间进度,拖动滑块可以改变视频播放进度。 - 原理:停止,播放,暂停,循环,改变播放进度视频功能通过控件属性值实现。显示播放时间通过定时器和滑块控件实现。 - 通过bl0、bl1、bl2和视频的播放完成事件实现停止,播放,暂停,循环功能 1、在bl0控件的 ``弹起事件`` 中编写以下脚本 .. code-block:: :linenos: v0.play =2; //设v0为暂停状态 bl0.txt.str = "播放";//设bl0的文本值为播 2、在bl0控件的 ``按下事件`` 中编写以下脚本 .. code-block:: :linenos: sl0.min=0; sl0.max=v0.atime; v0.play =1; //设v0为播放状态 bl1.val = 0;//设bl1为弹起状态 bl0.txt.str = "暂停";//设bl0的文本值为 暂停 3、在bl1控件的 ``按下事件`` 中编写以下脚本 .. code-block:: :linenos: v0.play =0; //设v0为停止状态 bl0.val = 0; //设bl0为弹起状态 bl0.txt.str = "播放";//设bl0的文本值为播放 4、在bl2控件的 ``弹起事件`` 中编写以下脚本 .. code-block:: :linenos: v0.loop = 0;//设v0为单次播放 bl2.txt.str = "单次";//设bl2的文本值为 单次 5、在bl2控件的 ``按下事件`` 中编写以下脚本 .. code-block:: :linenos: v0.loop = 1;//设v0为循环播放 bl2.txt.str = "循环";//设bl2的文本值为 循环 6、在v0控件的 ``播放完成事件`` 中编写以下脚本 .. code-block:: :linenos: bl0.val = 0; //设bl0为弹起状态 bl0.txt.str = "播放";//设bl0的文本值为播放 - 通过定时器和滑块实现进度显示和播放进度设置功能 1、在tm0控件的 ``定时器事件`` 中编写以下脚本 .. code-block:: :linenos: sl0.val=v0.time; 2、在sl0控件的 ``滑动事件`` 中编写以下脚本 .. code-block:: :linenos: v0.time=sl0.val;