SkeyeRTSPLive高效转码之SkeyeVideoDecoder采用Nvidia独立显卡高效硬件解码解决方案(附源码)

SkeyeVideoDecoder是基于Nvidia独立显卡的硬解码库,利用CUDA提供高效解码能力,提升解码效率至少5-6倍,尤其适用于4K和8K视频。本文详细介绍了SkeyeNvDecoder的接口声明和解码流程,包括初始化、创建解码器、解码、停止解码及注销解码器的步骤。
摘要由CSDN通过智能技术生成

在我之前写的一篇文章《SkeyeRTSPLive传统视频监控互联网+实现利器解决方案》中提到RTSP转RTMP的转流过程,简化流程就是通过SkeyeRTSPClient拉RTSP流,获取音视频编码数据,然后再通过SkeyeRTMPPusher推出去,流程非常简单;然后再实际开发过程中,我们发现其实这个过程并没有想象中那么简单;首先,RTSP协议支持多种音视频编码格式,如音频支持AAC,G711,G726,等,视频支持H264,H625,MJPEG, MPEG等等各种格式,而SkeyeRTMPPusher推流只支持H264(已扩展支持H265)格式,这时,音频我们可以通过SkeyeAACEncoder将音频转码成AAC格式,而视频我们可以通过SkeyeVideoDecoder解码成原始数据,然后再通过SkeyeVideoEncoder将原始数据转码成RTMP推送指定的格式,本文,我们将重点讲述SkeyeVideoDecoder基于Nvidia(英伟达)独立显卡的解码流程。

SkeyeVideoDecoder基Nvidia独立显卡的硬解码库SkeyeNvDecoder

SkeyeNvDecoder库是基于Nvidia独立显卡驱动的硬件解码程序,该解码程序效率非常高效且具有强大的并行解码效能力,其解码效率比ffmpeg软件解码效率提到至少5-6倍,最新的RTX系列显卡其解码效率甚至比软解码高10-12倍,轻松解码多路4K乃至8K高清视频无压力,本文采用的是截止目前(20190714)最新的显卡驱动,CUDA版本需要10.0或者以上版本支持。

1. 接口声明如下:
#ifndef SKEYENVDECODERAPI_H
#define SKEYENVDECODERAPI_H

#include <string>

//++ typedefine start
#ifndef SKEYENVDECODER_HANDLE
#define SKEYENVDECODER_HANDLE void*
#endif//SKEYENVDECODER_HANDLE

typedef enum _OutputFormat //native=默认解码器输出为NV12格式
{
	native = 0, bgrp, rgbp, bgra, rgba, bgra64, rgba64
}OutputFormat;


typedef enum _SKEYENvDecoder_CodecType {
	SKEYENvDecoder_Codec_MPEG1 = 0,                                         /**<  MPEG1             */
	SKEYENvDecoder_Codec_MPEG2,                                           /**<  MPEG2             */
	SKEYENvDecoder_Codec_MPEG4,                                           /**<  MPEG4             */
	SKEYENvDecoder_Codec_VC1,                                             /**<  VC1               */
	SKEYENvDecoder_Codec_H264,                                            /**<  H264              */
	SKEYENvDecoder_Codec_JPEG,                                            /**<  JPEG              */
	SKEYENvDecoder_Codec_H264_SVC,                                        /**<  H264-SVC          */
	SKEYENvDecoder_Codec_H264_MVC,                                        /**<  H264-MVC          */
	SKEYENvDecoder_Codec_HEVC,                                            /**<  HEVC              */
	SKEYENvDecoder_Codec_VP8,                                             /**<  VP8               */
	SKEYENvDecoder_Codec_VP9,                                             /**<  VP9               */
	SKEYENvDecoder_Codec_NumCodecs,                                       /**<  Max codecs        */
} SKEYENvDecoder_CodecType;

typedef enum _SKEYENvDecoder_YUVType {

	// Uncompressed YUV
	SKEYENvDecoder_YUV420 = (('I' << 24) | ('Y' << 16) | ('U' << 8) | ('V')),   /**< Y,U,V (4:2:0)      */
	SKEYENvDecoder_YV12 = (('Y' << 24) | ('V' << 16) | ('1' << 8) | ('2')),   /**< Y,V,U (4:2:0)      */
	SKEYENvDecoder_NV12 = (('N' << 24) | ('V' << 16) | ('1' &l
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SwordTwelve

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值