Gst-nvdsmetautils#
gst-nvdsmetautils 包含 nvdsmetainsert 和 nvdsmetaextract 插件。以下是每个插件的详细说明、用途和用例。
Gst-nvdsmetainsert#
Gst-nvdsmetainsert 插件是一个 NvDsMeta 实用程序插件,它为单帧/批量音频/视频帧处理提供了一个自定义库挂钩接口。自定义库实现可以具有算法,用于根据用例序列化 NvDsBatchmeta 或在输入缓冲区上接收的自定义 gst 用户元数据。该插件接受批量音频/视频 NVMM HW 缓冲区,并根据用例输出缓冲区上具有序列化元数据的批量音频/视频 NVMM HW 缓冲区。

输入和输出#
输入
NVMM Gst 缓冲区。
控制参数
serialize-lib
输出
NVMM Gst 缓冲区,就地操作。
功能#
下表总结了该插件的功能。
Gst-nvdsmetainsert 功能# 功能
描述
发布版本
简化的 API
简化的接口,用于实现自定义库以添加任何算法,而无需实现新的插件
DS 6.1
轻松数据访问
在自定义库内部轻松访问 GstBuffer 及其元数据
DS 6.1
参考实现。
自定义库的参考实现提供了用于解码器、序列化和反序列化 NvDsBatchmeta 的序列化数据的实现。
DS 6.1
customlib_impl 接口#
serialize_data => 接受 GstBuffer,序列化输入元数据并将其作为 NvDsUserMeta / gst 元数据附加到同一 GstBuffer 上。
Gst 属性#
下表描述了 Gst-nvdsmetainsert 插件的 Gst 属性。
Gst-nvdsmetainsert gst 属性# 属性
含义
类型和范围
示例/注释
平台
serialize-lib
设置要使用的序列化库名称。
字符串
默认值:null
dGPU
用例和示例管道#
以下是两个参考实现,可以对其进行扩展以适应任何特定用例。
用例 1 - 将 CustomMeta 作为 SEI 数据附加到 H264 中
带有 sei_serialization 库的 nvdsmetainsert 插件作为 DS SDK 6.1 及更高版本的一部分发布,序列化输入元数据并将其作为 gst 元数据附加到同一缓冲区上,nv 编码器将此元数据嵌入到比特流中,类型为 SEI 未注册数据。
以下管道演示了 nvdsvideotemplate 插件生成虚拟边界框,并且此元数据由带有序列化库的 nvdsmetainsert 插件序列化。序列化元数据被 nv 编码器用于将其作为 SEI 未注册数据插入到 H264 比特流中。
export USE_NEW_NVSTREAMMUX=yes gst-launch-1.0 filesrc location=~/sample_720p.mp4 ! qtdemux ! h264parse \ ! nvv4l2decoder ! m.sink_0 nvstreammux name=m ! nvdsvideotemplate dummy-meta-insert=1 \ customlib-name=libcustom_videoimpl.so customlib-props="scale-factor:0.5" \ ! nvmultistreamtiler width=640 height=480 ! nvdsmetainsert serialize-lib = "libnvds_sei_serialization.so" \ ! nvv4l2h264enc bitrate=1000000 ! filesink location=~/ds_maxine_sei.h264 \ filesrc location=~/sample_720p.mp4 ! qtdemux ! h264parse ! nvv4l2decoder ! m.sink_1
用例 2 - 视频 NvDsBatchMeta 序列化
带有 nvds_video_meta_serialization 库的 nvdsmetainsert 插件作为 DS SDK 6.1 及更高版本的一部分发布,序列化 NvDsFrameMeta 和 NvDsObjectMeta 并作为 NvDsUserMeta 附加到同一缓冲区上的 NvDsFrameMeta 内部。
以下管道演示了带有序列化库的 nvdsmetainsert 插件序列化 NvDsFrameMeta 和 NvDsObjectMeta。序列化元数据被 nvdsmetaextract 插件用于反序列化和重新构建 NvDsFrameMeta 和 NvDsObjectMeta。
设置 CLEAR_NVDS_BATCH_META=yes 仅用于演示以下管道,在实际用例场景(如 RDMA 传输)中,不需要此标志。
export CLEAR_NVDS_BATCH_META=yes export USE_NEW_NVSTREAMMUX=yes gst-launch-1.0 filesrc location=~/sample_720p.mp4 ! qtdemux ! h264parse ! nvv4l2decoder \ ! m.sink_0 nvstreammux name=m ! nvvideoconvert ! nvinfer config-file-path= config_infer_primary.txt \ ! nvdsmetainsert serialize-lib = "libnvds_video_metadata_serialization.so" \ ! nvdsmetaextract deserialize-lib = "libnvds_video_metadata_serialization.so" \ ! nvmultistreamtiler width=1280 height=720 ! nvdsosd ! nveglglessink filesrc location=~/sample_720p.mp4 \ ! qtdemux ! h264parse ! nvv4l2decoder ! m.sink_1
用例 3 - 音频 NvDsBatchMeta 序列化
带有 nvds_audio_meta_serialization 库的 nvdsmetainsert 插件作为 DS SDK 6.1 及更高版本的一部分发布,序列化 NvDsAudioFrameMeta 并作为 NvDsUserMeta 附加到同一缓冲区上的 NvDsAudioFrameMeta 内部。
以下管道演示了带有序列化库的 nvdsmetainsert 插件序列化 NvDsAudioFrameMeta。序列化元数据被 nvdsmetaextract 插件用于反序列化和重新构建 NvDsAudioFrameMeta。
设置 CLEAR_NVDS_BATCH_META=yes 仅用于演示以下管道,在实际用例场景(如 RDMA 传输)中,不需要此标志。
export CLEAR_NVDS_BATCH_META=yes export USE_NEW_NVSTREAMMUX=yes gst-launch-1.0 \ filesrc location= ~/noise_44_1k_16bits.wav ! wavparse \ ! audioconvert ! audioresample ! "audio/x-raw, rate=(int)44100" ! queue \ ! m.sink_0 nvstreammux name=m batch-size=2 ! queue \ ! nvinferaudio audio-framesize=44100 audio-hopsize=11025 batch-size=2 \ config-file-path= config_infer_audio_sonyc.txt \ audio-transform="melsdb,fft_length=2560,hop_size=692,dsp_window=hann,num_mels=128,sample_rate=44100,p2db_ref=(float)1.0,p2db_min_power=(float)0.0,p2db_top_db=(float)80.0" \ ! nvdsmetainsert serialize-lib = "libnvds_audio_metadata_serialization.so" \ ! nvdsmetaextract deserialize-lib = "libnvds_audio_metadata_serialization.so" \ ! fakesink \ filesrc location= ~/noise_44_1k_16bits.wav ! wavparse \ ! audioconvert ! audioresample ! "audio/x-raw, rate=(int)44100" ! m.sink_1
Gst-nvdsmetaextract#
Gst-nvdsmetaextract 插件是一个 NvDsMeta 实用程序插件,它为单帧/批量音频/视频帧处理提供了一个自定义库挂钩接口。自定义库实现可以具有算法,用于根据用例反序列化 NvDsBatchmeta 或在输入缓冲区上接收的自定义 gst 用户元数据。该插件接受批量/非批量音频/视频 NVMM HW 缓冲区,并根据用例输出缓冲区上具有反序列化元数据的批量/非批量音频/视频 NVMM HW 缓冲区。

输入和输出#
输入
NVMM Gst 缓冲区。
控制参数
deserialize-lib
输出
NVMM Gst 缓冲区,就地操作。
功能#
下表总结了该插件的功能。
Gst-nvdsmetaextract 功能# 功能
描述
发布版本
简化的 API
简化的接口,用于实现自定义库以添加任何算法,而无需实现新的插件
DS 6.1
轻松数据访问
在自定义库内部轻松访问 GstBuffer 及其元数据
DS 6.1
参考实现。
自定义库的参考实现提供了用于解码器、序列化和反序列化 NvDsBatchmeta 的序列化数据的实现。
DS 6.1
customlib_impl 接口#
deserialize_data => 接受 GstBuffer,反序列化输入元数据并将其作为 gst 元数据附加 / 更新同一 GstBuffer 上的现有 NvDsBatchMeta。
Gst 属性#
下表描述了 Gst-nvdsmetaextract 插件的 Gst 属性。
Gst-nvdsmetaextract gst 属性# 属性
含义
类型和范围
示例/注释
平台
deserialize-lib
设置要使用的反序列化库名称。
字符串
默认值:null
dGPU
用例和示例管道#
以下是两个参考实现,可以对其进行扩展以适应任何特定用例。
用例 1:自定义元数据反序列化 H264 中的 SEI
Nv 解码器发送已解析的未注册类型的 SEI 数据,该数据是比特流内部的序列化元数据,带有 sei_serialization 库的 nvdsmetaextract 插件作为 DS SDK 6.1 及更高版本的一部分发布,反序列化此元数据并将其作为 gst 元数据添加到传出缓冲区中,下游插件可以根据用例使用此数据。
以下管道演示了解析比特流中序列化的 SEI 数据,将其作为 Gst 元数据附加到传出缓冲区,并在 nvdsmetaexract 插件中对其进行反序列化
gst-launch-1.0 filesrc location=~/ds_maxine_sei.h264 ! h264parse ! nvv4l2decoder extract-sei-type5-data=1 \ ! nvdsmetaextract deserialize-lib=libnvds_sei_serialization.so ! nveglglessink
用例 2:视频 NvDsBatchMeta 反序列化
上游组件发送带有序列化 NvDsFrameMeta 和 NvDsObjectMeta 的 GstBuffer,这些元数据作为 NvDsUserMeta 附加在 NvDsFrameMeta 内部,带有 nvds_video_meta_serialization 库的 nvdsmetaextract 插件作为 DS SDK 6.1 及更高版本的一部分发布,反序列化此 NvDsUserMeta 并重新构建 NvDsFrameMeta 和 NvDsObjectMeta 作为 NvDsBatchMeta 的一部分。
以下管道演示了带有序列化库的 nvdsmetainsert 插件序列化 NvDsFrameMeta 和 NvDsObjectMeta。序列化元数据被 nvdsmetaextract 插件用于反序列化和重新构建 NvDsFrameMeta 和 NvDsObjectMeta。
设置 CLEAR_NVDS_BATCH_META=yes 仅用于演示以下管道,在实际用例场景(如 RDMA 传输)中,不需要此标志。
export CLEAR_NVDS_BATCH_META=yes export USE_NEW_NVSTREAMMUX=yes gst-launch-1.0 filesrc location=~/sample_720p.mp4 ! qtdemux ! h264parse ! nvv4l2decoder \ ! m.sink_0 nvstreammux name=m ! nvvideoconvert ! nvinfer config-file-path= config_infer_primary.txt \ ! nvdsmetainsert serialize-lib = "libnvds_video_metadata_serialization.so" \ ! nvdsmetaextract deserialize-lib = "libnvds_video_metadata_serialization.so" \ ! nvmultistreamtiler width=1280 height=720 ! nvdsosd ! nveglglessink filesrc location=~/sample_720p.mp4 \ ! qtdemux ! h264parse ! nvv4l2decoder ! m.sink_1
用例 3 - 音频 NvDsBatchMeta 序列化
上游组件发送带有序列化 NvDsAudioFrameMeta 的 GstBuffer,该元数据作为 NvDsUserMeta 附加在 NvDsAudioFrameMeta 内部,带有 nvds_audio_meta_serialization 库的 nvdsmetaextract 插件作为 DS SDK 6.1 及更高版本的一部分发布,反序列化此 NvDsUserMeta 并重新构建 NvDsAudioFrameMeta 作为 NvDsBatchMeta 的一部分
以下管道演示了带有序列化库的 nvdsmetainsert 插件序列化 NvDsAudioFrameMeta。序列化元数据被 nvdsmetaextract 插件用于反序列化和重新构建 NvDsAudioFrameMeta。
设置 CLEAR_NVDS_BATCH_META=yes 仅用于演示以下管道,在实际用例场景(如 RDMA 传输)中,不需要此标志。
export CLEAR_NVDS_BATCH_META=yes export USE_NEW_NVSTREAMMUX=yes gst-launch-1.0 \ filesrc location= ~/noise_44_1k_16bits.wav ! wavparse \ ! audioconvert ! audioresample ! "audio/x-raw, rate=(int)44100" ! queue \ ! m.sink_0 nvstreammux name=m batch-size=2 ! queue \ ! nvinferaudio audio-framesize=44100 audio-hopsize=11025 batch-size=2 \ config-file-path= config_infer_audio_sonyc.txt \ audio-transform="melsdb,fft_length=2560,hop_size=692,dsp_window=hann,num_mels=128,sample_rate=44100,p2db_ref=(float)1.0,p2db_min_power=(float)0.0,p2db_top_db=(float)80.0" \ ! nvdsmetainsert serialize-lib = "libnvds_audio_metadata_serialization.so" \ ! nvdsmetaextract deserialize-lib = "libnvds_audio_metadata_serialization.so" \ ! fakesink \ filesrc location= ~/noise_44_1k_16bits.wav ! wavparse \ ! audioconvert ! audioresample ! "audio/x-raw, rate=(int)44100" ! m.sink_1