快捷导航
如何简单使用Jetson上的硬件解码器?
举报 使用道具
| 回复

共 2 个关于本帖的回复 最后回复于 2020-5-29 17:22

大米力 超级版主 发表于 2020-5-29 11:51 | 显示全部楼层
NVIDIA V4L2视频解码器说明和扩展。

视频解码器设备节点为

/dev/nvhost-nvdec

具体使用方法可参照:https://docs.nvidia.com/jetson/l4t-multimedia/group__V4L2Dec.html

米米米 版主 发表于 2020-5-29 17:22 | 显示全部楼层
大米力 发表于 2020-5-29 11:51
NVIDIA V4L2视频解码器说明和扩展。

视频解码器设备节点为

验证平台:Jetson AGX Xavier + Jetpack 4.4 DP

在Jetson平台上使用硬件编码器一共有三种方式:
        1. 直接使用deepstream:这种方式可以非常便利的体验硬件编码器的性能。并且由于deepstream使用了zero copy的pipeline,所以是目前您可以获得的最高性能的一个参考。
        2. 使用multimedia API:为了方便开发者进行开发,NV提供了底层API来对编解码直接进行控制。因此可以参考下列文档,来进行开发。您同样可以享受到硬件编解码的性能。https://docs.nvidia.com/jetson/l4t-multimedia/group__V4L2Dec.html

但是,使用deepstream需要适配gstreamer的框架,使用multimedia API需要大量处理底层操作,非常复杂而且扯蛋。完全无法称为"简单"。对于初学者来说应该尽量回避。

我们这里建议的是第三种方式:
        3. 使用opencv和gstreamer结合的方式。
        即用如下gstream pipeline来使用在
  1. gst-launch-1.0 -v rtspsrc location=rtsp://<你的h.265地址> ! rtph265depay ! h265parse ! nvv4l2decoder ! m.sink_0 nvstreammux name=m batch-size=1 width=1280 height=720 ! nvvideoconvert ! nvdsosd ! nvegltransform ! nveglglessink
复制代码

如果你用的是h.264的码流,则请把其中的265改成264。

这样你无论是使用python还是C++的程序,都可以直接使用其中的gstreamer pipeline,用到你的代码里面。
比如,代码可以参考以下的python代码,但是可以把其中的pipeline给替换掉。
https://gist.github.com/jkjung-a ... da19f7bfa3cb7d2690e

这样,你就可以在不改变自己代码的基础上,使用硬件解码器了。

当然,即使使用了硬件解码器,你仍然会遇到诸如图像格式变换等原因带来的性能问题,你还可以进一步参考如下链接,来进一步改善代码。总比完全换一个框架要容易多了。
https://www.e-consystems.com/Art ... igh_performance.asp
您需要登录后才可以回帖 登录 | 点我注册

精彩推荐

  • canbus与vcu相连接,出现bus-off状态
  • 有线连接失败
  • Apex 串口通讯
  • 关于SPI通信问题咨询
  • MIIVII APEX DUAL ORIN米文域控制器产品合

明星用户