掌桥专利:专业的专利平台
掌桥专利
首页

基于安卓平台无线投屏实现帧率控制的方法及其装置

文献发布时间:2023-06-19 16:04:54



技术领域

本发明涉及多分屏投屏投屏技术领域,具体涉及一种基于安卓平台无线投屏实现帧率控制的方法及其装置。

背景技术

目前投屏多分屏场景使用非常宽泛,但是多分屏投屏时候会导致接收端解码压力过大导致解码问题,如花屏,乱码等问题。在多分屏投屏中帧率固定的方式在多路情况下会增大投屏接收端的解码压力,解码效率低下,容易造成视频解码出现花屏、乱码、丢帧等一系列情况,甚至可能会造成解码器崩溃引发设备重启。

发明内容

本发明的目的在于提供一种基于安卓平台无线投屏实现帧率控制的方法及其装置,可以解决现有技术中帧率固定的方式在多路情况下会增大投屏接收端的解码压力大、效率低的问题。

本发明的目的是通过以下技术方案实现的:

第一方面,本发明提供一种基于安卓平台无线投屏实现帧率控制的方法,包括以下步骤:

申请安卓录屏权限进行录屏;

利用编码器创建一个视图窗口,并将生产录屏的数据传到视图窗口,实现监听接口获取视图窗口的数据,并进行视图窗口设置;

通过录屏创建一个虚拟显示器来捕获视图窗口的数据内容;

开启线程驱动视图窗口逐帧获取数据,并计算帧数据间隔时间值来变化指定的采集帧率;

采集的数据帧传输给投屏接收端进行解码。

进一步的,所述通过录屏创建一个虚拟显示器来捕获视图窗口的数据内容之前,所述方法还包括:

准备一个中间接口层;

利用中间接口层创建渲染纹理、表面纹理和视图窗口的互连实例;

在中间接口层获取视图窗口的数据内容。

进一步的,所述通过录屏创建一个虚拟显示器来捕获视图窗口的数据内容具体包括通过录屏创建一个虚拟显示器来捕获中间接口层中视图窗口的数据内容。

进一步的,所述中间接口层为EGL;所述EGL具体指利用一个EGLContext和一个支持pbuffer的EGLSurface,实现EGLContext和EGLSurface交流。

进一步的,所述进行视图窗口设置包括视图窗口的宽高比例设置和FPS设置。

进一步的,所述帧数据间隔时间的计算方式为1000/fps。

进一步的,所述采集的数据帧传输给投屏接收端具体为采集的数据帧通过TCP传输给投屏接收端。

第二方面,本发明提供一种基于安卓平台无线投屏实现帧率控制的装置,包括:

录屏请求单元,用于申请安卓录屏权限进行录屏;

编码单元,用于创建视图窗口,并将生产录屏的数据传到视图窗口,实现监听接口获取视图窗口的数据,并进行视图窗口设置;

虚拟显示单元,用于来捕获视图窗口的数据内容;

线程驱动单元,用于对视图窗口逐帧获取数据,并计算帧数据间隔时间值来变化指定的采集帧率;

传输单元,用于将采集的数据帧传输给投屏接收端进行解码。

进一步的,所述基于安卓平台无线投屏实现帧率控制的装置还包括:

准备单元,用于准备一个中间接口层;

创建/连接单元,用于利用中间接口层创建渲染纹理、表面纹理和视图窗口的互连实例;

获取单元,用于在中间接口层获取视图窗口的数据内容。

第三方面,本发明提供一种存储介质,所述的存储介质中存有计算机程序,运行所述计算机程序后可以实现前述的基于安卓平台无线投屏实现帧率控制的方法。

本发明的有益效果:

本发明基于安卓平台,通过MediaProjection(录屏)创建的虚拟显示器,然后将发送端视频数据交给Surface(视图窗口)进行逐帧数据来控制帧率,当有多路投屏的时候,动态计算最符合接收端的解码效率的帧率,避免多路投屏帧率固定导致接收端解码器解码压力过大产生的一系列问题。

附图说明

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

图1为基于安卓平台无线投屏实现帧率控制的方法一个实施例的流程示意图;

图2为基于安卓平台无线投屏实现帧率控制的方法整体的流程示意图;

图3为中间接口层EGL组成示意图。

具体实施方式

下面结合附图对本公开实施例进行详细描述。

以下通过特定的具体实例说明本公开的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本公开的其他优点与功效。显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。本公开还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本公开的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。基于本公开中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。

请参阅图1-图3,本发明基于安卓平台无线投屏实现帧率控制的方法一个实施例中,以安卓平台的MediaProjection为实例进行说明,包括以下步骤:

步骤S1、申请安卓录屏MediaProjection权限进行录屏。

利用安卓平台的MediaProjection进行一个录屏,MediaProjection是一种新的截屏或者录屏的新手段,可以用来捕捉屏幕,还是一个准许APP拥有截取屏幕或者是记录系统音频的能力。

步骤S2、利用编码器MediaCodec创建一个视图窗口createInputSurface(以下简称Surface),并将生产录屏的数据传到视图窗口Surface,实现监听接口SurfaceTexture.OnFrameAvailableListener获取视图窗口Surface的数据,并进行视图窗口Surface设置。

步骤S3、通过录屏MediaProjection创建一个虚拟显示器createVirtualDisplay来捕获视图窗口Surface的数据内容。

步骤S4、开启线程驱动视图窗口Surface逐帧获取数据,并计算帧数据间隔时间值来变化指定的采集帧率。

步骤S5、采集的数据帧传输给投屏接收端进行解码即可。

投屏接收端只用负责解码即可,并可根据投屏接收端设备数量动态调节帧率,以达到多路投屏正常播放。

进一步的,基于安卓平台无线投屏实现帧率控制的方法另一个实施例中,所述通过录屏MediaProjection创建一个虚拟显示器来捕获视图窗口的数据内容之前,所述方法还包括:

准备一个中间接口层EGL;

利用中间接口层创建渲染纹理TextureRender、表面纹理SurfaceTexture和视图窗口Surface的互连实例;

在中间接口层获取视图窗口的数据内容,视图窗口的数据内容解释为EGLSurface。

具体的,所述通过录屏创建一个虚拟显示器来捕获视图窗口的数据内容具体包括通过录屏创建一个虚拟显示器来捕获中间接口层中视图窗口的数据内容。

具体的,所述中间接口层为EGL;所述EGL具体指利用一个EGLContext和一个支持pbuffer的EGLSurface,实现EGLContext和EGLSurface交流。

需要说明的是,中间接口层EGL:OpenGL ES定义了一个渲染图形的API,但没有定义窗口系统,为了让GLES能够适合各种平台,GLES将与知道如何通过操作系统创建和访问窗口的库结合使用,用于安卓的库称为EGL;同时在特定设备上使用需要一个中间层做适配,这个中间层就是EGL。

EGL提供机制包括:与设备的原生窗口系统通信、查询绘图表面的可用类型和配置、创建绘图表面、在OpenGL ES和其他图形渲染API之间同步渲染以及管理纹理贴图等渲染资源。

为了让OpenGL ES能够绘制在当前设备上,需要EGL作为OpenGL ES与设备的桥梁。

其中,Display(EGLDisplay)是对实际显示设备的抽象;Surface(EGLSurface)是对用来存储图像的内存区域。

具体的,所述进行视图窗口设置包括视图窗口的宽高比例设置和FPS设置。

宽高比例的设置结合实际的多路投屏的情况和视图观看合适进行调节;FPS设置根据观看的舒适度进行和结合实际情况进行调节。

优选的,所述帧数据间隔时间的计算方式为1000/fps。即为:

video_interval=1000/fps;

优选的,所述采集的数据帧传输给投屏接收端具体为采集的数据帧通过TCP(传输控制协议)传输给投屏接收端。

第二方面,本发明提供一种基于安卓平台无线投屏实现帧率控制的装置,包括:

录屏请求单元,用于申请安卓录屏权限进行录屏;

编码单元,用于创建视图窗口,并将生产录屏的数据传到视图窗口,实现监听接口获取视图窗口的数据,并进行视图窗口设置;

虚拟显示单元,用于来捕获视图窗口的数据内容;

线程驱动单元,用于对视图窗口逐帧获取数据,并计算帧数据间隔时间值来变化指定的采集帧率;

传输单元,用于将采集的数据帧传输给投屏接收端进行解码。

需要说明的是,投屏接收端可以是一种一体机,但又不仅限于此,是能够实现显示功能、接收功能和解码功能的设备。

具体的,所述基于安卓平台无线投屏实现帧率控制的装置还包括:

准备单元,用于准备一个中间接口层;

所述中间接口层为EGL;所述EGL具体指利用一个EGLContext和一个支持pbuffer的EGLSurface,实现EGLContext和EGLSurface交流。

创建/连接单元,用于利用中间接口层创建渲染纹理、表面纹理和视图窗口的互连实例;在本实施例中,中间接口层EGL创建渲染纹理TextureRender、表面纹理SurfaceTexture和视图窗口Surface的互连实例。

获取单元,用于在中间接口层获取视图窗口的数据内容。

第三方面,本发明提供一种存储介质,所述的存储介质中存有计算机程序,运行所述计算机程序后可以实现前述的基于安卓平台无线投屏实现帧率控制的方法。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,read-onlymemory)、随机存取存储器(RAM,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。

以上仅为说明本发明的实施方式,并不用于限制本发明,对于本领域的技术人员来说,凡在本发明的精神和原则之内,不经过创造性劳动所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

技术分类

06120114690955