菜单

视频和流的播放

下载

本说明介绍如何在 HMI 项目中播放视频、控制画面、截图和录像。

安装说明

安装/升级固件

将以下安装包解压至U盘根目录。U盘不要包含其他文件,U盘限制格式为Fat32,内存32G及以下

更新.zip

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"

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);

案例指南

示例获取

RTSPTest.zip

案例mp4素材获取

1.mp4

最近修改: 2026-10-28Powered by