Gst-nvmsgconv#
Gst-nvmsgconv 插件负责根据模式将元数据转换为消息负载。 DeepStream 5.0 支持模式的两种变体,完整和最小。 Gst-nvmsgconv 插件可以配置为使用其中一种模式。 默认情况下,该插件使用完整的 DeepStream 模式以 JSON 格式生成负载。 完整模式支持对象检测、分析模块、事件、位置、传感器和 3D 跟踪的详细语义。 每个负载都包含有关单个对象的信息。 您可以使用模式的最小变体与后端通信最少的信息。 这为从 DeepStream 传输到消息broker的负载提供了较小的 footprint。 每个负载都可以包含帧中多个对象的信息。
Gst-nvmsgconv 插件与底层 nvmsgconv
库接口,该库提供使用以下元数据类型生成负载的 API
NVDS_EVENT_MSG_META
(NvDsEventMsgMeta) 类型元数据作为帧元数据的用户元数据附加到缓冲区。 对于批处理缓冲区,帧的所有对象的元数据必须在相应的帧元数据下。 这是默认选项。通过解析 Gst 缓冲区中的
NVDS_FRAME_META
(NvDsFrameMeta) 类型和NVDS_OBJECT_META
(NvDsObjectMeta) 类型,以及这些元数据类型中的可用字段,用于基于模式类型创建消息负载。 要使用此选项,请设置 gst 属性msg2p-newapi
= true。
此 API 还支持为每个负载附加自定义用户消息 blob(JSON 格式的字符串),如果消息 blob 作为 NvDsFrameMeta 的用户元数据添加。 此外,使用此 API,您还可以使用另一个 gst 属性来设置生成每个负载的帧间隔。 frame-interval
= <interval>。 如果未设置,则生成帧的默认帧间隔为每 30 帧
在上述两种情况下,生成的负载 (NvDsPayload) 都作为 NVDS_PAYLOAD_META
类型用户元数据附加回输入缓冲区。
此外,Gst-nvmsgconv 插件提供可选属性:- debug-payload-dir
: 用于调试的负载转储目录的绝对路径 - multiple-payloads
: 生成多个消息负载

输入和输出#
输入
带有 NvDsEventMsgMeta 或 NvDsFrameMeta/NvDsObjectMeta 的 Gst 缓冲区
控制参数
config
msg2p-lib
payload-type
comp-id
debug-payload-dir (可选)
multiple-payloads (可选)
msg2p-newapi (可选)
frame-interval (可选)
输出
带有附加 NvDsPayload 元数据的相同 Gst 缓冲区。 此元数据包含有关插件生成的负载的信息。
特性#
下表总结了插件的特性。
特性 |
描述 |
发布版本 |
---|---|---|
JSON 格式的负载 |
消息负载以 JSON 格式生成 |
DS 3.0 |
支持 DeepStream 模式规范 |
消息的 DeepStream 模式规范实现 |
DS 3.0 |
自定义模式规范 |
为消息提供自定义模式 |
DS 3.0 |
用于静态属性的键值文件解析 |
以键值对的形式从文本文件中读取传感器/地点/模块的静态属性 |
DS 3.0 |
用于静态属性的 CSV 文件解析 |
从 CSV 文件中读取传感器/地点/模块的静态属性 |
DS 3.0 |
DeepStream 4.0.1 最小化模式 |
DeepStream 消息模式的最小变体 |
DS 4.0 |
新的 msgconv api |
支持直接使用 Gst 缓冲区帧和对象元数据生成 deepStream 消息模式负载(完整和最小) |
DS 6.0 |
负载生成间隔 |
设置生成负载的帧间隔 |
DS 6.0 |
Gst 属性#
下表描述了 Gst-nvmsgconv 插件的 Gst 属性。
属性 |
含义 |
类型和范围 |
示例 / 注释 |
平台 |
---|---|---|---|---|
config |
定义各种传感器、地点和模块的静态属性的配置文件的绝对路径名。 |
字符串 |
config=msgconv_config.txt 或 config=msgconv_config.csv |
dGPU Jetson |
msg2p-lib |
包含 nvds_msg2p_* 接口的自定义实现的库的绝对路径名,用于自定义负载生成。 |
字符串 |
msg2p-lib=libnvds_msgconv_custom.so |
dGPU Jetson |
payload-type |
要生成的模式负载的类型。 可能的值为 PAYLOAD_DEEPSTREAM:使用 DeepStream 模式的负载。 PAYLOAD_DEEPSTREAM_MINIMAL:使用最小 DeepStream 模式的负载。 PAYLOAD_CUSTOM:使用自定义模式的负载。 |
整数,0 到 4,294,967,295 |
payload-type=0 或 payload-type=257 |
dGPU Jetson |
comp-id |
要从中处理元数据的插件的组件 ID。 |
整数,0 到 4,294,967,295 |
comp-id=2 默认为 NvDsEventMsgMeta |
dGPU Jetson |
debug-payload-dir |
转储负载的目录 |
字符串 |
debug-payload-dir=<绝对路径> 默认为 NULL |
dGPU Jetson |
multiple-payloads |
生成多个消息负载 |
布尔值 |
multiple-payloads=1 默认为 0 |
dGPU Jetson |
msg2p-newapi |
使用 Gst 缓冲区帧/对象元数据生成负载 |
布尔值 |
msg2p-newapi=1 默认为 0 |
dGPU Jetson |
frame-interval |
生成负载的帧间隔 |
整数,1 到 4,294,967,295 |
frame-interval=25 默认为 30 |
dGPU Jetson |
dummy-payload |
默认情况下,如果 NVDS_EVENT_MSG_META 附加到缓冲区,则会生成负载。 使用此选项,如果没有 NVDS_EVENT_MSG_META 附加到缓冲区,也可以生成虚拟负载 |
布尔值 |
dummy-payload=true 默认为 false |
dGPU Jetson |
NvMsgConv 底层库 API#
Gst-nvmsgconv 插件与底层 nvmsgconv 库接口,该库提供用于负载生成的 API
nvds_msg2p_generate
使用NVDS_EVENT_MSG_META
(NvDsEventMsgMeta) 类型生成消息负载nvds_msg2p_generate_new
使用 GST 缓冲区(NVDS_FRAME_META
(NvDsFrameMeta) 和NVDS_OBJECT_META
(NvDsObjectMeta) 类型)生成消息负载
Deepstream 示例测试应用程序具有使用任一 API 生成消息负载的选项
deepstream-test4-app
使用命令行选项 –msg2p-meta 选择要创建负载的元数据类型。
0=Event Msg meta(默认), 创建 NVDS_EVENT_MSG_META 类型的元数据并附加到缓冲区
1=nvdsmeta, 使用 NvDsFrameMeta/NvDsObjectMeta 中的字段来填充负载
deepstream-test5-app
配置选项如下所示,默认选项使用 NvdsEventMsgMeta 创建负载
#(0): 使用 NvdsEventMsgMeta 创建负载
#(1): 使用 NvDsFrameMeta 创建负载的新 API
msg-conv-msg2p-new-api=0
对于使用 NVDS_EVENT_MSG_META
类型生成负载,用户需要
创建 NVDS_EVENT_MSG_META 类型的元数据并附加到缓冲区。
对不同类型的对象(例如,车辆、人员等)使用 NVDS_EVENT_MSG_META。
如果元数据通过“extMsg”字段扩展,则提供复制/释放函数。
而使用新的 NvMsgConv 底层库 API 生成负载,用户无需担心在其示例测试应用程序中创建/销毁任何负载对象。 nvmsgconv 底层库直接使用 GST 缓冲区(NVDS_FRAME_META
/ NVDS_OBJECT_META
)来创建负载。
模式自定义#
此插件可以通过两种方式用于实现自定义模式
通过修改负载生成器库:要执行 DeepStream 模式字段的简单自定义,请修改目录
sources/libs/nvmsgconv
内的底层负载生成库文件。 使用NVDS_EVENT_MSG_META
(NvDsEventMsgMeta) 类型生成的负载可以通过修改sources/libs/nvmsgconv/deepstream_schema/eventmsg_payload.cpp
进行自定义。 如果负载是使用 DS GST 缓冲区(NVDS_FRAME_META
(NvDsFrameMeta) 类型和NVDS_OBJECT_META
(NvDsObjectMeta) 类型)中的元数据生成的,则可以通过修改文件sources/libs/nvmsgconv/deepstream_schema/dsmeta_payload.cpp
来自定义负载生成。通过实现
nvds_msg2p
接口:如果需要将实现自定义模式的库与 DeepStream SDK 集成,请将库包装在nvds_msg2p
接口中,并将插件的 msg2p-lib 属性设置为库的名称。 将 payload-type 属性设置为PAYLOAD_CUSTOM
。
有关 nvds_msg2p
接口的示例实现,请参见 sources/libs/nvmsgconv/nvmsgconv.cpp
。
带有自定义对象的负载#
您可以将一组自定义对象添加到 NvDsEventMsgMeta
结构的 extMsg
字段中,并在 extMsgSize
字段中指定其大小。 元数据复制 (copy_func
) 和释放 (release_func
) 函数必须相应地处理自定义字段。 负载生成器库处理一些标准类型的对象(车辆、人员、面部等),并根据所选模式生成负载。 要处理自定义对象类型,您必须修改负载生成器库 nvmsgconv.cpp
。 有关将自定义对象作为 NVDS_EVENT_MSG_META
用户元数据添加到缓冲区以生成自定义负载并发送到后端的详细信息,请参见 deepstream-test4
。
如果使用 Deepstream GST 缓冲区(NVDS_FRAME_META
(NvDsFrameMeta) 类型和 NVDS_OBJECT_META
(NvDsObjectMeta) 类型)生成负载而不是 NvDsEventMsgMeta
,您可以使用 NVDS_CUSTOM_MSG_BLOB
类型将自定义消息 blob(字符串)附加到负载,方法是创建 NvDsCustomMsgInfo 对象并指定字段 message
(自定义消息 blob)和 len
(自定义消息的大小)。 底层负载生成库解析每个帧元数据并检查 NVDS_CUSTOM_MSG_BLOB
类型,如果存在,则将其附加到负载。 当 gst 属性 msg2p-newapi
= true 时,此选项可用(使用新的 msgconv API)。
与为 NvDsEventMsgMeta
结构生成自定义对象类似,请参阅 deepstream-test4
以获取有关添加自定义对象的详细信息,您可以使用元数据复制 (copy_func
) 和释放 (release_func
) 函数来处理自定义字段,并修改应用程序以使用 NVDS_CUSTOM_MSG_BLOB
(和 NvDsCustomMsgInfo 对象)类型而不是 NvDsEventMsgMeta
类型来附加自定义消息。