概述
qtimetamux 元素是支持 AI 的 GStreamer 流水线的核心组件。它的作用是将后处理的 AI/CV 结果与原始媒体缓冲区同步,并使用 GStreamer 提供的标准元数据机制将这些结果作为 GstMeta 附加。 在实践中,ML 后处理阶段生成的输出——例如:- 边界框坐标
- 类别标签
- 分割掩码
- 关键点
- 运动矢量
- 其他自定义 AI/CV 元数据
- 实时可视化——元数据可以被
qtivoverlay等叠加元素消费,将边界框、标签和其他推理结果直接渲染到视频输出上。 - 级联 AI 流水线——携带元数据的缓冲区可以传递给后续的推理阶段,实现一个模型的输出馈入下一个模型的多阶段 AI 工作流。
- 应用层访问——生成的缓冲区可以发送到
appsink,使自定义应用程序能够访问媒体帧及其附加的元数据,用于业务逻辑或决策。 - 元数据序列化与外部集成——元数据可以转发给
qtimlmetaparser,后者将其转换为 JSON。该 JSON 随后可以通过qtiredissink发布到外部系统,例如 MQTT、Kafka 或 REDIS 服务器。
示例流水线
1
下载所需文件
2
将文件复制到设备
3
连接到设备
4
设置环境变量
在设备上运行以下命令
5
运行流水线
层次结构
GObjectGstObject
GstElement
qtimetamux
Pad 模板
sink
src
元素属性
主缓冲区、元数据同步与延迟控制
该插件设计有一个接收主视频或音频缓冲区的单一主 sink pad,以及多个收集 ML 后处理结果或 CV 运动矢量的辅助数据 pad。到达辅助 pad 的数据可以以字符串或 blob 形式提供,并被解析为结构化表示。解析后,插件将每个数据缓冲区与其对应的主媒体帧匹配,并将结果作为 GstMeta 附加。异步模式
这是默认的同步模式。不执行基于时间戳的匹配。相反,元数据缓冲区以严格的 1:1 顺序与主帧关联:- 第 N 个传入的视频/音频帧被保持,直到在所有数据 pad 上都收到第 N 个数据缓冲区。
- 一旦该帧所需的所有数据可用,即附加元数据。
- 然后将增强后的缓冲区推送到下游。
同步模式
在同步模式下,插件执行基于时间戳的同步。每个传入的主帧最多保持1 / framerate 秒(视频)或 1 / rate 秒(音频)的有限时间窗口。例如,在 30 fps 时,帧可能被保持约 33.3 毫秒。
在此保持期间,插件在其辅助 pad 上等待时间戳与主帧时间戳匹配的数据缓冲区:
- 如果所有预期的数据缓冲区在时间窗口内到达,则在转发之前附加它们。
- 如果一个或多个辅助 pad 未能及时提供匹配的缓冲区,则仅附加成功匹配的元数据,并将主缓冲区释放到下游。
延迟控制
在某些用例中,同步模式下的默认保持时间可能太短——尤其是在元数据生成耗时超出预期时。latency 属性通过接受以纳秒为单位的整数值来延长等待时间,允许插件在转发主帧之前为迟到的数据缓冲区等待更长时间。
用法
人员检测
1
下载所需文件
如果任何下载的文件是
.zip 压缩包,请在复制之前在主机上解压:
unzip filename.zip2
将文件复制到设备
3
连接到设备
4
设置环境变量
在设备上运行以下命令
5
运行流水线
检测-分类级联流水线
此流水线演示了一种级联推理方法,其中一个模型(检测)的输出用于裁剪感兴趣区域(ROI),然后将其馈入辅助模型(分类)。1
下载所需文件
2
将文件复制到设备
3
连接到设备
4
设置环境变量
在设备上运行以下命令
5
运行流水线

