切换录屏直播分辨率的方法及装置转让专利

申请号 : CN201710506047.9

文献号 : CN107454457B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 黄伟张文明陈少杰

申请人 : 武汉斗鱼网络科技有限公司

摘要 :

本发明涉及直播技术领域,尤其涉及切换录屏直播分辨率的方法及装置,方法包括:在录屏直播的过程中,监听屏幕显示方向是否发生变化;若屏幕显示方向发生变化,则判断录屏组件的分辨率与当前屏幕分辨率是否匹配;若录屏组件的分辨率与当前屏幕分辨率不匹配,则解除当前Surface组件与录屏组件之间的绑定关系;将录屏组件与新建Surface组件进行绑定,并将录屏组件的分辨率变更为当前屏幕分辨率,以及,将编码器的分辨率设置为当前屏幕分辨率,并根据编码器的分辨率更新直播推流库中的分辨率信息。本申请不需要用户预先选择横屏或竖屏显示模式,还能够根据录屏直播过程中实际屏幕显示方向对分辨率进行自动调节,实现了自适应调节录屏直播分辨率的技术效果。

权利要求 :

1.一种切换录屏直播分辨率的方法,其特征在于,所述方法包括:在录屏直播的过程中,监听屏幕显示方向是否发生变化;

若所述屏幕显示方向发生变化,则判断录屏组件的分辨率与当前屏幕分辨率是否匹配;

若所述录屏组件的分辨率与所述当前屏幕分辨率不匹配,则解除当前Surface组件与所述录屏组件之间的绑定关系;

将所述录屏组件与新建Surface组件进行绑定,并将所述录屏组件的分辨率变更为所述当前屏幕分辨率,以及,将编码器的分辨率设置为所述当前屏幕分辨率,并根据所述编码器的分辨率更新直播推流库中的分辨率信息;

其中,在所述解除当前Surface组件与所述录屏组件之间的绑定关系之后,且在所述将所述录屏组件与新建Surface组件进行绑定和所述将编码器的分辨率设置为所述当前屏幕分辨率之前,所述方法还包括:重置所述编码器,并在所述编码器中创建所述新建Surface组件;

其中,所述将所述录屏组件与新建Surface组件进行绑定,包括:在所述编码器的线程中初始化用于判断所述新建Surface组件是否创建完毕的CountDownLatch对象;

监听所述CountDownLatch对象的状态;

当所述CountDownLatch对象的状态表明所述新建Surface组件已创建完毕,将所述录屏组件与所述Surface组件进行绑定。

2.如权利要求1所述的方法,其特征在于,所述判断录屏组件的分辨率与当前屏幕分辨率是否匹配,包括:判断所述录屏组件的预设宽度和预设高度之间的第一尺寸关系是否与当前屏幕宽度和当前屏幕高度之间的第二尺寸关系相匹配;

其中,若所述第一尺寸关系为所述预设宽度大于所述预设高度,且所述第二尺寸关系为所述当前屏幕宽度大于所述当前屏幕高度,则表明所述第一尺寸关系与所述第二尺寸关系匹配;

若所述第一尺寸关系为所述预设宽度小于所述预设高度,且所述第二尺寸关系为所述当前屏幕宽度小于所述当前屏幕高度,则表明所述第一尺寸关系与所述第二尺寸关系匹配;

若所述第一尺寸关系为所述预设宽度大于所述预设高度,且所述第二尺寸关系为所述当前屏幕宽度小于所述当前屏幕高度,则表明所述第一尺寸关系与所述第二尺寸关系不匹配;

若所述第一尺寸关系为所述预设宽度小于所述预设高度,且所述第二尺寸关系为所述当前屏幕宽度大于所述当前屏幕高度,则表明所述第一尺寸关系与所述第二尺寸关系不匹配。

3.如权利要求1所述的方法,其特征在于,所述监听屏幕显示方向是否发生变化,包括:利用DisplayManager.DisplayListener回调监听屏幕显示方向是否发生变化。

4.一种切换录屏直播分辨率的装置,其特征在于,所述装置包括:监听模块,用于在录屏直播的过程中,监听屏幕显示方向是否发生变化;

判断模块,用于若所述屏幕显示方向发生变化,则判断录屏组件的分辨率与当前屏幕分辨率是否匹配;

解除模块,用于若所述录屏组件的分辨率与所述当前屏幕分辨率不匹配,则解除当前Surface组件与所述录屏组件之间的绑定关系;

分辨率更新模块,用于将所述录屏组件与新建Surface组件进行绑定,并将所述录屏组件的分辨率变更为所述当前屏幕分辨率,以及,将编码器的分辨率设置为所述当前屏幕分辨率,并根据所述编码器的分辨率更新直播推流库中的分辨率信息;

重置模块,用于重置所述编码器,并在所述编码器中创建所述新建Surface组件;

其中,所述分辨率更新模块,包括:

创建单元,用于在所述编码器的线程中初始化用于判断所述新建Surface组件是否创建完毕的CountDownLatch对象;

监听单元,用于监听所述CountDownLatch对象的状态;

绑定单元,用于当所述CountDownLatch对象的状态表明所述新建Surface组件已创建完毕,将所述录屏组件与所述Surface组件进行绑定。

5.如权利要求4所述的装置,其特征在于,所述判断模块,具体用于:判断所述录屏组件的预设宽度和预设高度之间的第一尺寸关系是否与当前屏幕宽度和当前屏幕高度之间的第二尺寸关系相匹配;

其中,若所述第一尺寸关系为所述预设宽度大于所述预设高度,且所述第二尺寸关系为所述当前屏幕宽度大于所述当前屏幕高度,则表明所述第一尺寸关系与所述第二尺寸关系匹配;

若所述第一尺寸关系为所述预设宽度小于所述预设高度,且所述第二尺寸关系为所述当前屏幕宽度小于所述当前屏幕高度,则表明所述第一尺寸关系与所述第二尺寸关系匹配;

若所述第一尺寸关系为所述预设宽度大于所述预设高度,且所述第二尺寸关系为所述当前屏幕宽度小于所述当前屏幕高度,则表明所述第一尺寸关系与所述第二尺寸关系不匹配;

若所述第一尺寸关系为所述预设宽度小于所述预设高度,且所述第二尺寸关系为所述当前屏幕宽度大于所述当前屏幕高度,则表明所述第一尺寸关系与所述第二尺寸关系不匹配。

6.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现以下步骤:在录屏直播的过程中,监听屏幕显示方向是否发生变化;

若所述屏幕显示方向发生变化,则判断录屏组件的分辨率与当前屏幕分辨率是否匹配;

若所述录屏组件的分辨率与所述当前屏幕分辨率不匹配,则解除当前Surface组件与所述录屏组件之间的绑定关系;

将所述录屏组件与新建Surface组件进行绑定,并将所述录屏组件的分辨率变更为所述当前屏幕分辨率,以及,将编码器的分辨率设置为所述当前屏幕分辨率,并根据所述编码器的分辨率更新直播推流库中的分辨率信息;

其中,在所述解除当前Surface组件与所述录屏组件之间的绑定关系之后,且在所述将所述录屏组件与新建Surface组件进行绑定和所述将编码器的分辨率设置为所述当前屏幕分辨率之前,还包括:重置所述编码器,并在所述编码器中创建所述新建Surface组件;

其中,所述将所述录屏组件与新建Surface组件进行绑定,包括:在所述编码器的线程中初始化用于判断所述新建Surface组件是否创建完毕的CountDownLatch对象;

监听所述CountDownLatch对象的状态;

当所述CountDownLatch对象的状态表明所述新建Surface组件已创建完毕,将所述录屏组件与所述Surface组件进行绑定。

7.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现以下步骤:在录屏直播的过程中,监听屏幕显示方向是否发生变化;

若所述屏幕显示方向发生变化,则判断录屏组件的分辨率与当前屏幕分辨率是否匹配;

若所述录屏组件的分辨率与所述当前屏幕分辨率不匹配,则解除当前Surface组件与所述录屏组件之间的绑定关系;

将所述录屏组件与新建Surface组件进行绑定,并将所述录屏组件的分辨率变更为所述当前屏幕分辨率,以及,将编码器的分辨率设置为所述当前屏幕分辨率,并根据所述编码器的分辨率更新直播推流库中的分辨率信息;

其中,在所述解除当前Surface组件与所述录屏组件之间的绑定关系之后,且在所述将所述录屏组件与新建Surface组件进行绑定和所述将编码器的分辨率设置为所述当前屏幕分辨率之前,还包括:重置所述编码器,并在所述编码器中创建所述新建Surface组件;

其中,所述将所述录屏组件与新建Surface组件进行绑定,包括:在所述编码器的线程中初始化用于判断所述新建Surface组件是否创建完毕的CountDownLatch对象;

监听所述CountDownLatch对象的状态;

当所述CountDownLatch对象的状态表明所述新建Surface组件已创建完毕,将所述录屏组件与所述Surface组件进行绑定。

说明书 :

切换录屏直播分辨率的方法及装置

技术领域

[0001] 本发明涉及直播技术领域,尤其涉及切换录屏直播分辨率的方法及装置。

背景技术

[0002] 录屏是一种对电子设备的屏幕进行录像的功能。目前,安卓平台提供MediaProjection接口进行录屏,直播软件可以使用该接口将录屏得到的数据进行推流直播。
[0003] 通常,在录屏直播的过程中,可能涉及不同的显示模式,显示模式包括横屏显示模式和竖屏显示模式,例如,王者荣耀优选的显示模式为横屏显示模式,皇室战争优选的显示模式为竖屏显示模式。
[0004] 现有技术在录屏直播时,需要用户预先对显示模式进行设置,即,预先将显示模式设置为横屏显示模式或竖屏显示模式。然后,在MediaProjection接口初始化时,根据预设的显示模式所对应的分辨率进行录屏直播。然而,若在录屏直播过程中,屏幕显示方向发生变化,将导致预设的显示模式与屏幕实际显示方向不一致,例如,在屏幕显示方向为竖屏时,用户预先设置显示模式为竖屏显示模式,而在录屏直播过程中,屏幕显示方向由竖屏切换至横屏,则,主播端仍然会以竖屏显示模式所对应的分辨率进行显示,从而造成分辨率损失,画质变差,画面显示效果不清晰。

发明内容

[0005] 鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的切换录屏直播分辨率的方法及装置。
[0006] 本发明提供一种切换录屏直播分辨率的方法,所述方法包括:
[0007] 在录屏直播的过程中,监听屏幕显示方向是否发生变化;
[0008] 若所述屏幕显示方向发生变化,则判断录屏组件的分辨率与当前屏幕分辨率是否匹配;
[0009] 若所述录屏组件的分辨率与所述当前屏幕分辨率不匹配,则解除当前Surface组件与所述录屏组件之间的绑定关系;
[0010] 将所述录屏组件与新建Surface组件进行绑定,并将所述录屏组件的分辨率变更为所述当前屏幕分辨率,以及,将编码器的分辨率设置为所述当前屏幕分辨率,并根据所述编码器的分辨率更新直播推流库中的分辨率信息。
[0011] 优选的,所述判断录屏组件的分辨率与当前屏幕分辨率是否匹配,包括:
[0012] 判断所述录屏组件的预设宽度和预设高度之间的第一尺寸关系是否与当前屏幕宽度和当前屏幕高度之间的第二尺寸关系相匹配;
[0013] 其中,若所述第一尺寸关系为所述预设宽度大于所述预设高度,且所述第二尺寸关系为所述当前屏幕宽度大于所述当前屏幕高度,则表明所述第一尺寸关系与所述第二尺寸关系匹配;
[0014] 若所述第一尺寸关系为所述预设宽度小于所述预设高度,且所述第二尺寸关系为所述当前屏幕宽度小于所述当前屏幕高度,则表明所述第一尺寸关系与所述第二尺寸关系匹配;
[0015] 若所述第一尺寸关系为所述预设宽度大于所述预设高度,且所述第二尺寸关系为所述当前屏幕宽度小于所述当前屏幕高度,则表明所述第一尺寸关系与所述第二尺寸关系不匹配;
[0016] 若所述第一尺寸关系为所述预设宽度小于所述预设高度,且所述第二尺寸关系为所述当前屏幕宽度大于所述当前屏幕高度,则表明所述第一尺寸关系与所述第二尺寸关系不匹配。
[0017] 优选的,在所述解除当前Surface组件与所述录屏组件之间的绑定关系之后,且在所述将所述录屏组件与新建Surface组件进行绑定和所述将编码器的分辨率设置为所述当前屏幕分辨率之前,所述方法还包括:
[0018] 重置所述编码器,并在所述编码器中创建所述新建Surface组件。
[0019] 优选的,所述将所述录屏组件与新建Surface组件进行绑定,包括:
[0020] 在所述编码器的线程中初始化用于判断所述新建Surface组件是否创建完毕的CountDownLatch对象;
[0021] 监听所述CountDownLatch对象的状态;
[0022] 当所述CountDownLatch对象的状态表明所述新建Surface组件已创建完毕,将所述录屏组件与所述Surface组件进行绑定。
[0023] 优选的,所述监听屏幕显示方向是否发生变化,包括:
[0024] 利用DisplayManager.DisplayListener回调监听屏幕显示方向是否发生变化。
[0025] 本发明实施例还提供一种切换录屏直播分辨率的装置,所述装置包括:
[0026] 监听模块,用于在录屏直播的过程中,监听屏幕显示方向是否发生变化;
[0027] 判断模块,用于若所述屏幕显示方向发生变化,则判断录屏组件的分辨率与当前屏幕分辨率是否匹配;
[0028] 解除模块,用于若所述录屏组件的分辨率与所述当前屏幕分辨率不匹配,则解除当前Surface组件与所述录屏组件之间的绑定关系;
[0029] 分辨率更新模块,用于将所述录屏组件与新建Surface组件进行绑定,并将所述录屏组件的分辨率变更为所述当前屏幕分辨率,以及,将编码器的分辨率设置为所述当前屏幕分辨率,并根据所述编码器的分辨率更新直播推流库中的分辨率信息。
[0030] 优选的,所述判断模块,具体用于:
[0031] 判断所述录屏组件的预设宽度和预设高度之间的第一尺寸关系是否与当前屏幕宽度和当前屏幕高度之间的第二尺寸关系相匹配;
[0032] 其中,若所述第一尺寸关系为所述预设宽度大于所述预设高度,且所述第二尺寸关系为所述当前屏幕宽度大于所述当前屏幕高度,则表明所述第一尺寸关系与所述第二尺寸关系匹配;
[0033] 若所述第一尺寸关系为所述预设宽度小于所述预设高度,且所述第二尺寸关系为所述当前屏幕宽度小于所述当前屏幕高度,则表明所述第一尺寸关系与所述第二尺寸关系匹配;
[0034] 若所述第一尺寸关系为所述预设宽度大于所述预设高度,且所述第二尺寸关系为所述当前屏幕宽度小于所述当前屏幕高度,则表明所述第一尺寸关系与所述第二尺寸关系不匹配;
[0035] 若所述第一尺寸关系为所述预设宽度小于所述预设高度,且所述第二尺寸关系为所述当前屏幕宽度大于所述当前屏幕高度,则表明所述第一尺寸关系与所述第二尺寸关系不匹配。
[0036] 优选的,所述装置还包括:
[0037] 重置模块,用于重置所述编码器,并在所述编码器中创建所述新建Surface组件。
[0038] 本发明实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现以下步骤:
[0039] 在录屏直播的过程中,监听屏幕显示方向是否发生变化;
[0040] 若所述屏幕显示方向发生变化,则判断录屏组件的分辨率与当前屏幕分辨率是否匹配;
[0041] 若所述录屏组件的分辨率与所述当前屏幕分辨率不匹配,则解除当前Surface组件与所述录屏组件之间的绑定关系;
[0042] 将所述录屏组件与新建Surface组件进行绑定,并将所述录屏组件的分辨率变更为所述当前屏幕分辨率,以及,将编码器的分辨率设置为所述当前屏幕分辨率,并根据所述编码器的分辨率更新直播推流库中的分辨率信息。
[0043] 本发明实施例还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现以下步骤:
[0044] 在录屏直播的过程中,监听屏幕显示方向是否发生变化;
[0045] 若所述屏幕显示方向发生变化,则判断录屏组件的分辨率与当前屏幕分辨率是否匹配;
[0046] 若所述录屏组件的分辨率与所述当前屏幕分辨率不匹配,则解除当前Surface组件与所述录屏组件之间的绑定关系;
[0047] 将所述录屏组件与新建Surface组件进行绑定,并将所述录屏组件的分辨率变更为所述当前屏幕分辨率,以及,将编码器的分辨率设置为所述当前屏幕分辨率,并根据所述编码器的分辨率更新直播推流库中的分辨率信息。
[0048] 本发明实施例中的一个或多个技术方案,至少具有如下技术效果或优点:
[0049] 本申请在录屏直播的过程中,通过对屏幕显示方向进行监听,当监听到屏幕显示方向发生变化,则判断录屏组件的分辨率与当前屏幕分辨率是否匹配,若录屏组件的分辨率与当前屏幕分辨率不匹配,则解除当前Surface组件与录屏组件之间的绑定关系,将录屏组件与新建Surface组件进行绑定,并将录屏组件的分辨率变更为当前屏幕分辨率,同时,将编码器的分辨率设置为当前屏幕分辨率,并根据编码器的分辨率更新直播推流库中的分辨率信息,本申请不仅不需要用户预先选择横屏或竖屏显示模式,而且还能够根据录屏直播过程中实际屏幕显示方向对分辨率进行自动调节,实现了自适应调节录屏直播分辨率的技术效果,保证了录屏直播的画面显示效果。

附图说明

[0050] 通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考图形表示相同的部件。在附图中:
[0051] 图1示出了本发明实施例中的切换录屏直播分辨率的方法的流程图;
[0052] 图2示出了本发明实施例中的切换录屏直播分辨率的装置的结构图;
[0053] 图3示出了本发明实施例中的计算机设备的实体结构示意图。

具体实施方式

[0054] 下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
[0055] 本申请的实施例提供一种切换录屏直播分辨率的方法,该方法应用于录屏直播的过程中,并且该方法应用于主播端,如图1所示,所述方法包括:
[0056] 步骤101:在录屏直播的过程中,监听屏幕显示方向是否发生变化。
[0057] 步骤102:若所述屏幕显示方向发生变化,则判断录屏组件的分辨率与当前屏幕分辨率是否匹配。
[0058] 步骤103:若所述录屏组件的分辨率与所述当前屏幕分辨率不匹配,则解除当前Surface组件与所述录屏组件之间的绑定关系。
[0059] 步骤104:将所述录屏组件与新建Surface组件进行绑定,并将所述录屏组件的分辨率变更为所述当前屏幕分辨率,以及,将编码器的分辨率设置为所述当前屏幕分辨率,并根据所述编码器的分辨率更新直播推流库中的分辨率信息。
[0060] 其中,本申请中的录屏组件为安卓平台的截屏服务组件,本申请中的Surface组件是原始图像缓冲区的一个句柄,通过Surface组件能够获取图像的内容,只有在录屏组件和Surface组件绑定在一起时,录屏组件才能够获得图像。
[0061] 进一步,本申请在录屏直播的过程中,通过对屏幕显示方向进行监听,当监听到屏幕显示方向发生变化,则判断录屏组件的分辨率与当前屏幕分辨率是否匹配,若录屏组件的分辨率与当前屏幕分辨率不匹配,则解除当前Surface组件与录屏组件之间的绑定关系,将录屏组件与新建Surface组件进行绑定,并将录屏组件的分辨率变更为当前屏幕分辨率,同时,将编码器的分辨率设置为当前屏幕分辨率,并根据编码器的分辨率更新直播推流库中的分辨率信息,本申请不仅不需要用户预先选择横屏或竖屏显示模式,而且还能够根据录屏直播过程中实际屏幕显示方向对分辨率进行自动调节,实现了自适应调节录屏直播分辨率的技术效果,保证了录屏直播的画面显示效果。
[0062] 在 本申 请 中 ,针 对 步 骤1 0 1 而言 ,常 用的 监 听 方法 包 括 采 用onConfigurationChanged进行监听和采用onOrientationChanged进行监听。采用onConfigurationChanged监听仅能监听本应用程序的屏幕相关变化事件,其他应用程序事件无法监听,例如,从竖屏的手机主页切换到横屏的王者荣耀将无法准确的监听到。采用onOrientationChanged监听仅能监听由手机旋转引起传感器变化的屏幕变化事件,而用户操作应用程序引起的屏幕变化事件无法监听。
[0063] 然而,本申请利用DisplayManager.DisplayListener回调监听屏幕显示方向,能够克服上述两种监听方法的不足,实现准确、有效地监听所有屏幕显示方向变化。
[0064] 在本申请中,为了避免误判,当监听到屏幕显示方向发生变化,需要执行进一步的判断,即,判断录屏组件的分辨率与当前屏幕分辨率是否匹配。具体来讲,针对录屏直播,与分辨率相关的组件包括:录屏组件(MediaProjection)、Surface组件、编码器和直播推流库,若上述组件的分辨率与主播端设备实际分辨率不匹配,则将会导致分辨率受损或者图像显示异常。
[0065] 进一步,对于如何判断录屏组件的分辨率与当前屏幕分辨率是否匹配,可以采用以下方法:
[0066] 首先,录屏组件具有预设宽度和预设高度,预设宽度和预设高度具有第一尺寸关系,例如,预设宽度大于预设高度,或,预设宽度小于预设高度,而,当前屏幕具有实际的屏幕宽度和屏幕高度,即:当前屏幕宽度和当前屏幕高度,当前屏幕高度和当前屏幕宽度具有第二尺寸关系,例如,当前屏幕高度大于当前屏幕宽度,或,当前屏幕高度小于当前屏幕宽度。
[0067] 其次,本申请通过判断第一尺寸关系是否与第二尺寸关系相匹配,以实现对录屏组件的分辨率与当前屏幕分辨率是否匹配的判断。具体地,若第一尺寸关系为预设宽度大于预设高度,且,第二尺寸关系为当前屏幕宽度大于当前屏幕高度,则表明第一尺寸关系与所述第二尺寸关系匹配。若第一尺寸关系为预设宽度小于预设高度,且,第二尺寸关系为当前屏幕宽度小于当前屏幕高度,则表明第一尺寸关系与第二尺寸关系匹配。若第一尺寸关系为预设宽度大于预设高度,且,第二尺寸关系为当前屏幕宽度小于当前屏幕高度,则表明第一尺寸关系与第二尺寸关系不匹配。若第一尺寸关系为预设宽度小于预设高度,且,第二尺寸关系为当前屏幕宽度大于当前屏幕高度,则表明第一尺寸关系与第二尺寸关系不匹配。进一步,若第一尺寸关系与第二尺寸关系不匹配,则表明录屏组件的分辨率与当前屏幕分辨率不匹配,若第一尺寸关系与第二尺寸关系匹配,则表明录屏组件的分辨率与当前屏幕分辨率匹配。
[0068] 需要说明的是,若屏幕显示方向没有发生变化,则不动作,同样,若录屏组件的分辨率与当前屏幕分辨率匹配,也不动作,保持当前屏幕分辨率不变。
[0069] 进一步,在录屏组件的分辨率与当前屏幕分辨率不匹配时,若不重置当前Surface组件,将会出现图像显示不全的问题,因此,针对步骤103而言,若录屏组件的分辨率与当前屏幕分辨率不匹配,本申请将会解除当前Surface组件与录屏组件之间的绑定关系,以便后续新建Surface组件,并将录屏组件与新建Surface组件进行绑定。具体地,可以通过接口mVirtualDisplay.setSurface(null)解除绑定。
[0070] 需要说明的是,本申请在重置编码器和重置录屏组件的分辨率之前,解除当前Surface组件与录屏组件之间的绑定关系,从而使旧分辨率数据和新分辨率数据隔离,避免编码器或者推流库处理的数据仍为旧分辨率数据,但是设置提前更新。
[0071] 在本申请中,在解除当前Surface组件与录屏组件之间的绑定关系之后,且在所述将录屏组件与新建Surface组件进行绑定和所述将编码器的分辨率设置为当前屏幕分辨率之前,所述方法还包括:
[0072] 重置编码器,并在编码器中创建新建Surface组件。
[0073] 在具体实施过程中,重置编码器的过程,也即对编码器重新初始化,而新建Surface组件则是在编码器中创建的,具体地,可以使用安卓平台提供的接口createInputSurface()进行创建。
[0074] 在具体实施过程中,录屏组件的线程和编码器的线程为两个独立的线程,编码器的线程创建新建Surface组件,录屏组件的线程绑定该新建Surface组件,两者为异步操作,录屏组件的线程在编码器的线程提供数据,在每次提供数据时,只发送一个消息,然后进行下一帧的处理,因此,如果新建Surface组件尚未创建完毕,就进行绑定将会引起直播断开,本申请利用CountDownLatch解决该问题,具体地,所述将所述录屏组件与新建Surface组件进行绑定,包括:
[0075] 在所述编码器的线程中初始化用于判断所述新建Surface组件是否创建完毕的CountDownLatch对象;
[0076] 监听所述CountDownLatch对象的状态;
[0077] 当所述CountDownLatch对象的状态表明所述新建Surface组件已创建完毕,将所述录屏组件与所述Surface组件进行绑定。
[0078] 在具体实施过程中,在编码器的线程中初始化一个CountDownLatch对象,该CountDownLatch对象可以为CountDownLatch(1),1表明新建Surface组件未创建完毕,进而录屏组件等待,当CountDownLatch对象由CountDownLatch(1)变为CountDownLatch(0)则表明新建Surface组件创建完毕,进而停止等待,将录屏组件与Surface组件进行绑定。
[0079] 在本申请的步骤104中,可以通过录屏组件的setSurface接口重新绑定新建表明组件,然后调用接口resize将录屏组件的分辨率变更为当前屏幕分辨率。另外,在步骤104中,由于编码器被重置,编码重新开始,将会产生一个编码包头信息,直播推流库可以通过判断当前包是否为该包头信息来间接判断是否需要更新分辨率,若当前包为该包头信息时,则直播推流库写入新的分辨率信息,确保及时更新分辨率。
[0080] 基于同一发明构思,本申请实施例还提供一种切换录屏直播分辨率的装置,如图2所示,所述装置包括:
[0081] 监听模块201,用于在录屏直播的过程中,监听屏幕显示方向是否发生变化;
[0082] 判断模块202,用于若所述屏幕显示方向发生变化,则判断录屏组件的分辨率与当前屏幕分辨率是否匹配;
[0083] 解除模块203,用于若所述录屏组件的分辨率与所述当前屏幕分辨率不匹配,则解除当前Surface组件与所述录屏组件之间的绑定关系;
[0084] 分辨率更新模块204,用于将所述录屏组件与新建Surface组件进行绑定,并将所述录屏组件的分辨率变更为所述当前屏幕分辨率,以及,将编码器的分辨率设置为所述当前屏幕分辨率,并根据所述编码器的分辨率更新直播推流库中的分辨率信息。
[0085] 优选的,判断模块202,具体用于:
[0086] 判断所述录屏组件的预设宽度和预设高度之间的第一尺寸关系是否与当前屏幕宽度和当前屏幕高度之间的第二尺寸关系相匹配;
[0087] 其中,若所述第一尺寸关系为所述预设宽度大于所述预设高度,且所述第二尺寸关系为所述当前屏幕宽度大于所述当前屏幕高度,则表明所述第一尺寸关系与所述第二尺寸关系匹配;
[0088] 若所述第一尺寸关系为所述预设宽度小于所述预设高度,且所述第二尺寸关系为所述当前屏幕宽度小于所述当前屏幕高度,则表明所述第一尺寸关系与所述第二尺寸关系匹配;
[0089] 若所述第一尺寸关系为所述预设宽度大于所述预设高度,且所述第二尺寸关系为所述当前屏幕宽度小于所述当前屏幕高度,则表明所述第一尺寸关系与所述第二尺寸关系不匹配;
[0090] 若所述第一尺寸关系为所述预设宽度小于所述预设高度,且所述第二尺寸关系为所述当前屏幕宽度大于所述当前屏幕高度,则表明所述第一尺寸关系与所述第二尺寸关系不匹配。
[0091] 优选的,所述装置还包括:
[0092] 重置模块,用于重置所述编码器,并在所述编码器中创建所述新建Surface组件。
[0093] 优选的,分辨率更新模块204,包括:
[0094] 创建单元,用于在所述编码器的线程中初始化用于判断所述新建Surface组件是否创建完毕的CountDownLatch对象;
[0095] 监听单元,用于监听所述CountDownLatch对象的状态;
[0096] 绑定单元,用于当所述CountDownLatch对象的状态表明所述新建Surface组件已创建完毕,将所述录屏组件与所述Surface组件进行绑定。
[0097] 优选的,监听模块201,具体用于:
[0098] 利用DisplayManager.DisplayListener回调监听屏幕显示方向是否发生变化。
[0099] 基于同一发明构思,本发明实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现以下步骤:
[0100] 在录屏直播的过程中,监听屏幕显示方向是否发生变化;
[0101] 若所述屏幕显示方向发生变化,则判断录屏组件的分辨率与当前屏幕分辨率是否匹配;
[0102] 若所述录屏组件的分辨率与所述当前屏幕分辨率不匹配,则解除当前Surface组件与所述录屏组件之间的绑定关系;
[0103] 将所述录屏组件与新建Surface组件进行绑定,并将所述录屏组件的分辨率变更为所述当前屏幕分辨率,以及,将编码器的分辨率设置为所述当前屏幕分辨率,并根据所述编码器的分辨率更新直播推流库中的分辨率信息。
[0104] 本发明实施例还提供了一种计算机设备,如图3所示,为了便于说明,仅示出了与本发明实施例相关的部分,具体技术细节未揭示的,请参照本发明实施例方法部分。该计算机设备可以为包括手机、平板电脑、PDA(Personal Digital Assistant,个人数字助理)、POS(Point of Sales,销售终端)、车载电脑等任意终端设备,以计算机设备为手机为例:
[0105] 图3示出的是与本发明实施例提供的计算机设备相关的部分结构的框图。参考图3,该计算机设备包括:存储器301和处理器302。本领域技术人员可以理解,图3中示出的计算机设备结构并不构成对计算机设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
[0106] 下面结合图3对计算机设备的各个构成部件进行具体的介绍:
[0107] 存储器301可用于存储软件程序以及模块,处理器302通过运行存储在存储器301的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器301可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储数据(比如音频数据、电话本等)等。此外,存储器301可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
[0108] 处理器302是计算机设备的控制中心,通过运行或执行存储在存储器301内的软件程序和/或模块,以及调用存储在存储器301内的数据,执行各种功能和处理数据。可选的,处理器302可包括一个或多个处理单元;优选的,处理器302可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。
[0109] 在本发明实施例中,该计算机设备所包括的处理器302可以具有以下功能:
[0110] 在录屏直播的过程中,监听屏幕显示方向是否发生变化;
[0111] 若所述屏幕显示方向发生变化,则判断录屏组件的分辨率与当前屏幕分辨率是否匹配;
[0112] 若所述录屏组件的分辨率与所述当前屏幕分辨率不匹配,则解除当前Surface组件与所述录屏组件之间的绑定关系;
[0113] 将所述录屏组件与新建Surface组件进行绑定,并将所述录屏组件的分辨率变更为所述当前屏幕分辨率,以及,将编码器的分辨率设置为所述当前屏幕分辨率,并根据所述编码器的分辨率更新直播推流库中的分辨率信息。
[0114] 总之,本申请在录屏直播的过程中,通过对屏幕显示方向进行监听,当监听到屏幕显示方向发生变化,则判断录屏组件的分辨率与当前屏幕分辨率是否匹配,若录屏组件的分辨率与当前屏幕分辨率不匹配,则解除当前Surface组件与录屏组件之间的绑定关系,将录屏组件与新建Surface组件进行绑定,并将录屏组件的分辨率变更为当前屏幕分辨率,同时,将编码器的分辨率设置为当前屏幕分辨率,并根据编码器的分辨率更新直播推流库中的分辨率信息,本申请不仅不需要用户预先选择横屏或竖屏显示模式,而且还能够根据录屏直播过程中实际屏幕显示方向对分辨率进行自动调节,实现了自适应调节录屏直播分辨率的技术效果,保证了录屏直播的画面显示效果。
[0115] 在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
[0116] 在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
[0117] 类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
[0118] 本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们预设在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
[0119] 此外,本领域的技术人员能够理解,尽管在此的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
[0120] 本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的网关、代理服务器、系统中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
[0121] 应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。