SkeyeARS 全景AR增强监视系统之cuda(cuvid)视频硬解码

SkeyeARS 全景AR增强监视系统之cuda(cuvid)视频硬解码

1、写在前面

前面我们已经了解关于视频硬解码的一些技术。

其中提到的 nvcuvid 则是 Nvidia GPU 硬解码的核心,并且是由官方提供支持,因此可以放心使用。


2、正文开始

NVDECODE API 支持的编解码器有:

MPEG-1
MPEG-2
MPEG4
VC-1
H.264 (AVCHD) (8 位)
H.265 (HEVC)(8 位、10 位和 12 位)
VP8
VP9(8位、10位和12位)
AV1 Main profile
Hybrid (CUDA + CPU) JPEG

解码器管道由三个主要组件组成:解复用器、视频解析器和视频解码器,这些组件不相互依赖,因此可以独立使用。

NVDECODE API 为 NVIDIA 视频解析器和 NVIDIA 视频解码器提供 API。

其中,NVIDIA 视频解析器纯粹是一个软件组件,如果需要,用户可以插入任何解析器来代替 NVIDIA 视频解析器(例如 FFmpeg 解析器)。

NVDECODE 视频解码器管道如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1kQueSpw-1649148749070)(./img/nvdecoder_pipeline.png)]

在高层次上,应遵循以下步骤来解码任何视频内容,使用 NVDECODEAPI

  • 1、创建一个 CUDA 上下文。

  • 2、查询硬件解码器的解码能力。

	使用 cuvidGetDecoderCaps()
  • 3、创建解码器实例。
	使用 cuvidCreateDecoder() 创建 CUvideodecoder 实例
  • 4、解复用内容(如 .mp4),这可以使用 FFMPEG 等第三方软件来完成。

  • 5、使用 NVDECODE API 提供的解析器或第三方解析器解析视频码流,比如 FFmpeg。

	从解复用器中提取的数据包使用 cuvidParseVideoData() 输入解析器。

	解析器在从内部同步创建解析器对象时触发注册的回调cuvidParseVideoData(),只要有序列变化或图片准备好被解码和/或显示。 如果回调返回失败,它将被传播cuvidParseVideoData() 到应用程序。

	解码结果与 CUVIDPICPARAMS 结构中的图片索引值相关联,

	这也是由解析器提供的。 这个图片索引稍后用于映射解码的帧到 CUDA 内存
  • 6、使用 VDECODE API 开始解码。
    调用 cuvidDecodePicture() 并将解码器句柄和指针传递给 CUVIDPICPARAMS 在 NVDEC 上开始解码。
  • 7、获取解码后的 YUV 进行进一步处理。
	用户需要调用 cuvidMapVideoFrame() 来获取 CUDA 设备指针和保存解码和后处理帧的输出表面。

	请注意 cuvidDecodePicture() 指示 NVDEC 硬件引擎启动帧/字段的解码。 

	但是 cuvidMapVideoFrame() 成功完成表示解码过程完成,解码后的YUV帧从 NVDEC 生成的格式转换为 CUVIDDECODECREATEINFO::OutputFormat 中指定的 YUV 格式。

	cuvidMapVideoFrame() API 将解码表面索引 (nPicIdx) 作为输入并将其映射到可用的输出表面之一,对解码帧进行后处理并复制到输出表面和返回 CUDA 设备指针和输出表面的相关间距。
  • 8、查询解码帧的状态。
	解码开始后,可随时调用 cuvidGetDecodeStatus() 进行查询该帧的解码状态。
  • 9、根据解码状态,使用解码后的输出进行进一步处理,例如渲染、推理、后处理等

  • 10、如果应用程序需要显示输出

    • 将解码的 YUV 表面转换为 RGBA。

    • 将 RGBA 表面映射到 DirectX 或 OpenGL 纹理。

    • 在屏幕上绘制纹理。

  • 11、解码过程完成后销毁解码器实例。

	用户需要调用 cuvidDestroyDecoder() 来销毁解码器会话并释放所有分配的解码器资源。
  • 12、销毁 CUDA 上下文。

3、结语

最后,我们的 SkeyeARS 实际上支持可配置视频 软解码/硬解码 的。

SkeyeARS 运行目录下 config/config.ini 中。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9GNElImZ-1649148749072)(./img/codec_config.png)]

其中:EasyPlayerProDecodeType 为直播解码选项,EasyPlayerDecodeType 则为录播解码选项。

配置为 0 选择软解码,配置为 1 选择硬解码。

8749072)]

其中:EasyPlayerProDecodeType 为直播解码选项,EasyPlayerDecodeType 则为录播解码选项。

配置为 0 选择软解码,配置为 1 选择硬解码。

关于SkeyeARS

SkeyeARS全景AR增强监视系统, 是视开科技开发的一款基于宽场景多路视频无缝拼接、视频实时增强、监视目标增强显示、目标自动跟踪、视频存储回放、远程数据传输和多通道全景视频同步显示等功能的综合视频AR增强监视系统,广泛应用于智慧交通、智慧城市、智慧机场等大场景智能监控领域。

详细说明:http://www.openskeye.cn/web/product/ars

获取更多信息

邮件:support@openskeye.cn

QQ交流群:102644504

SkeyeVSS综合安防互联网无插件播放解决方案

SkeyeARS全景AR增强监视系统解决方案

SkeyeIVMS集群式视频云管控平台解决方案

Copyright © OpenSKEYE Team 2018-2022