本说明介绍如何在 HMI 项目中播放视频、控制画面、截图和录像。
安装说明
安装/升级固件
将以下安装包解压至U盘根目录。U盘不要包含其他文件,U盘限制格式为Fat32,内存32G及以下
U盘根目录下包含以下内容

将U盘插到屏上,屏幕会自动下载固件,等待更新即可
使用前提
使用前提与视频要求
使用前,请根据视频分辨率设置 MMA:
| 播放内容 | MMA 设置 | 使用说明 |
|---|---|---|
| 1080P 流媒体或本地视频 | 44 | 1080P 主码流最多同时播放一路,最高支持 1920×1080 |
| 720P 及以下的视频或辅码流 | 24 | 日常使用建议优先选择辅码流,减少资源占用 |
设置示例:
Util::setMmaSize(44); // 播放 1080P 视频
或:
Util::setMmaSize(24); // 播放 720P 及以下的视频或辅码流
播放本地 1080P 视频前,请将视频转换为以下规格:
- 编码: H.264,Baseline,Level 4.0。
- 画面: 1920×1080,24 帧/秒,8 位 YUV420P。
- 压缩设置: 关闭 B 帧,参考帧设为 1,关键帧间隔设为 48 帧。
- 画质与码率: CRF 23,最大码率 4 Mbps,缓冲区 8 Mb。
- 音频: 移除音频,仅保留视频画面。
本视频可以同时播放4路视频流,播放视频流之前,需要先手动测试该摄像头是否能正常显示,日常播放摄像头画面,建议优先使用 720P 及以下的辅码流
API说明
在需要使用视频功能的文件中包含:
#include "HmiVideo.h"


基本调用顺序如下:
| 使用时机 | 调用内容 |
|---|---|
| 应用启动 | video_start(),初始化一次 |
| 进入视频页面 | video_play(...),开始播放 |
| 点击功能按钮 | 调用截图、录像等接口 |
| 离开视频页面 | 按需要停止录像和播放 |
| 应用退出 | 先确认停止操作完成,再调用 video_shutdown() |
下面的代码分别放在对应事件中,不能全部放在一个按钮里连续执行。
初始化视频
如果使用视频 请将该启动放在HmiApp.cpp的onReady函数里面
/********************************
*
* 构建应用后调用此函数
*
* 注意:用户可添加代码
*
********************************/
void HmiApp::onReady(){
Util::setMmaSize(44);
// 立即返回,服务启动和后续命令由封装内部按顺序执行。
video_start();
}
/********************************
*
* 应用退出前调用此函数
*
* 注意:用户可添加代码
*
********************************/
void HmiApp::onQuit(){
video_shutdown();
}
播放视频
播放之前 需要将 视频的位置设置成以下格式
坐标 x y必须是偶数 视频 w大于 0,且是 32 的倍数 h为偶数
video_play(1, "rtsp://user:password@192.168.1.10:554/stream",32, 88, 960, 500,0);
这表示:使用第 1 路通道,在屏幕坐标 (32, 88) 的位置播放视频,画面宽 960、高 500,不旋转。
常用参数说明
| 参数 | 通俗说明 | 填写要求 |
|---|---|---|
channel |
第几路视频 | 1~4,单路通常填 1 |
url |
视频地址 | RTSP 地址、存储设备文件地址或允许的板端绝对路径 |
x、y |
画面左上角的位置 | 非负偶数,单位为像素 |
width |
画面显示宽度 | 大于 0,且为 32 的倍数 |
height |
画面显示高度 | 大于 0,且为偶数 |
rotation |
顺时针旋转角度 | 0、90、180、270,默认 0 |
播放指定视频文件
//u盘下1.mp4文件
//指定路径
video_play(1, "/vendor/udisk_sda1/1.mp4", 32, 88, 960, 500);
//自动路径
video_play(1, "storage://usb/1.mp4", 32, 88, 960, 500);
//sd卡下1.mp4文件
//指定路径
video_play(1, "/vendor/sd/1.mp4", 32, 88, 960, 500);
//自动路径
video_play(1, "storage://sd/1.mp4", 32, 88, 960, 500);
停止视频
// 停止一路视频
video_stop(1);
// 停止所有视频
video_stop_all();
刷新视频
先停止指定通道,停止成功后,再按给定参数重新播放。
video_refresh(1,"rtsp://user:password@192.168.1.10:554/stream",32, 88, 960, 500, 0);
视频截图
video_snapshot(1);
表示对第 1 路截图,自动选择保存位置,不添加文字。
完整调用方式:
// 保存到U盘
video_snapshot(1, "设备运行正常", "usb", 24, "bottom");
// 保存到SD卡
video_snapshot(1, "设备运行正常", "sd", 24, "bottom");
| 参数 | 含义 |
|---|---|
1 |
对第 1 路截图 |
"设备运行正常" |
图片上的文字,填 "" 表示不加文字 |
"usb" |
保存到 U 盘 sd卡为“sd” 默认为“” |
24 |
字号,范围 12~96 |
"bottom" |
文字放在底部,"top" 表示顶部 |
文字使用 UTF-8 编码,最多 512 字节,可以用 \n 换行。默认字号为 24,位置为底部。
文字只出现在保存的 JPEG 图片上,不会加到实时画面或录像里。
截图请求成功,不代表图片已经保存完成,需要等待至少一分钟之后再拔除U盘。
录像接口
开始录像
//U盘
video_record_start(1, "usb", 60, 100);
//sd卡
video_record_start(1, "sd", 60, 100);
表示:录制第 1 路,保存到 U 盘,每段目标时长 60 秒,最多保留 100 段。
| 参数 | 默认值 | 允许范围 |
|---|---|---|
| 保存位置 | "auto" |
"auto"、"usb"、"sd" |
| 每段目标时长 | 60 秒 | 10~3600 秒 |
| 最多保留段数 | 100 段 | 2~10000 段 |
使用默认参数时:
video_record_start(1);
录像前,需要先播放 RTSP 视频,或者通过 video_set_source() 配置 RTSP 视频源。
录像保存的是原始码流,格式为 MPEG-TS,不重新编码。实际分段需要等待视频关键帧,因此每段时长可能略有差异。
录像文件通常位于存储设备的 HMI_RECORD/CH01/ 等通道目录,实际路径以服务结果为准。
停止录像
//停止第 1 路录像,播放显示由播放接口单独控制。
video_record_stop(1);
//停止全部录像
video_record_stop_all();
其他常用接口
//video_set_source():设置视频地址
video_set_source(1,"rtsp://user:password@192.168.1.10:554/stream");
//video_set_rect():修改画面位置和大小--不更换视频地址,只调整显示区域。
video_set_rect(1, 32, 88, 640, 360);
//video_set_rotation():旋转画面--表示将第 1 路画面顺时针旋转 90°,不影响其他通道。
video_set_rotation(1, 90);
//video_hide():暂时隐藏画面--隐藏后,视频连接和解码仍在运行,仍会占用解码资源。
video_hide(1);
//video_show():恢复隐藏的画面--用于恢复被 video_hide() 隐藏的画面。如果已经调用 video_stop(),需要用 video_play() 重新播放。
video_show(1);
案例指南
示例获取
案例mp4素材获取