Gst-nvvideo4linux2#

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

Gst-nvvideo4linux2

解码器#

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 解码器插件的特性。

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 属性。

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 编码器插件的特性。

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 属性。

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”

默认值: 1, “constant_bitrate”

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