提高视频渲染效率的方法、装置、计算机设备及存储介质

文档序号:73231 发布日期:2021-10-01 浏览:7次 >En<

阅读说明:本技术 提高视频渲染效率的方法、装置、计算机设备及存储介质 (Method and device for improving video rendering efficiency, computer equipment and storage medium ) 是由 谭志文 李盛 于 2021-08-09 设计创作,主要内容包括:本发明公开了一种提高视频渲染效率的方法、装置、计算机设备及存储介质。该方法包括:创建滤镜图形管理器,根据所述滤镜图形管理器输出可渲染的3D曲面数据;创建视频数据分配显示器以及创建图形渲染控件,并在所述视频数据分配显示器中创建回调事件;将所述可渲染的3D曲面数据拷贝至后台缓冲区,并触发回调事件,使所述图形渲染控件将所述3D曲面数据从所述后台缓冲区切换到前台缓冲区进行渲染,以及所述前台缓冲区切换回后台缓冲区,以继续接收可渲染的3D曲面数据;通过图形渲染控件进行视频渲染取代现有通过GDI对视频渲染,减少了视频需要经过CPU处理的步骤,使视频渲染的效率提高了至少2倍,并且提高了视频播放的流畅性。(The invention discloses a method and a device for improving video rendering efficiency, computer equipment and a storage medium. The method comprises the following steps: creating a filter graph manager, and outputting renderable 3D curved surface data according to the filter graph manager; creating a video data distribution display and a graphic rendering control, and creating a callback event in the video data distribution display; copying the renderable 3D curved surface data to a background buffer area, triggering a callback event, enabling the graphics rendering control to switch the 3D curved surface data from the background buffer area to a foreground buffer area for rendering, and switching the foreground buffer area back to the background buffer area so as to continuously receive the renderable 3D curved surface data; the video rendering through the graphic rendering control replaces the existing video rendering through GDI, so that the steps that the video needs to be processed by a CPU are reduced, the video rendering efficiency is improved by at least 2 times, and the video playing fluency is improved.)

提高视频渲染效率的方法、装置、计算机设备及存储介质

技术领域

本发明涉及音视频渲染领域,尤其涉及一种提高视频渲染效率的方法、装置、计算机设备及存储介质。

背景技术

WPF(Windows Presentation Foundation):是一个基于windows.NET Framework的用户界面框架,用于用户图形界面开发,底层基于DirectX进行图形界面渲染,支持2D和3D矢量渲染。

在WPF桌面应用程序中,大部分是嵌入WinForm的窗口或者控件进行视频渲染,而WinForm的底层是基于GDI绘图,其中GDI(Graphics Device Interface)是图形设备接口,它的主要任务是负责系统与绘图程序之间的信息交换,处理所有Windows程序的图形输出,即视频的渲染过程是预先在CPU进行初步处理后再传输到GPU进行渲染,这种方式导致视频渲染速度慢,效率低,同时在视频播放过程会有闪烁的问题。

发明内容

本发明的目的是提供一种提高视频渲染效率的方法、装置、计算机设备及存储介质,旨在解决现有在WPF中嵌入WinForm窗口或者控件,视频渲染速度慢,效率低的问题。

为解决上述技术问题,本发明的目的是通过以下技术方案实现的:提供一种提高视频渲染效率的方法,其包括:

创建滤镜图形管理器,根据所述滤镜图形管理器对视频源进行分离和解码处理,输出可渲染的3D曲面数据;

创建视频数据分配显示器以及创建图形渲染控件,并在所述视频数据分配显示器中创建回调事件,用于通知所述图形渲染控件执行更新动作;

将所述可渲染的3D曲面数据拷贝至后台缓冲区,并触发回调事件,使所述图形渲染控件将所述3D曲面数据从所述后台缓冲区切换到前台缓冲区进行渲染,以及所述前台缓冲区切换回后台缓冲区,以继续接收可渲染的3D曲面数据。

另外,本发明要解决的技术问题是还在于提供一种提高视频渲染效率装置,其包括:

输出单元,用于创建滤镜图形管理器,根据所述滤镜图形管理器对视频源进行分离和解码处理,输出可渲染的3D曲面数据;

通知单元,用于创建视频数据分配显示器以及创建图形渲染控件,并在所述视频数据分配显示器中创建回调事件,用于通知所述图形渲染控件执行更新动作;

渲染单元,用于将所述可渲染的3D曲面数据拷贝至后台缓冲区,并触发回调事件,使所述图形渲染控件将所述3D曲面数据从所述后台缓冲区切换到前台缓冲区进行渲染,以及所述前台缓冲区切换回后台缓冲区,以继续接收可渲染的3D曲面数据。

另外,本发明实施例又提供了一种计算机设备,其包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述第一方面所述的提高视频渲染效率的方法。

另外,本发明实施例还提供了一种计算机可读存储介质,其中所述计算机可读存储介质存储有计算机程序,所述计算机程序当被处理器执行时使所述处理器执行上述第一方面所述的提高视频渲染效率的方法。

本发明实施例公开了一种提高视频渲染效率的方法、装置、计算机设备及存储介质,其中,方法包括:创建滤镜图形管理器,根据所述滤镜图形管理器对视频源进行分离和解码处理,输出可渲染的3D曲面数据;创建视频数据分配显示器以及创建图形渲染控件,并在所述视频数据分配显示器中创建回调事件,用于通知所述图形渲染控件执行更新动作;将所述可渲染的3D曲面数据拷贝至后台缓冲区,并触发回调事件,使所述图形渲染控件将所述3D曲面数据从所述后台缓冲区切换到前台缓冲区进行渲染,以及所述前台缓冲区切换回后台缓冲区,以继续接收可渲染的3D曲面数据。

该方法一方面通过图形渲染控件进行视频渲染取代现有技术中通过GDI对视频渲染,减少了视频预先经过CPU处理的步骤,使得视频渲染的效率提高了至少2倍。

第二方面:在现有视频渲染的过程中,视频全部在一个缓冲区进行视频绘制并渲染,而视频绘制是需要一定的时间,所以会导致视频处理延迟,进而使得视频在显示过程中造成闪烁的现象,造成用户较差的体验感,而在本实施例中通过两个缓冲区对连续渲染的3D曲面数据分开进行渲染,能够有效避免闪烁的情况发生且提高了视频播放的流畅性。

附图说明

为了更清楚地说明本发明实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的提高视频渲染效率的方法的流程示意图;

图2为本发明实施例提供的提高视频渲染效率的方法的子流程示意图;

图3为本发明实施例提供的提高视频渲染效率装置的示意性框图;

图4为本发明实施例提供的计算机设备的示意性框图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

应当理解,当在本说明书和所附权利要求书中使用时,术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。

还应当理解,在此本发明说明书中所使用的术语仅仅是出于描述特定实施例的目的而并不意在限制本发明。如在本发明说明书和所附权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。

还应当进一步理解,在本发明说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。

请参阅图1,图1为本发明实施例提供的提高视频渲染效率的方法的流程示意图;

如图1所示,该方法包括步骤S101~S105。

S101、创建滤镜图形管理器,根据所述滤镜图形管理器对视频源进行分离和解码处理,输出可渲染的3D曲面数据;

S102、创建视频数据分配显示器以及创建图形渲染控件,并在所述视频数据分配显示器中创建回调事件,用于通知所述图形渲染控件执行更新动作;

S103、将所述可渲染的3D曲面数据拷贝至后台缓冲区,并触发回调事件,使所述图形渲染控件将所述3D曲面数据从所述后台缓冲区切换到前台缓冲区进行渲染,以及所述前台缓冲区切换回后台缓冲区,以继续接收可渲染的3D曲面数据。

在步骤S101中,具体的,参考DirectShow API,创建滤镜图形管理器,其中DirectShow是微软公司在ActiveMovie和Video for Windows的基础上,基于COM(Component Object Model)的流媒体处理的开发包。其中,COM是构建ActiveX控件和OLE的基本“对象模型”;COM允许对象向其他组件和宿主应用程序公开其功能,其定义了对象如何暴露自身以及这种暴露如何跨进程和跨网络工作。

在所述步骤S102中,图形渲染控件即D3DImage,是微软基于DirectX封装的WPF中的一个图形渲染控件,用于显示用户创建的Direct3D曲面;其中,DirectX(DirecteXtension)是由微软公司创建的多媒体编程接口,是一种应用程序接口(API),DirectX可以让以windows为平台的游戏或多媒体程序获得更高的执行效率,加强3D图形和声音效果,并提供设计人员一个共同的硬件驱动标准,让游戏开发者不必为每一品牌的硬件来写不同的驱动程序,也降低用户安装及设置硬件的复杂度。

第一方面:传统的技术是嵌入的WinForm窗口或者控件,使用的是GDI进行渲染,即视频是需要经过CPU处理,然后再到显卡GPU处理,而本申请实施例中通过DirectX中的图形渲染控件进行视频渲染,DirectX API因为是微软封装的显卡硬件接口,直接与显卡GPU进行数据交互,不需要经过CPU进行处理,在实际运用过程中,通过DirectX对视频渲染对比通过GDI对视频进行渲染的方式,可以发现通过DirectX对视频渲染的方式的渲染效率提高了至少2倍,例如GDI每秒播放视频帧数是15帧,而DirectX每秒播放视频帧数可以达到60帧。

第二方面:通过视频分配显示器以及图像渲染控件,将一个缓冲区用于前台渲染,另一个缓冲区用于在后台绘制并准备好需要渲染的3D曲面数据的方式取代现有技术中通过在WPF中嵌入WinForm窗口或者控件的方式对视频进行渲染,显著的提高了减少数据处理延迟,并且减少了CPU占用率,提高了视频渲染的效率。在现有视频渲染的过程中,视频全部在一个缓冲区进行视频绘制并渲染,而视频绘制是需要一定的时间,所以会导致视频处理延迟,进而使得视频在显示过程中造成闪烁的现象,造成用户较差的体验感,而在本实施例中通过两个缓冲区对连续渲染的3D曲面数据分开进行渲染,能够有效避免闪烁的情况发生。

具体一实施例中,如图2所示,所述步骤S101包括:

S1011、利用文件源滤镜读取视频源,并对所述视频源的视频文件头信息进行解析,得到解析结果;

S1012、基于所述解析结果,利用视频源分离滤镜对解析后的视频源进行音视频分离,得到音频数据和视频数据;

S1013、利用音频解码滤镜和视频解码滤镜分别对所述音频数据和视频数据进行解码,对解码后的音频数据利用声音输出滤镜进行声音播放,对解码后的视频数据利用视频混合渲染滤镜进行视频渲染,得到可渲染的3D曲面数据。

其中,步骤S1011中的视频源可以是视频文件、摄像头、网络直播等视频;在步骤S1013中,将视频混合渲染滤镜的视频渲染模式设置为无渲染模式即表示不渲染,由用户自定义处理渲染。

为了能够执行步骤S101,具体一实施例中,所述步骤S101之前,包括:

S101’、创建工作调度线程,在所述工作调度线程中创建委托方法队列和消息循环,用于所述滤镜图形管理器在对视频源进行分离与解码处理的过程中采用添加方法至所述委托方法队列并以消息循环的方式执行。

其中,所述步骤S101’之前还包括:

在C#中封装DirectShow、DirectX、C++API为COM API接口。

由于API由C++编写,需在C#中封装成COM API接口进行使用。实际运用场景下,若工作调度线程退出,则释放该工作调度线程中所有的COM对象内存资源,使所有使用COM接口时统一通过消息循环去执行,不使用COM接口时同时释放所有的COM接口内存,避免内存泄露。

在步骤S102中,所述分配显示器继承并实现有表面分配器接口和图像演示器接口,其中,所述表面分配器接口用于分配、准备和释放Direct3D曲面,所述图像演示器接口用于将所述3D曲面数据拷贝至后缓冲区。

具体一实施例中,所述步骤S102,包括:

在所述视频数据分配显示器中创建第一回调事件和第二回调事件,其中,第一回调事件用于在Direct3D曲面准备好后触发曲面已准备的通知事件,第二回调事件用于在所述3D曲面数据拷贝至后台缓冲区后触发视频更新的通知事件。

在本实施例中,所述步骤S103,包括:

基于所述表面分配器接口,使用DirectX API创建并分配一个Direct3D曲面,并利用所述第一回调事件触发曲面已准备的通知事件;

基于所述图像演示器接口,使用所述DirectX API将所述3D曲面数据拷贝至后台缓冲区,并利用所述第二回调事件触发视频更新的通知事件;

在所述图形渲染控件接收到通知事件的消息后,将所述3D曲面数据从所述后台缓冲区切换到前台缓冲区进行渲染,以及所述前台缓冲区切换回后台缓冲区,以继续接收可渲染的3D曲面数据。

其中,在图形渲染控件接收到触发曲面已准备的通知事件或触发视频更新的通知事件后,均会将3D曲面数据从后台缓冲区切换到前台缓冲区进行渲染,以及前台缓冲区切换回后台缓冲区,以继续接收可渲染的3D曲面数据。

在本实施例中,所述表面分配器接口为视频混合渲染滤镜提供的IVMRSurfaceAllocator9接口,其中,VMR英文全称是Video Mixing Renderer 9即视频混合渲染滤镜。IVMRSurfaceAllocator9接口用于用户自定义实现Direct3D曲面数据的处理,即在实现的方法中分配、准备和释放Direct3D曲面,其中,在IVMRSurfaceAllocator9接口的实现中需要使用DirectX API去进行视频数据的处理,如创建Direct3D曲面与释放内存;IVMRSurfaceAllocator9接口需要实现4个方法,分别是初始化Direct3D设备、终止设备释放内存、从Direct3D设备中获取Direct3D曲面、设置VMR-9滤镜的通知回调。

所述图像演示器接口为视频混合渲染滤镜提供的IVMRImagePresenter9接口,其中,IVMRImagePresenter9接口在实现该接口的方法中使用DirectX API将3D曲面数据拷贝至后台缓冲区,等待渲染;IVMRImagePresenter9接口需要实现3个方法,分别是准备开始呈现、准备停止呈现、正在呈现。具体的,在IVMRSurfaceAllocator9接口方法中实现初始化DirectX 3D设备时,其中DirectX3D设备即显卡中分配的用于图形数据计算的内存单元,使用DirectX API创建并分配一个Direct 3D曲面,同时触发第一回调事件通知已准备好Direct 3D曲面;在IVMRImagePresenter9接口方法中使用DirectX API将3D曲面数据拷贝至后台缓冲区,再触发第二回调事件,通知有新的视频帧数据即3D曲面数据,通知图形渲染控件更新后台缓冲区,当前台缓冲区渲染完3D曲面数据后,图形渲染控件内部的前台缓冲区和后台缓冲区会自动相互切换,前台缓冲区切换成后台缓冲区,后台缓冲区切换回前台缓冲区,而切换成的后台缓冲区继续接收可渲染的3D曲面数据,进而提高了视频渲染的效率。

具体的,所述创建图形渲染控件包括:

在WPF中创建自定义控件,并在所述自定义控件创建所述图形渲染控件,并在所述图形渲染控件中注册所述第一回调事件和第二回调事件。

当图形渲染控件接收到第一回调事件的通知事件时,记录并保存Direct 3D曲面数据,其中,在实际使用过程中,一般在DirectX 3D设备初始化时才会触发第一回调事件;当图形渲染控件接收到第二回调事件的通知事件时,提取保存的Direct 3D曲面数据并拷贝至图形渲染控件的后台缓冲区,当图形渲染控件的前台缓冲区视频渲染后会自动把后台缓冲区更新到前台缓冲中,最后以WPF中窗口添加自定义控件显示最终的视频画面,整个视频渲染过程完成,有效的提高了视频渲染的速度。

本发明实施例还提供一种提高视频渲染效率装置,该提高视频渲染效率装置用于执行前述提高视频渲染效率的方法的任一实施例。具体地,请参阅图3,图3是本发明实施例提供的提高视频渲染效率装置的示意性框图。

如图3所示,提高视频渲染效率装置500,包括:

输出单元501,用于创建滤镜图形管理器,根据所述滤镜图形管理器对视频源进行分离和解码处理,输出可渲染的3D曲面数据;

通知单元502,用于创建视频数据分配显示器以及创建图形渲染控件,并在所述视频数据分配显示器中创建回调事件,用于通知所述图形渲染控件执行更新动作;

渲染单元503,用于将所述可渲染的3D曲面数据拷贝至后台缓冲区,并触发回调事件,使所述图形渲染控件将所述3D曲面数据从所述后台缓冲区切换到前台缓冲区进行渲染,以及所述前台缓冲区切换回后台缓冲区,以继续接收可渲染的3D曲面数据。

该装置一方面通过DirectX中的图形渲染控件进行视频渲染,DirectX API因为是微软封装的显卡硬件接口,直接与显卡GPU进行数据交互,不需要经过CPU进行处理,即使用DirectX进行视频渲染对比GDI视频渲染,在实际运用过程中,视频渲染的效率提高了至少2倍,例如GDI每秒播放视频帧数是15帧,而DirectX每秒播放视频帧数可以达到60帧。

第二方面:通过本申请实施例中通过创建视频分配显示器,利用WPF中的图像渲染控件,将一个缓冲区用于前台渲染,另一个缓冲区用于在后台绘制并准备好需要渲染的3D曲面数据的方式取代现有技术中通过在WPF中嵌入WinForm窗口或者控件的方式对视频进行渲染,显著的提高了减少数据处理延迟,并且减少了CPU占用率;在现有视频渲染的过程中,视频全部在一个缓冲区进行视频绘制并渲染,而视频绘制是需要一定的时间,所以会导致视频处理延迟,进而使得视频在显示过程中造成闪烁的现象,造成用户较差的体验感,而在本实施例中通过两个缓冲区对连续渲染的3D曲面数据分开进行渲染,能够有效避免闪烁的情况发生。

所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

上述提高视频渲染效率装置可以实现为计算机程序的形式,该计算机程序可以在如图4所示的计算机设备上运行。

请参阅图4,图4是本发明实施例提供的计算机设备的示意性框图。该计算机设备1100是服务器,服务器可以是独立的服务器,也可以是多个服务器组成的服务器集群。

参阅图4,该计算机设备1100包括通过系统总线1101连接的处理器1102、存储器和网络接口1105,其中,存储器可以包括非易失性存储介质1103和内存储器1104。

该非易失性存储介质1103可存储操作系统11031和计算机程序11032。该计算机程序11032被执行时,可使得处理器1102执行提高视频渲染效率的方法。

该处理器1102用于提供计算和控制能力,支撑整个计算机设备1100的运行。

该内存储器1104为非易失性存储介质1103中的计算机程序11032的运行提供环境,该计算机程序11032被处理器1102执行时,可使得处理器1102执行提高视频渲染效率的方法。

该网络接口1105用于进行网络通信,如提供数据信息的传输等。本领域技术人员可以理解,图4中示出的结构,仅仅是与本发明方案相关的部分结构的框图,并不构成对本发明方案所应用于其上的计算机设备1100的限定,具体的计算机设备1100可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。

本领域技术人员可以理解,图4中示出的计算机设备的实施例并不构成对计算机设备具体构成的限定,在其他实施例中,计算机设备可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。例如,在一些实施例中,计算机设备可以仅包括存储器及处理器,在这样的实施例中,存储器及处理器的结构及功能与图4所示实施例一致,在此不再赘述。

应当理解,在本发明实施例中,处理器1102可以是中央处理单元(CentralProcessing Unit,CPU),该处理器1102还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific IntegratedCircuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。其中,通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。

在本发明的另一实施例中提供计算机可读存储介质。该计算机可读存储介质可以为非易失性的计算机可读存储介质。该计算机可读存储介质存储有计算机程序,其中计算机程序被处理器执行时实现本发明实施例的提高视频渲染的方法。

所述存储介质为实体的、非瞬时性的存储介质,例如可以是U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、磁碟或者光盘等各种可以存储程序代码的实体存储介质。

所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的设备、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。

13页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:图像处理方法、装置、电子设备及存储介质

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类