CN105228000A - 一种基于gpu的完全硬件转码的方法和系统 - Google Patents
一种基于gpu的完全硬件转码的方法和系统 Download PDFInfo
- Publication number
- CN105228000A CN105228000A CN201510621107.2A CN201510621107A CN105228000A CN 105228000 A CN105228000 A CN 105228000A CN 201510621107 A CN201510621107 A CN 201510621107A CN 105228000 A CN105228000 A CN 105228000A
- Authority
- CN
- China
- Prior art keywords
- matrix
- gpu
- new
- video
- data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/40—Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
- H04N21/43—Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
- H04N21/44—Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream, rendering scenes according to MPEG-4 scene graphs
- H04N21/4402—Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream, rendering scenes according to MPEG-4 scene graphs involving reformatting operations of video signals for household redistribution, storage or real-time display
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/40—Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
- H04N21/43—Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
- H04N21/44—Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream, rendering scenes according to MPEG-4 scene graphs
- H04N21/4402—Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream, rendering scenes according to MPEG-4 scene graphs involving reformatting operations of video signals for household redistribution, storage or real-time display
- H04N21/440218—Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream, rendering scenes according to MPEG-4 scene graphs involving reformatting operations of video signals for household redistribution, storage or real-time display by transcoding between formats or standards, e.g. from MPEG-2 to MPEG-4
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/40—Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
- H04N21/43—Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
- H04N21/44—Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream, rendering scenes according to MPEG-4 scene graphs
- H04N21/4402—Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream, rendering scenes according to MPEG-4 scene graphs involving reformatting operations of video signals for household redistribution, storage or real-time display
- H04N21/440263—Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream, rendering scenes according to MPEG-4 scene graphs involving reformatting operations of video signals for household redistribution, storage or real-time display by altering the spatial resolution, e.g. for displaying on a connected PDA
Abstract
本申请涉及一种基于GPU的完全硬件转码的方法和系统。具体而言,本申请的方法和系统是在原本NVENC的基础上,借助OPENCV封装的CUVID进行硬件解码,然后在显存里使用新开发的转码逻辑进行转码计算,最后使用NVENC的编码器进行编码,从而实现完整的纯GPU硬件转码过程。
Description
技术领域
本专利涉及到流媒体视频转码技术,尤其是针对一种基于GPU的对具有H.264、MPEG-2编码格式的视频数据进行完全硬件转码生成H.264编码格式的视频以减少CPU占用率的方法和系统。
背景技术
2007年,NVIDIA公司推出了CUDA(ComputeUnifiedDeviceArchitecture)框架以及CUDAC语言,将传统的GPU通用计算(GPGPU)推向一个新的高峰。传统的GPU通用计算是通过“欺骗”GPU与显存的渲染过程,来借助显卡的强大并行处理矩阵型数据的能力达到通用计算的目的。这一过程既不直观,也很费力,很难得到较好的推广。而CUDA框架的出现,使GPGPU编程变得类似普通高级语言编程,使开发者可以便利使用GPU的强大并行运算能力。具体而言,CUDA框架是一个新的基础架构,这个架构可以使用GPU来解决商业、工业以及科学方面的复杂计算问题。它是一个完整的GPGPU解决方案,提供了硬件的直接访问接口,而不必像传统方式一样必须依赖图形API接口来实现GPU的访问。在架构上采用了一种全新的计算体系结构来使用GPU提供的硬件资源,从而给大规模的数据计算应用提供了一种比CPU更加强大的计算能力。CUDAC采用C语言作为编程语言提供大量的高性能计算指令开发能力,使开发者能够在GPU的强大计算能力的基础上建立起一种效率更高的密集数据计算解决方案。
GPU极为擅长处理大型矩阵型或类矩阵型数据的整体变换或计算,在当时,借助GPU的计算能力可以达到CPU效率的数倍甚至数十倍。尽管在现在随着CPU的进一步发展,GPU的压倒性优势有所衰减,但其强大依然不容小视。
而视频转码技术是指将已经压缩编码的视频码流转换成另一个视频码流,以适应不同的网络带宽、不同的终端处理能力和不同的用户需求。随着互联网技术的发展,越来越多的视频被广泛传播到各种播放设备上,例如个人计算机、笔记本、电视机、MP4播放器、平板和手机等等。这些设备通常安装了各种不同的操作系统或播放软硬件,分别支持不同格式的视频流。这就很容易导致用户所获得的视频的格式可能并不能直接被其持有的播放设备所支持。而随着技术的进步,各种新的视频编码技术被不断推出,这也导致老的设备可能并不支持最新的视频格式。因此,为了解决上述问题,视频转码技术正变得日益重要。所述视频转码技术本质上是一个先对原始格式的视频进行解码,随后将其转码成所需的格式,再以新的视频编码标准对其进行编码的过程。对于高效的视频文件转码需求,视频文件的每一帧都是一幅图像,而图像是完美的矩阵型数据,因此,借助GPGPU进行GPU硬件视频转码,从而在效率上超越传统的纯CPU视频转码就成了一个很自然的思路。
NVIDIA伴随着CUDA,也发布了视频的解码与编码工具开发包,解码工具为NVCUVID(简称CUVID),编码工具为NVENC。乍看之下,CUVID+NVENC已经可以完成GPU视频转码,而且新版本的FFMPEG中已经增加了对NVENC的支持,但经代码分析和运行测试,可以发现:NVENC包含转码计算(包含转码率计算)和编码器两个部分,其中转码部分的计算依旧在CPU里完成,并非真正的纯GPU硬件转码——FFMPEG也是如此。另一个常见的商业转码软件WOWZA也不是纯GPU硬件转码,它们都采用了“GPU解码,取回内存,CPU转码,推送显存,GPU编码”的方式,这一方式对CPU和内存资源消耗依旧很大,同时,在转码过程中,数据在内存和显存之间的来回过程消耗了大量的系统时间,而且转码计算并没有充分利用GPU的计算能力。因此,现有的NVENC和应用NVENC的诸如FFMPEG、WOWZA之类的转码软件均不是严格意义上的完全基于GPU的硬件转码。
因此,为了提高视频转码效率,存在期望能够提供一种基于GPU的完全硬件转码的方法和系统的需求。
发明内容
本申请的方法和系统是在原本NVENC的基础上,借助OPENCV封装的CUVID进行硬件解码,然后在显存里使用新开发的转码逻辑进行转码计算,最后使用NVENC的编码器进行编码,从而完成完整的纯GPU硬件转码过程。
在本申请的一个方面,提供了一种基于GPU的完全硬件转码的方法,其特征在于,包括:GPU转码器从显存中读取经GPU解码器解码的YUV4:4:4格式的视频帧数据;将所述视频帧数据拆分成Y、U、V三个通道的独立矩阵;对于Y矩阵,通过转换分辨率形成新Y矩阵;对于U矩阵和V矩阵,按YUV4:2:0格式转换分辨率分别形成新U矩阵和新V矩阵,并且将所述新U矩阵和新V矩阵合并成双通道的UV矩阵;将所述新Y矩阵的数据和所述双通道的UV矩阵的数据分别复制到待编码的显存中;以及GPU编码器对从所述待编码的显存中读取的所述新Y矩阵的数据和所述双通道的UV矩阵的数据进行编码以生成输出的视频文件。
在本发明的另一个方面,提供了一种基于GPU的完全硬件转码的系统,其特征在于,包括:GPU解码器,配置为将来自存储器或数据源的视频帧数据解码成YUV4:4:4格式的视频帧数据并将其写入到显存中;GPU转码器,配置用于执行下述操作:从所述显存中读取经所述GPU解码器解码的YUV4:4:4格式的视频帧数据;将所述视频帧数据拆分成Y、U、V三个通道的独立矩阵;对于Y矩阵,通过转换分辨率形成新Y矩阵;对于U矩阵和V矩阵,按YUV4:2:0格式转换分辨率分别形成新U矩阵和新V矩阵,并且将所述新U矩阵和新V矩阵合并成双通道的UV矩阵;将所述新Y矩阵的数据和所述双通道的UV矩阵的数据分别复制到待编码的显存中;以及GPU编码器,配置为对从所述待编码的显存中读取的所述新Y矩阵的数据和所述双通道的UV矩阵的数据进行编码以生成输出的视频文件。
一个或多个实施例的详情在附图及以下描述中阐述。通过阅读以下详细描述并查阅相关联的附图,其它特征和优点将是显而易见的。应该理解,下述详细的描述仅是说明性的,而不是对所要求保护的发明的限制。
附图说明
为让本申请的上述目的、特征和优点能更明显易懂,以下结合附图对本申请的具体实施方式作详细说明,其中:
图1是根据本申请的实施例的系统硬件结构示意图。
图2是根据本申请的实施例的GPU转码器工作流程图的理论层面示意图。
图3是根据本申请的实施例的GPU转码器工作流程图的实践层面示意图。
具体实施方式
在现有GPU转码技术中的“解码-转码-编码”计算链中,转码步骤的实现依旧是在GPU对视频帧数据解码之后将所解码的视频帧数据从显存取回到内存中,然后使用CPU完成转码计算后,再从内存将所述转码后的数据推送至显存,再由GPU进行后续的编码操作。这一转码过程中,数据在显存与内存之间多了一个来回传输的过程,耗费了大量的系统时间,同时也无法彻底降低视频转码处理的CPU占用率,也没有充分利用GPU的计算能力。
因此,本申请的方法和系统的目的即是设法让“解码-转码-编码”这三个核心步骤全部在GPU及显存里完成,省去转码步骤在显存与内存之间的数据传输的系统耗时,并通过极大化使用GPU的计算能力来相应地降低CPU占用率,使得所述视频转码处理的整个过程都可以不依赖于CPU的使用,实现真正意义上的完全硬件转码。
具体而言,在现有的开源库OPENCV中,封装了一定程度的GPU、图像、视频处理的类与函数,但这些远不足以直接完成GPU转码,特别是对于H.264编码需要的YUV4:2:0格式,现有的OPENCV中的GPU模块没有提供直接支持。针对现有的OPENCV中的所述缺陷,本申请提供了创新的GPU转码逻辑来执行传统的在CPU中进行的转码计算。当然,对于逻辑实现过程中可用OPENCV函数和NVENC原有结构实现的步骤,本申请则还是调用了相应的原有函数。
在本申请的方案中,通过利用创新的GPU转码逻辑来使得GPU支持YUV4:2:0格式以实现GPU对YUV4:2:0格式的转码计算,使视频帧数据不需要再在GPU解码后从显存取回内存以供CPU转码计算,而是可以继续留在显存中直接经由GPU进行转码计算,并因此也取消了原本在CPU转码计算后将帧数据从内存再推回显存的步骤,而是直接将显存中转码好的数据送至GPU编码工具进行编码,即可完成完整的GPU转码流程。
经实测,本申请的方法的转码速度比纯CPU转码方法提升了3到5倍,比现在正在使用的CPU+GPU的转码方案快1.5到3倍。同时,使得CPU占用率也大大下降,实现了系统时间的节省,CPU占用率的下降和整体转码效率的提高等改进。
现在就开始讨论本申请的具体方案。在本申请中将整个转码系统和方法及其所必须的前导与后续步骤,即完整的对具有H.264、MPEG-2编码格式的视频转码过程,将其实现为一个系统工程,称为WSNVENC。其中,所述MPEG-2、H.264编码格式可被目前的GPU解码器支持并且解码后生成YUV4:4:4格式,但所述示例的编码格式并非限制性的,实际上,本申请的WSNVENC所支持的格式取决于GPU自身支持的视频格式。所述WSNVENC的核心贡献如图3所示在解码-转码-编码的计算链中的转码过程中。
在下面的讨论中,先结合图1中的系统硬件结构示意图对所述WSNVENC系统的基本工作流程进行概述。
首先,在所述WSNVENC系统100的工作过程中,首先,将从存储器或数据源110中读取输入视频文件的视频帧数据读取到内存中。所述存储器包括例如硬盘、光盘、U盘、磁盘等计算机可读存储介质,而所述数据源则包括例如在局域网、广域网、因特网上通过有线或无线网络与WSNVENC系统进行数据通信的服务器、客户机、个人终端等计算设备,以及通过有线或无线连接与WSNVENC系统相连的诸如照相机、摄像机(头)等视频捕捉设备。所述视频文件包括GPU解码器能够支持的编码格式的视频文件。具体而言,由于CUVID所支持的视频编码格式限制,目前仅支持MPEG2和H.264格式的视频文件。
接着,所述WSNVENC系统通过GPU解码器120(即OPENCV封装的CUVID工具)直接读取在内存中存储的所述视频帧数据并将其写入到显存中。
随后,利用OPENCV封装的CUVID工具对显存中的视频帧数据进行解码。如本领域技术人员所熟知的,这种解码操作是利用GPU的硬件资源来进行的硬件解码操作,在本申请中就不再对其进行详述。通过所述GPU硬件解码,获得了经解码的YUV4:4:4格式的视频帧数据并将其保存在显存中。与传统的CUDA转码技术不同的是,在本申请中,此视频帧数据不用再被取回到内存中以供CPU处理,而是直接从显存中被送入WSNVENC系统专门编写的GPU转码器(WSNVENC工具130)。
WSNVENC系统的GPU转码器130在显存中完成视频帧数据的转码计算,所述转码计算主要涉及从YUV4:4:4格式到YUV4:2:0格式的转化和相应的转换分辨率的计算(转码过程中必备的转码率计算可以使用在CUDA所提供的现有NVENC中的转码率计算方案来获得,因此不需要WSNVENC额外实现),经过GPU转码器转码后得到的YUV4:2:0格式的视频帧数据保留在显存中,因此可以直接供GPU编码器140使用。GPU转码器130的详细工作流程原理由图2展示。在完成GPU转码计算之后,将经转码的视频帧数据送入GPU编码器140。
GPU编码器140即为CUDA所提供的现有NVENC的编码功能,所述功能在显存中通过GPU编码将YUV4:2:0格式的视频帧数据编码为例如H.264格式的视频帧数据,并在完成编码后将经编码的视频帧数据写回到内存中,并经CPU控制将所述经编码的数据从内存写至所述存储器或发送给所述数据源150,形成输出的转码后的视频文件。所述GPU编码器140和编码过程为本领域技术人员所熟知,因此,本申请不再在此进一步详述。至此,所述WSNVENC系统的转码方案结束。
在概览了本申请的WSNVENC系统的转码方案之后,将结合附图2和3通过具体的示例来进一步详细描述本申请的GPU转码方案的理论实现和实践实现。
图2示出了根据本申请的实施例的GPU转码器工作流程图的理论层面示意图,该图仅从理论层面说明了GPU转码器的工作原理和设计思想,而理论实现与实践实现的区别可以从图3中获得。
从GPU解码器(即OPENCV封装的CUVID)直接得到的显存内的经解码的视频帧数据是RGB格式的矩阵数据(步骤210),使用OpenCV提供的cv::gpu::cvtColor()函数可以将RGB数据转化成YUV4:4:4格式的三通道混合矩阵,该三通道混合矩阵内的Y、U、V三个通道的数据排列形成形如YUVYUVYUV……YUV的样式。
之后开始GPU转码过程,首先,GPU转码器将YUV4:4:4的三通道混合矩阵进行分离,将三个通道拆分成三个独立矩阵,即:Y矩阵、U矩阵、V矩阵(步骤220),这三个矩阵分辨率均与原视频分辨率相同。
Y矩阵的转码处理相对简单,直接按新分辨率进行数据缩放即可,形成新Y矩阵(步骤230)。
U矩阵、V矩阵的转码处理除了按新分辨率进行数据缩放外,还需要按照GPU编码器需要的YUV4:2:0格式进行缩放,缩放后的新U矩阵、新V矩阵的长、宽均为新Y矩阵的1/2,总数据量为新Y矩阵的1/4(步骤240和250)。
新U矩阵、新V矩阵需要再经过一步合并处理以形成一个双通道的UV矩阵,UV矩阵的总数据量为新Y矩阵的1/2(步骤260)。
将新Y矩阵的数据全部复制入待编码显存中,再将UV矩阵的数据全部复制入待编码显存中(步骤270)。在所述待编码显存中,所述UV矩阵的数据位于之前被复制入的新Y矩阵的数据之后。即在待编码显存中,形成YYYY……YUVUVUV……UV的数据存储结构,该数据存储结构即为GPU编码器所需要的YUV4:2:0数据格式。至此,GPU转码器的工作流程即告结束。
在完成GPU转码器的工作流程之后,WSNVENC系统将处理好的YUV4:2:0数据格式的视频帧数据推送入GPU编码器。之后,在步骤280中,在显存中由所述GPU编码器(即NVENC)对所述转码后的数据进行编码处理,并将经编码的数据作为新的视频文件输出。
但是,由于NVENC通过GPU操作显存与CPU操作内存的方式有很大不同,因此,很多在理论上非常简单、直接的操作在实际实现时如果不加以改进而是直接按照理论方法去做就会出错。因此,上述理论层面的GPU转码器的工作流程只有在针对GPU、显存进行适应性调整后,才能够得到正确的结果。需要指出的是,理论流程和实际流程之间的差异只是理论与实践之间的自然差异,而理论思想与原理本身并没有错误。基于上述理解,本申请接着对GPU转码器的实际实现的工作流程进行详细说明。
图3是根据本申请的实施例的GPU转码器工作流程图的实践层面示意图。该图从实践层面说明了GPU转码器在实际工程实现中的工作流程。与图2相区别的部分在图3中以“下划线”和“虚线”标识。为了简洁起见,对于图3中与图2相同的步骤,本申请不再重复描述,而是着重描述不同之处。
与图2中的GPU转码器工作流程图的理论层面示意图相比,图3中的实践层面示意图的区别主要在于“适应性分辨率转换”的处理和“非整数倍率”的处理这两方面。
按照理论原理,比如要将一个1280*720分辨率的视频转为640*360分辨率的视频,只需要将Y矩阵宽、高都缩小一半,U、V矩阵宽、高都缩小至1/4即可,但实际上,如果直接这样做的话结果出错。这是因为在显存里,帧数据是按照“段-块式”存储的。经测试验证,单通道帧矩阵数据中,一行占据的显存空间为不小于一行实际元素数的512字节的最小整数倍,例如,1280*720分辨率的视频的Y矩阵一行占据的空间为1536字节(512*3),而640*360分辨率的视频的Y矩阵一行占据的空间为1024字节(512*2),也就是说,一个给定的分辨率视频可以按其一行占据的空间大小划分为512字节的1倍、2倍、3倍、4倍四大类区段视频。根据目前的硬件水平,属于4倍视频的1920*1080是目前常用的最大视频分辨率,故所述四大类区段已经能够满足目前的绝大多数的系统的正常需求,但本申请并不局限于所述四大类区段视频。随着硬件技术的发展,当性能更加优异的新系统(诸如新兴的支持4K分辨率的超高清电视)需要更高分辨率的视频时,诸如5、6……等更高倍数的区段视频也适用于本申请的转码方案。
同时,显存操作是按块进行操作的,要操作的块可以放大,但不可以缩小,否则结果会不正确。所以,如果要将视频放大的话,那么分辨率按图2简单转换即可;但如果要将视频缩小的话,那么,在行方向上缩小的同时,列方向上要做相应的放大,增大的倍率为旧行宽与新行宽的区段倍率之比(下面简称为“倍率”)。例如,1920*1080分辨率转为640*360分辨率的倍率为2:1(4倍:2倍),那么,视频在行方向上缩小时,列方向上要相应放大为2倍。这种处理被称为“适应性分辨率转换”处理。
但这种适应性分辨率转换也存在例外。当倍率为非整数时,如4:3和3:2这两个倍率,列方向上放大为相应的比值并不能使结果正确,而保持不变或者缩小也不能使结果正确。这是因为GPU编码器的处理模式与GPU操作内存的模式也存在不同的缘故,要解决这个问题,需要后续的扩展步骤,因此,在此处,遇到非整数倍率时,如果没有后续扩展步骤的处理,适应性分辨率转换取列方向为不变,这样的结果自然也是不正确的。
非整数倍率处理:非整数倍率出现问题的原因是,GPU编码器对数据的处理模式是按照一行占据的空间为512字节的2的整数次幂倍处理的,换言之,对GPU编码器来讲,视频只有1倍、2倍、4倍三大类区段视频,因此,在3倍视频相关的非整数倍率问题上,如果不添加扩展步骤,则无论怎样结果都不正确。当然,从工程角度上来说造成结果不正确的直接原因是适应性分辨率转换时,列方向不变导致了数据量缩小,因为同样为3倍视频,3:1的转换由于是整数倍,数据量没有缩小,因而不需要额外扩展步骤其处理的数据结果也是正确的。而添加了额外的扩展步骤,也就使得本方法在应对非整数倍率视频转换时,效率有所打折,差不多要慢一半左右。但即使慢一半,其效率也依然高于纯CPU方法(3倍)和现在常用的CPU+GPU方法(1.5倍)。
因此,在图3所示的GPU转码器工作流程图的实践层面示意图中,在步骤220中将YUV4:4:4的三通道混合矩阵拆分成三个独立矩阵(Y矩阵、U矩阵、V矩阵)之后,本申请采用了适应性分辨率转换处理(即视频在行方向上缩小时,列方向上要放大相应比值——非整数倍率时除外,此时列方向不变并等待后续扩展处理来形成新Y矩阵、新U矩阵、新V矩阵。具体而言,对于Y矩阵直接通过适应性分辨率转换形成新Y矩阵(步骤330),对于U矩阵按照YUV4:2:0格式通过适应性分辨率转换形成新U矩阵(步骤340),而对于V矩阵按照YUV4:2:0格式通过适应性分辨率转换形成新V矩阵(步骤350)。
在完成所述新矩阵的转换之后,对各新矩阵分别执行转换前后的分辨率所属的“512字节区段”倍率之比是否为整数的判断(步骤335和步骤355)。如果在步骤335和355中确定所述倍率比是整数,则如上所述无需额外扩展步骤其处理的数据结果也是正确的。因此,直接执行后续步骤260、270和280。如果在步骤335和355中确定所述倍率比非整数,则执行非整数倍率的处理方法,所述方法包括在进行相应的后续步骤(例如步骤260、270和280)之前,如图3所示对帧矩阵进行适应性扩展。所述适应性扩展包括:在行方向的末端,对帧矩阵整体填充上废数据(可以是任意合法值),填充的数据量为Y矩阵512列,U、V矩阵256列,从而分别形成YEXT、UEXT、VEXT矩阵(步骤336和356)。之后,对YEXT、UEXT、VEXT三个矩阵按照理论流程中的后续步骤(步骤260、270和280)进行操作即可以得到正确的转码结果。所述废数据填充仅仅是示例说明,本领域技术人员可以根据需要对Y矩阵和U、V矩阵进行填充,只要Y矩阵的填充列数为偶数,且能够保证使Y矩阵的行大小刚好处于下一个“512字节区间”内,同时U、V矩阵填充列数为Y矩阵的列数的一半即可。
当然,在显存中,往一个矩阵型数据的每行末尾填充数据并不容易,但是,在矩阵型数据的列方向的末尾填加几行却很容易。因此,在实际操作时,我们利用了OPENCV里封装的cv::gpu::transpose()函数,先将要填充数据的矩阵转置,例如Y矩阵形成YT矩阵,然后本来要在Y矩阵填充N列的,现在变成在YT矩阵填充N行。填充完毕后,再度调用cv::gpu::transpose()函数转置填充后的矩阵即形成了我们需要的扩展矩阵。
本系统和方法的实例:
下面针对实际使用情况,列举一些可以应用本申请的技术方案的实例。
实例1:若硬件结构满足以下条件:(1)CPU计算能力较弱,或CPU需要同时用于计算其他更重要的任务;(2)GPU计算能力满足使用NVENC的基础需求。这样的环境在视频转码中会有自然的降低CPU使用率,充分利用GPU计算能力,提高转码效率的需求。如果要转码的输入视频格式属于MPEG-2或H.264,或已经其它解码器解码生成的YUV4:4:4格式,且输出格式为H.264的话,那么这时的工程需求最适合使用本方法和系统实现。
实例2:若硬件结构满足以下条件:GPU计算能力远强于CPU,同时视频转码的格式需求满足实例1的格式需求,这时,可以利用本方法和系统达到最高效率,同时,也可以将多余的CPU的计算能力移做其他需要之用。
实例3:对于视频源格式稳定(MPEG-2或H.264),输出视频格式没有特殊要求或可以接受H.264格式的视频网站或个人,可以利用本方法和系统获得或提供高效、稳定的视频转码服务。
实例4:本方法和系统对于高校、研究所、研发型企业进行H.264与GPU硬件编解码研究具备充分的实用价值。与此同时,本方法的核心思想其实与输入/输出视频格式无关。因为当前GPU转码器本身的输入格式为YUV4:4:4,输出格式为YUV4:2:0,所以,只要GPU解码器支持输出YUV4:4:4,GPU编码器支持输入YUV4:2:0就可以完全正常工作。目前支持格式不够多样化的障碍点仅在于GPU解码器支持的输入格式和GPU编码器支持的输出格式很有限,而随着GPU解码、编码支持格式的进一步发展壮大,本方法的GPU转码器可以近乎无缝地迁移至新的应用转码系统中。因此,本申请的方案实际上并不会影响或限制系统整体的输入/输出视频格式。
本申请可具体化为其它具体形式而不背离其精神或本质特征。所描述的实施例在所有方面都应被认为仅是说明性而非限制性的。因此,本发明的范围由所附权利要求书而非前述描述指示。落入权利要求书的等效方案的含义和范围内的所有改变都被权利要求书的范围所涵盖。
Claims (10)
1.一种基于GPU的完全硬件转码的方法,其特征在于,包括:
GPU转码器从显存中读取经GPU解码器解码生成的YUV4:4:4格式的视频帧数据;
将所述视频帧数据拆分成Y、U、V三个通道的独立矩阵;
对于Y矩阵,通过转换分辨率形成新Y矩阵;
对于U矩阵和V矩阵,按YUV4:2:0格式转换分辨率分别形成新U矩阵和新V矩阵,并且将所述新U矩阵和新V矩阵合并成双通道的UV矩阵;
将所述新Y矩阵的数据和所述双通道的UV矩阵的数据分别复制到待编码的显存中;以及
GPU编码器对从所述待编码的显存中读取的所述新Y矩阵的数据和所述双通道的UV矩阵的数据进行编码以生成输出的视频文件。
2.如权利要求1所述的方法,其特征在于,对于Y矩阵,通过转换分辨率形成新Y矩阵包括:通过适应性分辨率转换来形成新Y矩阵;
对于U矩阵和V矩阵,按YUV4:2:0格式转换分辨率分别形成新U矩阵和新V矩阵包括:按YUV4:2:0格式通过所述适应性分辨率转换分别形成新U矩阵和新V矩阵;
其中,所述适应性分辨率转换包括:当视频在行方向上缩小时,在列方向上放大相应比值。
3.如权利要求2所述的方法,其特征在于,所述方法还包括:
在形成新Y矩阵、U矩阵和V矩阵之后,判断在转换前后的分辨率所属的“512字节区段倍率”之比是否为整数,并且如果所述倍率比非整数,则在被复制到待编码的显存之前,通过对所述新Y矩阵、U矩阵和V矩阵进行适应性扩展分别形成YEXT矩阵、UEXT矩阵和VEXT矩阵,其中所述适应性扩展包括:在行方向的末端,对帧矩阵整体填充上废数据。
4.如权利要求1所述的方法,其特征在于,所述方法支持的视频格式取决于GPU自身支持的视频格式,且所述方法完全由GPU来执行。
5.如权利要求1所述的方法,其特征在于,所述GPU解码器是NVIDIA公司的CUVID,所述GPU编码器是NVIDIA公司的NVENC。
6.一种基于GPU的完全硬件转码的系统,其特征在于,包括:
GPU解码器,配置为将来自存储器或数据源的视频帧数据解码成YUV4:4:4格式的视频帧数据并将其写入到显存中;
GPU转码器,配置用于执行下述操作:
从所述显存中读取经所述GPU解码器解码生成的YUV4:4:4格式的视频帧数据;
将所述视频帧数据拆分成Y、U、V三个通道的独立矩阵;
对于Y矩阵,通过转换分辨率形成新Y矩阵;
对于U矩阵和V矩阵,按YUV4:2:0格式转换分辨率分别形成新U矩阵和新V矩阵,并且将所述新U矩阵和新V矩阵合并成双通道的UV矩阵;
将所述新Y矩阵的数据和所述双通道的UV矩阵的数据分别复制到待编码的显存中;以及
GPU编码器,配置为对从所述待编码的显存中读取的所述新Y矩阵的数据和所述双通道的UV矩阵的数据进行编码以生成输出的视频文件。
7.如权利要求6所述的系统,其特征在于,所述GPU转码器被进一步配置用于:
对于Y矩阵,通过转换分辨率形成新Y矩阵包括:通过适应性分辨率转换来形成新Y矩阵;
对于U矩阵和V矩阵,按YUV4:2:0格式转换分辨率分别形成新U矩阵和新V矩阵包括:按YUV4:2:0格式通过所述适应性分辨率转换分别形成新U矩阵和新V矩阵;
其中,所述适应性分辨率转换包括:当视频在行方向上缩小时,在列方向上放大相应比值。
8.如权利要求7所述的系统,其特征在于,所述GPU转码器被进一步配置用于:
在形成新Y矩阵、U矩阵和V矩阵之后,判断在转换前后的分辨率所属的“512字节区段”倍率之比是否为整数,并且如果所述倍率比非整数,则在被复制到待编码的显存之前,通过对所述新Y矩阵、U矩阵和V矩阵进行适应性扩展分别形成YEXT矩阵、UEXT矩阵和VEXT矩阵,其中所述适应性扩展包括:在行方向的末端,对帧矩阵整体填充上废数据。
9.如权利要求6所述的系统,其特征在于,所述系统支持的视频格式取决于GPU自身支持的视频格式,且所述系统完全由GPU来实现。
10.如权利要求6所述的系统,其特征在于,所述GPU解码器是NVIDIA公司的CUVID,所述GPU编码器是NVIDIA公司的NVENC。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510621107.2A CN105228000B (zh) | 2015-09-25 | 2015-09-25 | 一种基于gpu的完全硬件转码的方法和系统 |
PCT/CN2016/097986 WO2017050116A1 (zh) | 2015-09-25 | 2016-09-04 | 一种基于gpu的完全硬件转码的方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510621107.2A CN105228000B (zh) | 2015-09-25 | 2015-09-25 | 一种基于gpu的完全硬件转码的方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105228000A true CN105228000A (zh) | 2016-01-06 |
CN105228000B CN105228000B (zh) | 2018-10-30 |
Family
ID=54996634
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510621107.2A Active CN105228000B (zh) | 2015-09-25 | 2015-09-25 | 一种基于gpu的完全硬件转码的方法和系统 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN105228000B (zh) |
WO (1) | WO2017050116A1 (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2017050116A1 (zh) * | 2015-09-25 | 2017-03-30 | 网宿科技股份有限公司 | 一种基于gpu的完全硬件转码的方法和系统 |
WO2018000224A1 (en) * | 2016-06-29 | 2018-01-04 | Intel Corporation | Encoding and decoding video |
CN107968923A (zh) * | 2017-11-30 | 2018-04-27 | 腾讯科技(深圳)有限公司 | 一种图像处理方法、装置、计算设备及存储介质 |
CN108965814A (zh) * | 2018-07-27 | 2018-12-07 | 高新兴科技集团股份有限公司 | 一种基于cuda加速技术的视频混合解码渲染方法 |
CN109213593A (zh) * | 2017-07-04 | 2019-01-15 | 阿里巴巴集团控股有限公司 | 用于全景视频转码的资源分配方法、装置和设备 |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113055681B (zh) * | 2021-03-02 | 2024-02-09 | 长沙景嘉微电子股份有限公司 | 视频解码显示方法,装置,电子设备及存储介质 |
CN113727112B (zh) * | 2021-09-23 | 2024-04-16 | 北京车和家信息技术有限公司 | 视频转码方法、装置、电子设备和介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101788896A (zh) * | 2010-02-05 | 2010-07-28 | 郅熙龙 | 一种cuda架构下任意尺寸数据的高速计算方法 |
CN102273205A (zh) * | 2008-11-04 | 2011-12-07 | 先进微装置公司 | 以gpu加速的软件视频转码器 |
CN103491379A (zh) * | 2013-09-25 | 2014-01-01 | 浙江宇视科技有限公司 | 一种提升智能分析性能的方法和装置 |
US20140112394A1 (en) * | 2012-10-22 | 2014-04-24 | Microsoft Corporation | Band separation filtering / inverse filtering for frame packing / unpacking higher-resolution chroma sampling formats |
CN104919804A (zh) * | 2012-10-01 | 2015-09-16 | 微软技术许可有限责任公司 | 帧封装和解封较高分辨率色度采样格式 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105228000B (zh) * | 2015-09-25 | 2018-10-30 | 网宿科技股份有限公司 | 一种基于gpu的完全硬件转码的方法和系统 |
-
2015
- 2015-09-25 CN CN201510621107.2A patent/CN105228000B/zh active Active
-
2016
- 2016-09-04 WO PCT/CN2016/097986 patent/WO2017050116A1/zh active Application Filing
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102273205A (zh) * | 2008-11-04 | 2011-12-07 | 先进微装置公司 | 以gpu加速的软件视频转码器 |
CN101788896A (zh) * | 2010-02-05 | 2010-07-28 | 郅熙龙 | 一种cuda架构下任意尺寸数据的高速计算方法 |
CN104919804A (zh) * | 2012-10-01 | 2015-09-16 | 微软技术许可有限责任公司 | 帧封装和解封较高分辨率色度采样格式 |
US20140112394A1 (en) * | 2012-10-22 | 2014-04-24 | Microsoft Corporation | Band separation filtering / inverse filtering for frame packing / unpacking higher-resolution chroma sampling formats |
CN103491379A (zh) * | 2013-09-25 | 2014-01-01 | 浙江宇视科技有限公司 | 一种提升智能分析性能的方法和装置 |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2017050116A1 (zh) * | 2015-09-25 | 2017-03-30 | 网宿科技股份有限公司 | 一种基于gpu的完全硬件转码的方法和系统 |
WO2018000224A1 (en) * | 2016-06-29 | 2018-01-04 | Intel Corporation | Encoding and decoding video |
US11968380B2 (en) | 2016-06-29 | 2024-04-23 | Intel Corporation | Encoding and decoding video |
CN109213593A (zh) * | 2017-07-04 | 2019-01-15 | 阿里巴巴集团控股有限公司 | 用于全景视频转码的资源分配方法、装置和设备 |
CN109213593B (zh) * | 2017-07-04 | 2022-05-10 | 阿里巴巴集团控股有限公司 | 用于全景视频转码的资源分配方法、装置和设备 |
CN107968923A (zh) * | 2017-11-30 | 2018-04-27 | 腾讯科技(深圳)有限公司 | 一种图像处理方法、装置、计算设备及存储介质 |
CN108965814A (zh) * | 2018-07-27 | 2018-12-07 | 高新兴科技集团股份有限公司 | 一种基于cuda加速技术的视频混合解码渲染方法 |
Also Published As
Publication number | Publication date |
---|---|
CN105228000B (zh) | 2018-10-30 |
WO2017050116A1 (zh) | 2017-03-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105228000A (zh) | 一种基于gpu的完全硬件转码的方法和系统 | |
TWI699111B (zh) | 用於顯示串流壓縮之中點預測誤差擴散 | |
US20170026659A1 (en) | Partial Decoding For Arbitrary View Angle And Line Buffer Reduction For Virtual Reality Video | |
CN111741232B (zh) | 基于双显卡nvlink提高超高清非编编辑性能的方法 | |
CN101252694B (zh) | 基于块的视频解码的帧存储压缩和地址映射系统 | |
US20080056358A1 (en) | Information processing apparatus and information processing method | |
TWI539793B (zh) | 用於解碼行程編碼資料的解碼器與方法 | |
CN105933708B (zh) | 一种数据压缩和解压缩的方法和装置 | |
US9607407B2 (en) | Variable-width differential memory compression | |
US20140086309A1 (en) | Method and device for encoding and decoding an image | |
CN101527849A (zh) | 集成视频解码器的存储系统 | |
CN103888777A (zh) | 运动图像压缩解压缩装置 | |
CN102868871A (zh) | 一种视频图像格式的转换方法和装置 | |
US9460525B2 (en) | Tile-based compression and decompression for graphic applications | |
DE102011100936A9 (de) | Techniken zum Speichern und Abrufen von Pixeldaten | |
CN105163128B (zh) | 一种利用gpu并行加速图像转换的屏幕图像获取方法 | |
KR101303503B1 (ko) | 컬러 이미지들을 위한 조인트 스칼라 임베디드 그래픽 코딩 | |
US20130022265A1 (en) | Method and system for interpolating index values of associated tiles in an image | |
CN105847823A (zh) | 一种在视频解码中减少内存带宽使用的方法 | |
US8737467B2 (en) | Information processing apparatus and method | |
US9167272B2 (en) | Method, apparatus and system for exchanging video data in parallel | |
CN101261605A (zh) | 融合存储器设备及方法 | |
CN101257590B (zh) | 编码、解码方法及装置、显示系统 | |
CN110536123A (zh) | 视频数据处理方法、装置、计算机设备和存储介质 | |
CN102447905A (zh) | 一种视频解码旋转显示方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |