摄像头RTSP流硬解码

1. 问题分析

项目中,之前用的是OpenCV对摄像头的RTSP流进行解码。随着时间的推移以及业务摄像头的增加,发现十路流CPU就已经100%啦,很明显解码所占CPU资源较多,导致整个系统处理效率不高,解码成为系统的瓶颈,需要赶紧马上上硬解码才行。

查找资料并验证发现:OpenCV中VideoReader_GPU可以方便地利用GPU读取视频文件加速解码过程,但OpenCV中VideoReader_GPU无法读取rtsp视频流数据。CUVID中CuvideoSource不支持rtsp视频流数据,不能由rtsp地址创建VideoSource

硬解码跟计算机显卡有关,赶紧安装cuda_9.0.176_win10 .exe,然后找相关GUP加速相关厂商提供的加速解决方案Demo(C:\ProgramData\NVIDIA Corporation\CUDA Samples\v9.0\3_Imaging\cudaDecodeD3D9

cudaDecodeD3D9 Demo  CUVID中CuvideoSource不支持rtsp视频流数据,不能由rtsp地址创建VideoSource , 利用其他方式解析RTSP流

2.硬解码rtsp视频流

基本思路:跳过VideoSource模块,利用其他方式(FFmpeg)解析,我结合。

基本步骤:

1.利用FFmpeg解析rtsp视频流。(结合以上Demo就能够把关键部分抽出来,自己封装成DLL工程,方便后面程序使用)

2.创建VideoParser。

3.利用FFmpeg读取数据包(AVpacket)。

4.将数据包传输到VideoParser(AVpacket ---> CUVIDSOURCEDATAPACKET)。

5.VideoParser解码数据包。

6.转换解码后的数据(NV12 ---> RGBA)。

7.将RGBA数据显示出来。

VideoSource 读取数据包(AVpacket)并转换成 CUVIDSOURCEDATAPACKET 

VideoParse 用来解析得到一帧帧的数据。   VideoParser的回调函数:HandleVideoSequence() 创建解码器或重设解码器HandlePictureDecode() 解码每帧视频数据HandlePictureDisplay() 转换,处理,显示解码后的数据。

VideoDecoder 核心的硬件解码功能类,CUVIDDECODECREATEINFO oVideoDecodeCreateInfo_是创建解码信息结构体,CUvideodecoder oDecoder_是最内核的CUDA硬件解码器,VideoParser的解码功能实际上是在CUvideodecoder解码内核上封装实现的。

GPU 转换解码后的数据(NV12 ---> RGBA)--加载转换函数

3.测试

CPU降下来了,GPU用起来了。

测试发现对H265 H264 都可以成功解码

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值