Gst-nvvideo4linux2#
DeepStream 扩展了开源 V4L2 编解码器插件(此处称为 Gst-v4l2
),以支持硬件加速编解码器。

解码器#
OSS Gst-nvvideo4linux2 插件通过与 Jetson 和 DGPU 平台上的 libv4l2 插件接口,利用这些平台上的硬件解码引擎。它支持 H.264、H.265、AV1、JPEG 和 MJPEG 格式。该插件接受编码的比特流,并使用 NVDEC 硬件引擎解码比特流。解码后的输出可以是 NV12 或 YUV444 格式,具体取决于编码流内容。
注意
当您使用 v4l2 解码器解码 JPEG 图像时,必须在解码器之前使用开源 jpegparse 插件来解析编码的 JPEG 图像。
输入和输出#
输入
编码的比特流。支持的格式为 H.264、H.265、AV1、JPEG 和 MJPEG
H264 编码的比特流,8 位 4:2:0 格式。
H265 编码的比特流,8/10/12 位 4:2:0 和 8/10/12 位 4:4:4 格式。
AV1 编码的比特流,8 位 4:2:0 格式。
输出
H264 解码器输出 8 位半平面 (NV12) 4:2:0 格式的 GstBuffer。
H265 解码器输出 8/10/12 位半平面 (NV12) 4:2:0 格式,8/10/12 位平面 (YUV444) 4:4:4 格式的 GstBuffer。
AV1 解码器输出 8 位半平面 (NV12) 4:2:0 格式的 GstBuffer。
特性#
下表总结了 Gst-nvvideo4linux2 解码器插件的特性。
特性 |
描述 |
---|---|
支持 H.264 解码 |
h264 编码的比特流被解码为 8 位 NV12 |
支持 H.265 解码 |
h265 编码的比特流被解码为 8/10/12 位 NV12 或 8/10/12 位 YUV444,具体取决于流内容 |
支持 JPEG/MJPEG 解码 |
— |
用户可配置的 CUDA 内存类型(Pinned/Device/Unified)用于输出缓冲区 |
— |
注意
10/12 位 YUV444 格式支持仅适用于 x86/dGPU 平台。
此外,对于 12 位 NV12 格式,输出 caps 显示为 I420_12LE。但数据被视为半平面 12 位数据处理。这是一个权宜之计,因为 gstreamer v1.16 没有 12 位 NV12 的特定 caps。下游组件应将其视为 12 位 NV12 进行处理。
Gst 属性#
下表总结了 Gst-nvvideo4linux2 解码器插件的 Gst 属性。
属性 |
含义 |
类型和范围 |
示例/注释 |
平台 |
---|---|---|---|---|
capture-io-mode |
捕获 I/O 模式(匹配 src pad) (0): auto - GST_V4L2_IO_AUTO (2): mmap - GST_V4L2_IO_MMAP |
在 dGPU 上 枚举 “GstNvV4l2IOMode” 在 Jetson 上 枚举 “GstNvV4l2DecCaptureIOMode” |
默认值: 0 |
dGPU Jetson |
capture-buffer-dynamic-allocation |
设置为启用捕获缓冲区动态分配 (0): cap_buf_dyn_alloc_disabled - 禁用捕获缓冲区动态分配 (1): fw_cap_buf_dyn_alloc_enabled - 为向前播放启用捕获缓冲区动态分配 (2): rw_cap_buf_dyn_alloc_enabled - 为反向播放启用捕获缓冲区动态分配 (3): fw_rw_cap_buf_dyn_alloc_enabled - 为向前和反向播放启用捕获缓冲区动态分配 |
枚举 “CaptureBufferDynamicAllocationModes” |
默认值: 0 |
Jetson |
cudadec-memtype |
CUDA 解码器缓冲区的内存类型。 (0): memtype_device - 内存类型 Device (1): memtype_pinned - 内存类型 Host Pinned (2): memtype_unified - 内存类型 Unified |
枚举 “CudaDecMemType” |
默认值: 2 |
dGPU |
disable-dpb |
设置为禁用 DPB 缓冲区以实现低延迟 |
布尔值 |
默认值: false |
Jetson |
drop-frame-interval |
丢帧间隔,例如,值 5 表示解码器输出每第五帧,而其他帧被丢弃。 |
整数,1 到 30 |
默认值: 0 |
dGPU Jetson |
extract-sei-type5-data |
设置为提取并将 SEI type5 未注册数据附加到输出缓冲区 |
布尔值 |
默认值: false |
dGPU |
enable-error-check |
设置为启用错误检查 |
布尔值 |
默认值: false |
Jetson |
enable-frame-type-reporting |
设置为启用帧类型报告 |
布尔值 |
默认值: false |
Jetson |
enable-full-frame |
数据是否为完整帧 |
布尔值 |
默认值: false |
Jetson |
enable-max-performance |
设置为启用最大性能 |
布尔值 |
默认值: false |
Jetson |
gpu-id |
用于解码的 GPU 设备 ID。 |
整数 |
默认值:0 |
dGPU |
low-latency-mode |
为具有 I 和 IPPP 帧但没有 B 帧的比特流设置低延迟模式 |
布尔值 |
默认值: false |
dGPU |
mjpeg |
设置为打开 MJPEG 块 |
布尔值 |
默认值: false |
Jetson |
num-extra-surfaces |
V4L2 驱动程序给出的最小解码表面之外的额外表面数量。 |
整数,1 到 24 |
默认值: 0 |
dGPU Jetson |
output-io-mode |
输出侧 I/O 模式(匹配 sink pad) 在 dGPU 上 (0): auto - GST_V4L2_IO_AUTO (2): mmap - GST_V4L2_IO_MMAP (5): dmabuf-import - GST_V4L2_IO_DMABUF_IMPORT 在 Jetson 上 (0): auto - GST_V4L2_IO_AUTO (2): mmap - GST_V4L2_IO_MMAP (3): userptr - GST_V4L2_IO_USERPTR |
在 dGPU 上 枚举 “GstNvV4l2IOMode” 在 Jetson 上 枚举 “GstNvV4l2DecOutputIOMode” |
默认值: 0, “auto” |
dGPU Jetson |
sei-uuid |
为 SEI 解析设置 16 字节 UUID 字符串,extract-sei-type5-data 应为 TRUE |
字符串 |
默认值: null |
dGPU |
skip-frames |
解码期间要跳过的帧类型。 0 (decode_all): 解码所有帧 1 (decode_non_ref): 跳过非参考帧(仅适用于 Jetson 平台) 2 (decode_key): 解码关键帧 |
枚举 “SkipFrame” |
默认值: 0 |
dGPU Jetson |
编码器#
OSS Gst-nvvideo4linux2 插件通过与 Jetson 和 dGPU 平台上的 libv4l2 插件接口,利用这些平台上可用的硬件加速编码引擎。该插件接受 I420/NV12 或 YUV444 格式的原始数据。它使用 NVENC 硬件引擎对原始输入进行编码。编码后的输出为基本码流支持的格式。要设置适当的 tuning-info-id 和 preset-id 属性,请参阅 Nvidia 视频编解码器 SDK 文档:https://docs.nvda.net.cn/video-technologies/video-codec-sdk/11.1/nvenc-preset-migration-guide/index.html
输入和输出#
输入
I420/NV12 或 YUV444 格式的原始输入
8 位 I420/NV12 和 YUV444 原始格式
8/10 位 I420/NV12 和 YUV444 原始格式
输出
包含 H264、H265 和 AV1 格式编码输出的 Gst Buffer。
特性#
下表总结了 Gst-nvvideo4linux2 编码器插件的特性。
特性 |
描述 |
---|---|
支持 H.264 编码 |
8 位 I420/NV12、8 位 YUV444 原始格式可以编码为 h264 比特流 |
支持 H.265 编码 |
8/10 位 I420/NV12、8/10 位 YUV444 原始格式可以编码为 h265 比特流 |
注意
8/10 位 YUV444 格式支持仅适用于 x86/dGPU 平台。
Gst 属性#
下表总结了 Gst-nvvideo4linux2 编码器插件的 Gst 属性。
属性 |
含义 |
类型和范围 |
示例/注释 |
平台 |
---|---|---|---|---|
aq |
启用空间 AQ 并设置其强度 |
无符号整数,0-15 |
默认值: 0, “auto” |
dGPU |
bit-packetization |
数据包大小是否基于位数 |
布尔值 |
默认值: false |
Jetson |
bitrate |
设置编码的比特率,单位为比特/秒。 |
无符号整数 |
默认值: 4000000 |
dGPU Jetson |
capture-io-mode |
捕获 I/O 模式(匹配 src pad) (0): auto - GST_V4L2_IO_AUTO (2): mmap - GST_V4L2_IO_MMAP (5): dmabuf-import - GST_V4L2_IO_DMABUF_IMPORT |
枚举 “GstNvV4l2IOMode” |
默认值: 0, “auto” |
dGPU Jetson |
constqp |
为 I:P:B 帧设置恒定 QP 值 |
字符串,1 到 51 |
默认值: null |
dGPU |
copy-meta |
复制输出缓冲区上的输入元数据 |
布尔值 |
默认值: false |
dGPU |
copy-timestamp |
启用此标志允许将时间戳从输入复制到捕获流。 |
布尔值 |
默认值: false |
Jetson |
control-rate |
为 v4l2 编码设置码率控制模式 (0): variable_bitrate - GST_V4L2_VIDENC_VARIABLE_BITRATE (1): constant_bitrate - GST_V4L2_VIDENC_CONSTANT_BITRATE (2): constantQP - GST_V4L2_VIDENC_CONSTANT_QP |
枚举 “GstV4l2VideoEncRateControlType” |
|
dGPU Jetson |
cq |
为 VBR 模式设置 targetQuality(恒定质量)级别 |
整数,0-51 |
默认值: 0, “auto” |
dGPU |
disable-cabac |
设置熵编码类型 CAVLC(TRUE) 或 CABAC(FALSE) |
布尔值 |
默认值: false |
Jetson |
enable-lossless |
为 YUV444 启用无损编码 |
布尔值 |
默认值: false |
Jetson |
EnableMVBufferMeta |
为编码启用运动矢量元数据 |
布尔值 |
默认值: false |
Jetson |
EnableTwopassCBR |
在编码时启用两遍 CBR |
布尔值 |
默认值: false |
Jetson |
extended-colorformat |
在 VUI 信息中设置扩展的 colorformat 像素值 0 到 255 |
布尔值 |
默认值: false |
dGPU |
force-idr |
强制 IDR 帧 |
布尔值 |
默认值: false |
dGPU |
force-intra |
强制 INTRA 帧 |
布尔值 |
默认值: false |
dGPU |
gpu-id |
使用的 GPU 设备 ID。 |
无符号整数 |
默认值:0 |
dGPU |
idrinterval |
设置编码流中 IDR 帧出现的频率 |
无符号整数 |
默认值: 256 |
dGPU Jetson |
iframeinterval |
设置编码帧内帧出现的频率。 |
无符号整数 |
默认值: 30 |
dGPU Jetson |
initqp |
按 I:P:B 顺序设置 initQP 值。这为编码器提供了粗略的提示,以影响 I、P 和 B 之间的 qp 差异 |
字符串 |
默认值: null |
dGPU |
insert-aud |
插入 H.264 访问单元分隔符 (AUD) |
布尔值 |
默认值: false |
Jetson |
insert-sps-pps |
在每个 IDR 帧处插入 H.264 SPS、PPS |
布尔值 |
默认值: false |
Jetson |
insert-vui |
在 SPS 中插入 H.264 VUI(视频可用性信息) |
布尔值 |
默认值: false |
Jetson |
intra-refresh |
帧内刷新参数。使用字符串,其中包含 enableIntraRefresh、intraRefreshPeriod、intraRefreshCnt 的无符号整数值,顺序相同以设置属性。例如 1,30,5 |
字符串 |
默认值: null |
dGPU |
maxbitrate |
为 v4l2 编码器设置最大比特率。此模式通过将 rateControlMode 设置为 VBR 来指定 |
无符号整数 |
默认值: 0 |
dGPU |
maxperf-enable |
启用或禁用最大性能模式 |
布尔值 |
默认值: false |
Jetson |
MeasureEncoderLatency |
启用测量每个帧的编码器延迟 |
布尔值 |
默认值: false |
Jetson |
num-B-Frames |
两个参考帧之间的 B 帧数(不建议) |
无符号整数,0-2 |
默认值: 0 |
Jetson |
num-Ref-Frames |
编码器的参考帧数 |
无符号整数,0-8 |
默认值: 1 |
Jetson |
output-io-mode |
设置输出侧 I/O 模式(匹配 sink pad) (0): auto - GST_V4L2_IO_AUTO (2): mmap - GST_V4L2_IO_MMAP (5): dmabuf-import - GST_V4L2_IO_DMABUF_IMPORT |
枚举 “GstNvV4l2IOMode” |
默认值: 0, “auto” |
dGPU Jetson |
peak-bitrate |
可变码率控制中的峰值比特率。该值必须 >= 比特率(默认设置为 1.2*比特率)(默认值:0) |
无符号整数 |
默认值: 0 |
Jetson |
poc-type |
设置图片顺序计数类型值 |
无符号整数,0-2 |
默认值: 1 |
Jetson |
preset-id |
为编码器设置 CUVID 预设 ID |
无符号整数,1 到 7 |
默认值: 1 |
dGPU |
preset-level |
编码器的硬件预设级别。 (0): DisablePreset - 禁用硬件预设 (1): UltraFastPreset - 用于高性能的 UltraFastPreset (2): FastPreset - FastPreset (3): MediumPreset - MediumPreset (4): SlowPreset - SlowPreset |
枚举 “GstV4L2VideoEncHwPreset” |
默认值: 1, “UltraFastPreset” |
Jetson |
Profile |
H.264/H.265 编码器配置文件。 对于 H.264 (0): Baseline - GST_V4L2_H264_VIDENC_BASELINE_PROFILE (2): Main - GST_V4L2_H264_VIDENC_MAIN_PROFILE (4): High - GST_V4L2_H264_VIDENC_HIGH_PROFILE (7): High444 - GST_V4L2_H264_VIDENC_HIGH_444_PREDICTIVE 对于 H.265 (0): Main - GST_V4L2_H265_VIDENC_MAIN_PROFILE (1): Main10 - GST_V4L2_H265_VIDENC_MAIN10_PROFILE (3): FREXT - GST_V4L2_H265_VIDENC_FREXT_PROFILE |
枚举 “GstV4l2VideoEncProfileType” |
对于 H.264 默认值: 0 (Baseline) 对于 H.265 默认值: 0 (Main) |
dGPU Jetson |
属性 |
含义 |
类型和范围 |
示例/注释 |
平台 |
qp-range |
为 P、I 和 B 帧设置量化参数范围 |
字符串,1 到 51 |
默认值: null |
dGPU Jetson |
quant-b-frames |
B 帧的量化参数(0xffffffff=组件默认值),与 ratecontrol-enable = 0 和 preset-level = 0 一起使用 |
无符号整数,0 - 4294967295 |
默认值: 4294967295 |
Jetson |
quant-i-frames |
I 帧的量化参数(0xffffffff=组件默认值),与 ratecontrol-enable = 0 一起使用 |
无符号整数,0 - 4294967295 |
默认值: 4294967295 |
Jetson |
quant-p-frames |
P 帧的量化参数(0xffffffff=组件默认值),与 ratecontrol-enable = 0 和 preset-level = 0 一起使用 |
无符号整数,0 - 4294967295 |
默认值: 4294967295 |
Jetson |
ratecontrol-enable |
启用或禁用码率控制模式 |
布尔值 |
默认值: true |
Jetson |
slice-header-spacing |
Slice Header Spacing,一个数据包中的宏块/位数 |
无符号 64 位整数 |
默认值: 0 |
Jetson |
SliceIntraRefreshInterval |
设置 SliceIntraRefreshInterval |
无符号整数 |
默认值: 0 |
Jetson |
temporalaq |
设置为启用自适应量化(Temporal)。 |
布尔值 |
默认值: false |
dGPU |
tuning-info-id |
为编码器设置 Tuning Info 预设。 (1): HighQualityPreset - 高质量的 Tuning Preset (2): LowLatencyPreset - 低延迟的 Tuning Preset (3): UltraLowLatencyPreset - 低延迟的 Tuning Preset (4): LosslessPreset - 无损的 Tuning Preset |
枚举 “GstV4L2VideoEncTuingInfoPreset” |
默认值: 2 (LowLatencyPreset) |
dGPU |
vbvbufsize |
设置 VBV 缓冲区大小,单位为比特。 |
无符号整数 |
默认值: 0(编码器默认值) |
dGPU |
vbvinit |
设置 VBV 初始延迟,单位为比特 |
无符号整数 |
默认值: 0(编码器默认值) |
dGPU |
vbv-size |
虚拟缓冲区大小 |
无符号整数 |
默认值: 4000000 |
Jetson |